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 =
Default placeholder suffix for extracted regions.
'>>>'
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.
132 133 134 135 136 |
# File 'lib/ast/merge/detector/mergeable.rb', line 132 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.
119 120 121 122 123 |
# File 'lib/ast/merge/detector/mergeable.rb', line 119 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.
108 109 110 |
# File 'lib/ast/merge/detector/mergeable.rb', line 108 def regions_configured? @region_configs && !@region_configs.empty? end |
#setup_regions(regions:, region_placeholder: nil) ⇒ Object
Set up region handling for this merger instance.
96 97 98 99 100 101 |
# File 'lib/ast/merge/detector/mergeable.rb', line 96 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.
144 145 146 147 148 149 150 151 152 |
# File 'lib/ast/merge/detector/mergeable.rb', line 144 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 |