Class: Psych::Merge::MergeResult
- Inherits:
-
Ast::Merge::MergeResultBase
- Object
- Ast::Merge::MergeResultBase
- Psych::Merge::MergeResult
- Includes:
- Ast::Merge::StructuredReviewApplySupport
- Defined in:
- lib/psych/merge/merge_result.rb
Overview
Tracks the result of a merge operation, including the merged content, decisions made, and statistics.
Inherits decision constants and base functionality from Ast::Merge::MergeResultBase.
Constant Summary collapse
- DECISION_KEPT_TEMPLATE =
Inherit decision constants from base class
Ast::Merge::MergeResultBase::DECISION_KEPT_TEMPLATE
- DECISION_KEPT_DEST =
Ast::Merge::MergeResultBase::DECISION_KEPT_DEST
- DECISION_MERGED =
Ast::Merge::MergeResultBase::DECISION_MERGED
- DECISION_ADDED =
Ast::Merge::MergeResultBase::DECISION_ADDED
- DECISION_FREEZE_BLOCK =
Ast::Merge::MergeResultBase::DECISION_FREEZE_BLOCK
Instance Attribute Summary collapse
-
#statistics ⇒ Hash
readonly
Statistics about the merge.
Instance Method Summary collapse
-
#add_blank_line(decision: DECISION_MERGED, source: :merged) ⇒ Object
Add a blank line.
-
#add_freeze_block(freeze_node) ⇒ Object
Add content from a freeze block.
-
#add_line(line, decision:, source:, original_line: nil) ⇒ Object
Add a single line to the result.
-
#add_lines(lines, decision:, source:, start_line: nil) ⇒ Object
Add multiple lines to the result.
-
#add_lines_from(lines, decision:, source:, start_line: nil) ⇒ Object
Add lines from an array, preserving trailing newlines.
-
#add_mapping_entry(entry, decision:, source:) ⇒ Object
Add content from a mapping entry.
-
#content ⇒ String
Alias for to_yaml.
-
#initialize(**options) ⇒ MergeResult
constructor
Initialize a new merge result.
-
#to_yaml ⇒ String
Get the merged content as a YAML string.
Constructor Details
#initialize(**options) ⇒ MergeResult
Initialize a new merge result
29 30 31 32 33 34 35 36 37 38 |
# File 'lib/psych/merge/merge_result.rb', line 29 def initialize(**) super(**) @statistics = { template_lines: 0, dest_lines: 0, merged_lines: 0, freeze_preserved_lines: 0, total_decisions: 0 } end |
Instance Attribute Details
#statistics ⇒ Hash (readonly)
Returns Statistics about the merge.
25 26 27 |
# File 'lib/psych/merge/merge_result.rb', line 25 def statistics @statistics end |
Instance Method Details
#add_blank_line(decision: DECISION_MERGED, source: :merged) ⇒ Object
Add a blank line
88 89 90 |
# File 'lib/psych/merge/merge_result.rb', line 88 def add_blank_line(decision: DECISION_MERGED, source: :merged) add_line('', decision: decision, source: source) end |
#add_freeze_block(freeze_node) ⇒ Object
Add content from a freeze block
95 96 97 98 99 100 101 102 103 104 |
# File 'lib/psych/merge/merge_result.rb', line 95 def add_freeze_block(freeze_node) freeze_node.lines.each_with_index do |line, idx| add_line( line.chomp, decision: DECISION_FREEZE_BLOCK, source: :destination, original_line: freeze_node.start_line + idx ) end end |
#add_line(line, decision:, source:, original_line: nil) ⇒ Object
Add a single line to the result
46 47 48 49 50 51 52 53 54 55 56 |
# File 'lib/psych/merge/merge_result.rb', line 46 def add_line(line, decision:, source:, original_line: nil) @lines << { content: line, decision: decision, source: source, original_line: original_line } track_statistics(decision, source) track_decision(decision, source, line: original_line) end |
#add_lines(lines, decision:, source:, start_line: nil) ⇒ Object
Add multiple lines to the result
64 65 66 67 68 69 |
# File 'lib/psych/merge/merge_result.rb', line 64 def add_lines(lines, decision:, source:, start_line: nil) lines.each_with_index do |line, idx| original_line = start_line ? start_line + idx : nil add_line(line, decision: decision, source: source, original_line: original_line) end end |
#add_lines_from(lines, decision:, source:, start_line: nil) ⇒ Object
Add lines from an array, preserving trailing newlines
77 78 79 80 81 82 |
# File 'lib/psych/merge/merge_result.rb', line 77 def add_lines_from(lines, decision:, source:, start_line: nil) lines.each_with_index do |line, idx| original_line = start_line ? start_line + idx : nil add_line(line, decision: decision, source: source, original_line: original_line) end end |
#add_mapping_entry(entry, decision:, source:) ⇒ Object
Add content from a mapping entry
111 112 113 114 115 116 117 118 119 120 |
# File 'lib/psych/merge/merge_result.rb', line 111 def add_mapping_entry(entry, decision:, source:) return unless entry.start_line && entry.end_line (entry.start_line..entry.end_line).each do |line_num| line = entry.lines[line_num - 1] next unless line add_line(line.chomp, decision: decision, source: source, original_line: line_num) end end |
#content ⇒ String
Alias for to_yaml
134 135 136 |
# File 'lib/psych/merge/merge_result.rb', line 134 def content to_yaml end |
#to_yaml ⇒ String
Get the merged content as a YAML string
125 126 127 128 129 130 |
# File 'lib/psych/merge/merge_result.rb', line 125 def to_yaml content = @lines.map { |l| l[:content] }.join("\n") # Ensure trailing newline content += "\n" unless content.end_with?("\n") || content.empty? content end |