Class: Uniword::Assembly::CrossReferenceResolver

Inherits:
Object
  • Object
show all
Defined in:
lib/uniword/assembly/cross_reference_resolver.rb

Overview

Resolves cross-references and bookmark links in assembled documents.

Responsibility: Update cross-references during document assembly. Single Responsibility: Only handles reference resolution.

The CrossReferenceResolver:

  • Resolves bookmark references

  • Updates cross-reference fields

  • Handles page number references

  • Maintains reference integrity

  • Supports inter-component references

Examples:

Basic resolution

resolver = CrossReferenceResolver.new
resolver.resolve(document)

With bookmark mapping

resolver = CrossReferenceResolver.new
resolver.add_bookmark_mapping('old_id', 'new_id')
resolver.resolve(document)

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeCrossReferenceResolver

Initialize resolver.

Examples:

Create resolver

resolver = CrossReferenceResolver.new


33
34
35
36
# File 'lib/uniword/assembly/cross_reference_resolver.rb', line 33

def initialize
  @bookmark_mappings = {}
  @bookmark_registry = {}
end

Instance Attribute Details

#bookmark_mappingsHash (readonly)

Returns Bookmark ID mappings.

Returns:

  • (Hash)

    Bookmark ID mappings



27
28
29
# File 'lib/uniword/assembly/cross_reference_resolver.rb', line 27

def bookmark_mappings
  @bookmark_mappings
end

Instance Method Details

#add_bookmark_mapping(old_id, new_id) ⇒ void

This method returns an undefined value.

Add bookmark ID mapping.

Examples:

Add mapping

resolver.add_bookmark_mapping('intro', 'section_1_intro')

Parameters:

  • old_id (String)

    Original bookmark ID

  • new_id (String)

    New bookmark ID



63
64
65
# File 'lib/uniword/assembly/cross_reference_resolver.rb', line 63

def add_bookmark_mapping(old_id, new_id)
  @bookmark_mappings[old_id] = new_id
end

#bookmark_exists?(bookmark_id) ⇒ Boolean

Check if bookmark exists.

Parameters:

  • bookmark_id (String)

    Bookmark ID

Returns:

  • (Boolean)

    True if bookmark exists



71
72
73
74
# File 'lib/uniword/assembly/cross_reference_resolver.rb', line 71

def bookmark_exists?(bookmark_id)
  resolved_id = resolve_bookmark_id(bookmark_id)
  @bookmark_registry.key?(resolved_id)
end

#bookmark_idsArray<String>

List all bookmarks.

Returns:

  • (Array<String>)

    Bookmark IDs



88
89
90
# File 'lib/uniword/assembly/cross_reference_resolver.rb', line 88

def bookmark_ids
  @bookmark_registry.keys
end

#clearvoid

This method returns an undefined value.

Clear all mappings and registry.



95
96
97
98
# File 'lib/uniword/assembly/cross_reference_resolver.rb', line 95

def clear
  @bookmark_mappings.clear
  @bookmark_registry.clear
end

#get_bookmark(bookmark_id) ⇒ Bookmark?

Get bookmark by ID.

Parameters:

  • bookmark_id (String)

    Bookmark ID

Returns:



80
81
82
83
# File 'lib/uniword/assembly/cross_reference_resolver.rb', line 80

def get_bookmark(bookmark_id)
  resolved_id = resolve_bookmark_id(bookmark_id)
  @bookmark_registry[resolved_id]
end

#resolve(document) ⇒ Document

Resolve cross-references in document.

Examples:

Resolve references

resolver.resolve(document)

Parameters:

  • document (Document)

    Document to process

Returns:

  • (Document)

    Document with resolved references



45
46
47
48
49
50
51
52
53
# File 'lib/uniword/assembly/cross_reference_resolver.rb', line 45

def resolve(document)
  # First pass: collect all bookmarks
  collect_bookmarks(document)

  # Second pass: resolve references
  resolve_references(document)

  document
end