Class: Markdown::Merge::MergeResult

Inherits:
Ast::Merge::MergeResultBase
  • Object
show all
Defined in:
lib/markdown/merge/merge_result.rb

Overview

Represents the result of a Markdown merge operation.

Inherits from Ast::Merge::MergeResultBase to provide consistent result
handling across all merge gems. Contains the merged content along
with metadata about conflicts, frozen sections, and changes made.

Examples:

Successful merge

result = SmartMerger.merge(source_a, source_b)
if result.success?
  File.write("merged.md", result.content)
end

Handling conflicts

result = SmartMerger.merge(source_a, source_b)
if result.conflicts?
  result.conflicts.each do |conflict|
    puts "Conflict at: #{conflict[:location]}"
  end
end

Checking for document problems

result = SmartMerger.merge(source_a, source_b, normalize_whitespace: true)
result.problems.by_category(:excessive_whitespace).each do |problem|
  puts "Whitespace issue at line #{problem.details[:line]}"
end

See Also:

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(content:, conflicts: [], frozen_blocks: [], stats: {}, problems: nil, **options) ⇒ MergeResult

Initialize a new MergeResult

Parameters:

  • content (String, nil)

    Merged content (nil if merge failed)

  • conflicts (Array<Hash>) (defaults to: [])

    Conflict descriptions

  • frozen_blocks (Array<Hash>) (defaults to: [])

    Preserved frozen block info

  • stats (Hash) (defaults to: {})

    Merge statistics

  • problems (DocumentProblems, nil) (defaults to: nil)

    Document problems found

  • options (Hash)

    Additional options for forward compatibility



45
46
47
48
49
50
51
52
53
54
# File 'lib/markdown/merge/merge_result.rb', line 45

def initialize(content:, conflicts: [], frozen_blocks: [], stats: {}, problems: nil, **options)
  super(
    conflicts: conflicts,
    frozen_blocks: frozen_blocks,
    stats: default_stats.merge(stats),
    **options
  )
  @content_raw = content
  @problems = problems || DocumentProblems.new
end

Instance Attribute Details

#problemsDocumentProblems (readonly)

Returns Problems found during merge.

Returns:



35
36
37
# File 'lib/markdown/merge/merge_result.rb', line 35

def problems
  @problems
end

Instance Method Details

#conflicts?Boolean

Check if there are unresolved conflicts

Returns:

  • (Boolean)

    True if conflicts exist



89
90
91
# File 'lib/markdown/merge/merge_result.rb', line 89

def conflicts?
  !conflicts.empty?
end

#contentString?

Get the merged content as a string.
Overrides base class to return string content directly.

Returns:

  • (String, nil)

    The merged Markdown content



60
61
62
# File 'lib/markdown/merge/merge_result.rb', line 60

def content
  @content_raw
end

#content?Boolean

Check if content has been set (not nil).
Overrides base class for string-based content.

Returns:

  • (Boolean)


68
69
70
# File 'lib/markdown/merge/merge_result.rb', line 68

def content?
  !@content_raw.nil?
end

#content_stringString?

Get content as a string (alias for content in this class).

Returns:

  • (String, nil)

    The merged content



75
76
77
# File 'lib/markdown/merge/merge_result.rb', line 75

def content_string
  @content_raw
end

#frozen_countInteger

Get count of frozen blocks preserved

Returns:

  • (Integer)

    Number of frozen blocks



131
132
133
# File 'lib/markdown/merge/merge_result.rb', line 131

def frozen_count
  frozen_blocks.size
end

#has_frozen_blocks?Boolean

Check if any frozen blocks were preserved

Returns:

  • (Boolean)

    True if frozen blocks were preserved



96
97
98
# File 'lib/markdown/merge/merge_result.rb', line 96

def has_frozen_blocks?
  !frozen_blocks.empty?
end

#inspectString

String representation for debugging

Returns:

  • (String)

    Debug representation



138
139
140
141
142
# File 'lib/markdown/merge/merge_result.rb', line 138

def inspect
  status = success? ? "success" : "failed"
  "#<#{self.class.name} #{status} conflicts=#{conflicts.size} frozen=#{frozen_blocks.size} " \
    "added=#{nodes_added} removed=#{nodes_removed} modified=#{nodes_modified}>"
end

#merge_time_msFloat?

Get merge duration in milliseconds

Returns:

  • (Float, nil)

    Merge time in milliseconds



124
125
126
# File 'lib/markdown/merge/merge_result.rb', line 124

def merge_time_ms
  stats[:merge_time_ms]
end

#nodes_addedInteger

Get count of nodes added during merge

Returns:

  • (Integer)

    Number of nodes added



103
104
105
# File 'lib/markdown/merge/merge_result.rb', line 103

def nodes_added
  stats[:nodes_added] || 0
end

#nodes_modifiedInteger

Get count of nodes modified during merge

Returns:

  • (Integer)

    Number of nodes modified



117
118
119
# File 'lib/markdown/merge/merge_result.rb', line 117

def nodes_modified
  stats[:nodes_modified] || 0
end

#nodes_removedInteger

Get count of nodes removed during merge

Returns:

  • (Integer)

    Number of nodes removed



110
111
112
# File 'lib/markdown/merge/merge_result.rb', line 110

def nodes_removed
  stats[:nodes_removed] || 0
end

#success?Boolean

Check if merge was successful (no unresolved conflicts)

Returns:

  • (Boolean)

    True if merge succeeded



82
83
84
# File 'lib/markdown/merge/merge_result.rb', line 82

def success?
  conflicts.empty? && content?
end

#to_sString

Convert to string (returns merged content)

Returns:

  • (String)

    The merged content or empty string



147
148
149
# File 'lib/markdown/merge/merge_result.rb', line 147

def to_s
  content || ""
end