Class: SvgConform::References::ReferenceManifest
- Inherits:
-
Lutaml::Model::Serializable
- Object
- Lutaml::Model::Serializable
- SvgConform::References::ReferenceManifest
- Defined in:
- lib/svg_conform/references/reference_manifest.rb
Overview
Comprehensive manifest of all IDs and references in the document Provides complete context for consumer validation decisions
Instance Method Summary collapse
-
#id_defined?(id_value) ⇒ Boolean
Check if an ID is defined.
-
#initialize(source_document: nil) ⇒ ReferenceManifest
constructor
A new instance of ReferenceManifest.
-
#references_by_type ⇒ Object
Get all references grouped by type.
-
#references_to_id(id_value) ⇒ Object
Get references targeting a specific ID.
-
#register_id(id_value, element_name:, line_number: nil, column_number: nil) ⇒ Object
Register an ID definition.
-
#register_reference(reference) ⇒ Object
Register a reference.
-
#statistics ⇒ Object
Get statistics.
-
#to_h ⇒ Object
Export manifest for consumer processing.
-
#to_json(*_args) ⇒ Object
Export as JSON for programmatic processing.
-
#to_yaml ⇒ Object
Export as YAML for easy inspection.
-
#unresolved_internal_references ⇒ Object
Get unresolved internal references (references to non-existent IDs).
Constructor Details
#initialize(source_document: nil) ⇒ ReferenceManifest
Returns a new instance of ReferenceManifest.
37 38 39 40 41 42 43 |
# File 'lib/svg_conform/references/reference_manifest.rb', line 37 def initialize(source_document: nil) super() @source_document = source_document @available_ids = [] @internal_references = [] @external_references = [] end |
Instance Method Details
#id_defined?(id_value) ⇒ Boolean
Check if an ID is defined
66 67 68 |
# File 'lib/svg_conform/references/reference_manifest.rb', line 66 def id_defined?(id_value) @available_ids.any? { |id_def| id_def.id_value == id_value } end |
#references_by_type ⇒ Object
Get all references grouped by type
79 80 81 82 |
# File 'lib/svg_conform/references/reference_manifest.rb', line 79 def references_by_type all_refs = @internal_references + @external_references all_refs.group_by { |ref| ref.class.name.split("::").last } end |
#references_to_id(id_value) ⇒ Object
Get references targeting a specific ID
71 72 73 74 75 76 |
# File 'lib/svg_conform/references/reference_manifest.rb', line 71 def references_to_id(id_value) @internal_references.select do |ref| ref.is_a?(InternalFragmentReference) && ref.target_id == id_value end end |
#register_id(id_value, element_name:, line_number: nil, column_number: nil) ⇒ Object
Register an ID definition
46 47 48 49 50 51 52 53 54 |
# File 'lib/svg_conform/references/reference_manifest.rb', line 46 def register_id(id_value, element_name:, line_number: nil, column_number: nil) @available_ids << IdDefinition.new( id_value: id_value, element_name: element_name, line_number: line_number, column_number: column_number, ) end |
#register_reference(reference) ⇒ Object
Register a reference
57 58 59 60 61 62 63 |
# File 'lib/svg_conform/references/reference_manifest.rb', line 57 def register_reference(reference) if reference.internally_validatable? @internal_references << reference elsif reference.requires_consumer_validation? @external_references << reference end end |
#statistics ⇒ Object
Get statistics
94 95 96 97 98 99 100 101 102 103 |
# File 'lib/svg_conform/references/reference_manifest.rb', line 94 def statistics { total_ids: @available_ids.size, total_references: @internal_references.size + @external_references.size, internal_references: @internal_references.size, external_references: @external_references.size, unresolved_internal: unresolved_internal_references.size, references_by_type: references_by_type.transform_values(&:size), } end |
#to_h ⇒ Object
Export manifest for consumer processing
106 107 108 109 110 111 112 113 114 |
# File 'lib/svg_conform/references/reference_manifest.rb', line 106 def to_h { source_document: @source_document, available_ids: @available_ids.map(&:to_h), internal_references: @internal_references.map(&:to_h), external_references: @external_references.map(&:to_h), statistics: statistics, } end |
#to_json(*_args) ⇒ Object
Export as JSON for programmatic processing
123 124 125 126 |
# File 'lib/svg_conform/references/reference_manifest.rb', line 123 def to_json(*_args) require "json" JSON.pretty_generate(to_h) end |
#to_yaml ⇒ Object
Export as YAML for easy inspection
117 118 119 120 |
# File 'lib/svg_conform/references/reference_manifest.rb', line 117 def to_yaml require "yaml" to_h.to_yaml end |
#unresolved_internal_references ⇒ Object
Get unresolved internal references (references to non-existent IDs)
85 86 87 88 89 90 91 |
# File 'lib/svg_conform/references/reference_manifest.rb', line 85 def unresolved_internal_references @internal_references.select do |ref| next unless ref.is_a?(InternalFragmentReference) !id_defined?(ref.target_id) end end |