Class: Jsonc::Merge::SmartMerger

Inherits:
Ast::Merge::SmartMergerBase
  • Object
show all
Defined in:
lib/jsonc/merge/smart_merger.rb

Overview

High-level merger for JSONC (JSON with Comments) content.
Orchestrates parsing, analysis, and conflict resolution.

Examples:

Basic usage

merger = SmartMerger.new(template_content, dest_content)
merged_string = merger.merge
File.write("merged.jsonc", merged_string)

With full result object

merger = SmartMerger.new(template, dest)
result = merger.merge_result
puts result.statistics
File.write("merged.jsonc", result.content)

With options

merger = SmartMerger.new(template, dest,
  preference: :template,
  add_template_only_nodes: true)
merged_string = merger.merge

With node_typing for per-node-type preferences

merger = SmartMerger.new(template, dest,
  node_typing: { "object" => ->(n) { NodeTyping.with_merge_type(n, :config) } },
  preference: { default: :destination, config: :template })

Instance Method Summary collapse

Constructor Details

#initialize(template_content, dest_content, signature_generator: nil, preference: :destination, add_template_only_nodes: false, freeze_token: nil, match_refiner: nil, regions: nil, region_placeholder: nil, node_typing: nil, **options) ⇒ SmartMerger

Creates a new SmartMerger

Parameters:

  • template_content (String)

    Template JSONC content

  • dest_content (String)

    Destination JSONC content

  • signature_generator (Proc, nil) (defaults to: nil)

    Custom signature generator

  • preference (Symbol, Hash) (defaults to: :destination)

    :destination, :template, or per-type Hash

  • add_template_only_nodes (Boolean) (defaults to: false)

    Whether to add nodes only found in template

  • freeze_token (String, nil) (defaults to: nil)

    Token for freeze block markers

  • match_refiner (#call, nil) (defaults to: nil)

    Match refiner for fuzzy matching

  • regions (Array<Hash>, nil) (defaults to: nil)

    Region configurations for nested merging

  • region_placeholder (String, nil) (defaults to: nil)

    Custom placeholder for regions

  • node_typing (Hash{Symbol,String => #call}, nil) (defaults to: nil)

    Node typing configuration
    for per-node-type merge preferences

  • options (Hash)

    Additional options for forward compatibility



44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# File 'lib/jsonc/merge/smart_merger.rb', line 44

def initialize(
  template_content,
  dest_content,
  signature_generator: nil,
  preference: :destination,
  add_template_only_nodes: false,
  freeze_token: nil,
  match_refiner: nil,
  regions: nil,
  region_placeholder: nil,
  node_typing: nil,
  **options
)
  super(
    template_content,
    dest_content,
    signature_generator: signature_generator,
    preference: preference,
    add_template_only_nodes: add_template_only_nodes,
    freeze_token: freeze_token,
    match_refiner: match_refiner,
    regions: regions,
    region_placeholder: region_placeholder,
    node_typing: node_typing,
    **options
  )
end

Instance Method Details

#optionsHash

Backward-compatible options hash

Returns:

  • (Hash)

    The merge options



75
76
77
78
79
80
81
# File 'lib/jsonc/merge/smart_merger.rb', line 75

def options
  {
    preference: @preference,
    add_template_only_nodes: @add_template_only_nodes,
    match_refiner: @match_refiner,
  }
end