Task: Convert 10 Wordprocessingml element files from require_relative to autoload Duration: 2-3 hours Prerequisites: Session 2 Complete (documentation archived, audit complete)
Session 2 Complete: ✅ Documentation archived, 160 require_relative files audited Current State: 10 Wordprocessingml element files need conversion Goal: Create Wordprocessingml module autoload index, convert all element files
lib/uniword/wordprocessingml/table.rb
lib/uniword/wordprocessingml/paragraph.rb
lib/uniword/wordprocessingml/run.rb
lib/uniword/wordprocessingml/level.rb
lib/uniword/wordprocessingml/table_cell_properties.rb
lib/uniword/wordprocessingml/r_pr_default.rb
lib/uniword/wordprocessingml/p_pr_default.rb
lib/uniword/wordprocessingml/document_root.rb
lib/uniword/wordprocessingml/style.rb
lib/uniword/wordprocessingml/structured_document_tag.rb
Create lib/uniword/wordprocessingml.rb:
# frozen_string_literal: true
module Uniword
module Wordprocessingml
# Core elements
autoload :DocumentRoot, 'uniword/wordprocessingml/document_root'
autoload :Paragraph, 'uniword/wordprocessingml/paragraph'
autoload :Run, 'uniword/wordprocessingml/run'
autoload :Table, 'uniword/wordprocessingml/table'
# Structure and metadata
autoload :Level, 'uniword/wordprocessingml/level'
autoload :Style, 'uniword/wordprocessingml/style'
autoload :StructuredDocumentTag, 'uniword/wordprocessingml/structured_document_tag'
# Properties
autoload :TableCellProperties, 'uniword/wordprocessingml/table_cell_properties'
autoload :RPrDefault, 'uniword/wordprocessingml/r_pr_default'
autoload :PPrDefault, 'uniword/wordprocessingml/p_pr_default'
end
endAdd to lib/uniword.rb after other module autoloads:
autoload :Wordprocessingml, 'uniword/wordprocessingml'For each of the 10 files, document what they require:
for file in lib/uniword/wordprocessingml/{table,paragraph,run,level,table_cell_properties,r_pr_default,p_pr_default,document_root,style,structured_document_tag}.rb; do
echo "=== $(basename $file) ==="
grep "require_relative" "$file"
echo ""
doneExpected findings:
- Properties classes (already in Properties module)
- Other wordprocessingml classes (now in Wordprocessingml module)
- OOXML classes (may need separate handling)
- Possible circular dependencies
Pattern for each file:
-
Check requires:
grep "require_relative" lib/uniword/wordprocessingml/table.rb -
Remove or comment require_relative lines:
- Properties: Remove (Properties module handles)
- Other wordprocessingml: Remove (Wordprocessingml module handles)
- Circular deps: Keep with comment
-
Test immediately:
bundle exec rspec spec/uniword/styleset_roundtrip_spec.rb \ spec/uniword/theme_roundtrip_spec.rb \ --format progress -
Expected: 258/258 baseline maintained
Conversion Order (dependencies first):
- level.rb (likely no deps)
- r_pr_default.rb (default properties)
- p_pr_default.rb (default properties)
- table_cell_properties.rb (properties)
- run.rb (depends on r_pr_default)
- paragraph.rb (depends on p_pr_default)
- table.rb (depends on table_cell_properties)
- structured_document_tag.rb (metadata)
- style.rb (uses properties)
- document_root.rb (uses everything)
If any file cannot remove require_relative due to circular dependency:
# In the file that must keep require_relative
require_relative 'other_file' # require_relative kept: circular dependency
# Add comment explaining:
# FileA.initialize needs FileB constant immediately loaded
# FileB.some_method references FileA
# Cannot use autoload - breaks constant resolutionDocument in AUTOLOAD_CONVERSION_CHECKLIST.md:
### Circular Dependencies Found
1. **table.rb ↔ paragraph.rb**
- table.rb line 15: needs Paragraph for nested content
- paragraph.rb line 28: needs Table for table cells
- Solution: Keep require_relative in bothVerify autoloading works correctly:
# Run full baseline
bundle exec rspec spec/uniword/styleset_roundtrip_spec.rb \
s
pec/uniword/theme_roundtrip_spec.rb \
--format progress
# Expected: 258 examples, 177 failures (baseline maintained)Check for new failures:
- NameError (constant not found) → autoload missing
- LoadError (file not found) → path incorrect
- NoMethodError (unexpected) → circular dependency issue
bundle exec rspec --format progressExpected outcome:
- No NEW failures beyond baseline
- All autoloads working
- Circular deps documented (if any)
git add lib/uniword/wordprocessingml.rb \
lib/uniword/wordprocessingml/*.rb \
lib/uniword.rb \
AUTOLOAD_CONVERSION_CHECKLIST.md
git commit -m "refactor(autoload): Convert Wordprocessingml elements to autoload
Create lib/uniword/wordprocessingml.rb module with autoloads for:
- Core elements: DocumentRoot, Paragraph, Run, Table
- Structure: Level, Style, StructuredDocumentTag
- Properties: TableCellProperties, RPrDefault, PPrDefault
Remove require_relative from 10 element files.
$(if circul ar deps) Document circular dependencies: <list>
Files converted: 10/10
Baseline tests: 258/258 maintained (177 known failures)
Circular dependencies: <N> documented
Phase 2 Session 3 complete."Mark Session 3 complete in AUTOLOAD_WEEK3_STATUS.md:
- Session 3: ✅ Wordprocessingml conversion complete
- Files converted: 10
- Circular deps: N (if any)
Decide next target:
- Option A: Properties/ directory (29 files)
- Option B: OOXML core (9 files)
- Option C: Feature directories (start with smallest)
Create Session 4 prompt based on choice.
- Created lib/uniword/wordprocessingml.rb with 10 autoloads
- Added autoload to lib/uniword.rb
- Converted 10 element files (removed require_relative)
- Documented circular dependencies (if any)
- Baseline tests passing (258/258)
- No new test failures
- Changes committed
- Status tracker updated
- Session 4 prompt created
| Metric | Start | Target | Status |
|---|---|---|---|
| Wordprocessingml require_relative | 10 | 0-2 | Conversion |
| Total require_relative | 160 | ~150 | Progress |
| Baseline tests | 258/177 | 258/177 | Maintained |
| Circular deps | Unknown | Documented | - |
Solution: Add missing autoload to Wordprocessingml module
Solution: Check autoload path matches file location
Solution: Likely circular dependency - document and keep require_relative
Solution: Ensure lib/uniword/wordprocessingml.rb is loaded via lib/uniword.rb
Created: December 8, 2024 Status: Ready to execute Estimated Duration: 2-3 hours Expected Result: Wordprocessingml elements use autoload, 10 files converted