Class: Markly::Merge::SmartMerger

Inherits:
Markdown::Merge::SmartMerger
  • Object
show all
Defined in:
lib/markly/merge/smart_merger.rb

Overview

Orchestrates the smart merge process for Markdown files using Markly.

This is a thin wrapper around Markdown::Merge::SmartMerger that:

  • Forces the :markly backend
  • Sets markly-specific defaults (freeze token, inner_merge_code_blocks)
  • Exposes markly-specific options (flags, extensions)

Examples:

Basic merge (destination customizations preserved)

merger = SmartMerger.new(template_content, dest_content)
result = merger.merge
if result.success?
  File.write("output.md", result.content)
end

Template updates win

merger = SmartMerger.new(
  template_content,
  dest_content,
  preference: :template,
  add_template_only_nodes: true
)
result = merger.merge

Custom signature matching

sig_gen = ->(node) {
  canonical_type = Ast::Merge::NodeTyping.merge_type_for(node) || node.type
  if canonical_type == :heading
    [:heading, node.header_level]  # Match by level only, not content
  else
    node  # Fall through to default
  end
}
merger = SmartMerger.new(
  template_content,
  dest_content,
  signature_generator: sig_gen
)

Disable inner-merge for code blocks

merger = SmartMerger.new(
  template_content,
  dest_content,
  inner_merge_code_blocks: false
)

See Also:

  • Underlying implementation