Module: Ast::Merge::Detector::Mergeable
- Included in:
- SmartMergerBase
- Defined in:
- lib/ast/merge/detector/mergeable.rb
Overview
Mixin for adding region support to SmartMerger classes.
This module provides functionality for detecting and handling regions
within documents that should be merged with different strategies.
Regions are portions of a document (like YAML frontmatter or fenced
code blocks) that may require specialized merging.
Defined Under Namespace
Classes: Config, ExtractedRegion
Constant Summary collapse
- DEFAULT_PLACEHOLDER_PREFIX =
Default placeholder prefix for extracted regions
"<<<AST_MERGE_REGION_"- DEFAULT_PLACEHOLDER_SUFFIX =
">>>"
Instance Method Summary collapse
-
#extract_dest_regions(content) ⇒ String
Extract regions from the destination content, replacing with placeholders.
-
#extract_template_regions(content) ⇒ String
Extract regions from the template content, replacing with placeholders.
-
#regions_configured? ⇒ Boolean
Check if this merger has region configurations.
-
#setup_regions(regions:, region_placeholder: nil) ⇒ Object
Set up region handling for this merger instance.
-
#substitute_merged_regions(merged_content) ⇒ String
Merge extracted regions and substitute them back into the merged content.
Instance Method Details
#extract_dest_regions(content) ⇒ String
Extract regions from the destination content, replacing with placeholders.
131 132 133 134 135 |
# File 'lib/ast/merge/detector/mergeable.rb', line 131 def extract_dest_regions(content) return content unless regions_configured? extract_regions(content, @extracted_dest_regions) end |
#extract_template_regions(content) ⇒ String
Extract regions from the template content, replacing with placeholders.
118 119 120 121 122 |
# File 'lib/ast/merge/detector/mergeable.rb', line 118 def extract_template_regions(content) return content unless regions_configured? extract_regions(content, @extracted_template_regions) end |
#regions_configured? ⇒ Boolean
Check if this merger has region configurations.
107 108 109 |
# File 'lib/ast/merge/detector/mergeable.rb', line 107 def regions_configured? @region_configs && !@region_configs.empty? end |
#setup_regions(regions:, region_placeholder: nil) ⇒ Object
Set up region handling for this merger instance.
95 96 97 98 99 100 |
# File 'lib/ast/merge/detector/mergeable.rb', line 95 def setup_regions(regions:, region_placeholder: nil) @region_configs = build_region_configs(regions) @region_placeholder_prefix = region_placeholder || DEFAULT_PLACEHOLDER_PREFIX @extracted_template_regions = [] @extracted_dest_regions = [] end |
#substitute_merged_regions(merged_content) ⇒ String
Merge extracted regions and substitute them back into the merged content.
143 144 145 146 147 148 149 150 151 |
# File 'lib/ast/merge/detector/mergeable.rb', line 143 def substitute_merged_regions(merged_content) return merged_content unless regions_configured? result = merged_content # Process regions in reverse order of extraction to handle nested placeholders # We need to merge template and dest regions by their placeholder index merge_and_substitute_regions(result) end |