class HypDiff::ChangeRenderer
@api private
Attributes
deletions[R]
insertions[R]
new_text[R]
Public Class Methods
new(render_deletion, render_insertion)
click to toggle source
# File lib/hyp_diff.rb, line 93 def initialize(render_deletion, render_insertion) @new_text = [] @render_deletion = render_deletion @render_insertion = render_insertion end
render(changes, render_deletion, render_insertion)
click to toggle source
# File lib/hyp_diff.rb, line 89 def self.render(changes, render_deletion, render_insertion) renderer = new(render_deletion, render_insertion).render(changes).rendered_text end
Public Instance Methods
render(changes)
click to toggle source
# File lib/hyp_diff.rb, line 99 def render(changes) @insertions = [] @deletions = [] changes.each do |change| case change.action when "!" then deletions << change.old_element.text insertions << change.new_element.text when "=" then apply_insertions_and_deletions new_text << escape_html(change.new_element.text) when "+" then insertions << change.new_element.text when "-" then deletions << change.old_element.text else raise "unexpected change.action #{change.action}" end end apply_insertions_and_deletions self end
rendered_text()
click to toggle source
# File lib/hyp_diff.rb, line 125 def rendered_text new_text.join end
Private Instance Methods
apply_insertions_and_deletions()
click to toggle source
# File lib/hyp_diff.rb, line 133 def apply_insertions_and_deletions if deletions.length > 0 new_text << deletion_tag(deletions.join) end if insertions.length > 0 new_text << insertion_tag(insertions.join) end @insertions = [] @deletions = [] end
deletion_tag(text)
click to toggle source
# File lib/hyp_diff.rb, line 149 def deletion_tag(text) @render_deletion.call(escape_html(text)) end
escape_html(text)
click to toggle source
# File lib/hyp_diff.rb, line 153 def escape_html(text) fragment = Nokogiri::HTML::DocumentFragment.parse("") fragment.content = text fragment.to_html end
insertion_tag(text)
click to toggle source
# File lib/hyp_diff.rb, line 145 def insertion_tag(text) @render_insertion.call(escape_html(text)) end