Module: Canon::TreeDiff::OperationConverterHelpers::MetadataEnricher

Defined in:
lib/canon/tree_diff/operation_converter_helpers/metadata_enricher.rb

Overview

Metadata enrichment for DiffNodes Handles path building, serialization, and attribute extraction

Class Method Summary collapse

Class Method Details

.build_path(tree_node, format) ⇒ String?

Build canonical path for a TreeNode

Parameters:

Returns:

  • (String, nil)

    Canonical path with ordinal indices



31
32
33
34
35
36
# File 'lib/canon/tree_diff/operation_converter_helpers/metadata_enricher.rb', line 31

def self.build_path(tree_node, format)
  return nil if tree_node.nil?

  Canon::Diff::PathBuilder.build(tree_node,
                                 format: format == :xml ? :document : :fragment)
end

.enrich(tree_node1, tree_node2, format) ⇒ Hash

Enrich DiffNode with canonical path, serialized content, and attributes This extracts presentation-ready metadata from TreeNodes for Stage 4 rendering

Parameters:

Returns:

  • (Hash)

    Enriched metadata hash



16
17
18
19
20
21
22
23
24
# File 'lib/canon/tree_diff/operation_converter_helpers/metadata_enricher.rb', line 16

def self.enrich(tree_node1, tree_node2, format)
  {
    path: build_path(tree_node1 || tree_node2, format),
    serialized_before: serialize(tree_node1),
    serialized_after: serialize(tree_node2),
    attributes_before: extract_attributes(tree_node1),
    attributes_after: extract_attributes(tree_node2),
  }
end

.extract_attributes(tree_node) ⇒ Hash?

Extract attributes from a TreeNode

Parameters:

Returns:

  • (Hash, nil)

    Attributes hash



53
54
55
56
57
# File 'lib/canon/tree_diff/operation_converter_helpers/metadata_enricher.rb', line 53

def self.extract_attributes(tree_node)
  return nil if tree_node.nil?

  tree_node.is_a?(Core::TreeNode) ? (tree_node.attributes || {}) : {}
end

.serialize(tree_node) ⇒ String?

Serialize a TreeNode’s source node to string

Parameters:

Returns:

  • (String, nil)

    Serialized content



42
43
44
45
46
47
# File 'lib/canon/tree_diff/operation_converter_helpers/metadata_enricher.rb', line 42

def self.serialize(tree_node)
  return nil if tree_node.nil?

  source = tree_node.is_a?(Core::TreeNode) ? tree_node.source_node : tree_node
  Canon::Diff::NodeSerializer.serialize(source)
end