Class: Markdiff::Operations::TextDiffOperation
- Defined in:
- lib/markdiff/operations/text_diff_operation.rb
Instance Attribute Summary
Attributes inherited from Base
Instance Method Summary collapse
-
#initialize(after_node:, **args) ⇒ TextDiffOperation
constructor
A new instance of TextDiffOperation.
- #inserted_node ⇒ Nokogiri::XML::Node
- #priority ⇒ Object
Constructor Details
#initialize(after_node:, **args) ⇒ TextDiffOperation
Returns a new instance of TextDiffOperation.
9 10 11 12 |
# File 'lib/markdiff/operations/text_diff_operation.rb', line 9 def initialize(after_node:, **args) super(**args) @after_node = after_node end |
Instance Method Details
#inserted_node ⇒ Nokogiri::XML::Node
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/markdiff/operations/text_diff_operation.rb', line 15 def inserted_node before_elements = target_node.to_s.split(" ") after_elements = @after_node.to_s.split(" ") last_deleted_pos = nil ::Diff::LCS.diff(before_elements, after_elements).flatten(1).each do |operation| type, position, element = *operation if type == "-" before_elements[position] = %(<del class="del">#{element}</del>) last_deleted_pos = position elsif type == "+" insert = "<ins>#{element}</ins>" if last_deleted_pos == position before_elements[position] = "#{before_elements[position]}#{insert}" else before_elements[position] = "#{insert}#{before_elements[position]}" end else raise "Unhandled type: #{type}" end end ::Nokogiri::HTML.fragment(before_elements.join(" ")) end |
#priority ⇒ Object
42 43 44 |
# File 'lib/markdiff/operations/text_diff_operation.rb', line 42 def priority 1 end |