class Dyph::TwoWayDiffers::HeckelDiffWrapper

Constants

IndexTracker

Public Class Methods

new(old_text_array, new_text_array, heckel_diff) click to toggle source
# File lib/dyph/two_way_differs/heckel_diff.rb, line 126
def initialize(old_text_array, new_text_array, heckel_diff)
  @chunks = heckel_diff.map { |block| TwoWayChunk.new(block) }
  @old_text_array = old_text_array
  @new_text_array = new_text_array
  @old_text = []
  @new_text = []
end

Public Instance Methods

convert_to_typed_ouput() click to toggle source
# File lib/dyph/two_way_differs/heckel_diff.rb, line 135
def convert_to_typed_ouput()
  final_indexes = @chunks.reduce(IndexTracker.new(0,0)) do |index_tracker, chunk|
    old_iteration, new_iteration = set_text_node_indexes(chunk, index_tracker.old_index, index_tracker.new_index)
    old_index, new_index = append_changes(chunk, index_tracker.old_index + old_iteration, index_tracker.new_index + new_iteration)
    IndexTracker.new(old_index, new_index)
  end

  set_the_remaining_text_node_indexes(final_indexes.old_index, final_indexes.new_index)
  { old_text: @old_text, new_text: @new_text}
end

Private Instance Methods

append_changes(chunk, old_index, new_index) click to toggle source
# File lib/dyph/two_way_differs/heckel_diff.rb, line 162
def append_changes(chunk, old_index, new_index)
  while old_index <= chunk.left_hi - 1     # chunk indexes are from 1
    @old_text << @old_text_array[old_index]
    old_index += 1
  end

  while new_index <= chunk.right_hi - 1     # chunk indexes are from 1
    @new_text << @new_text_array[new_index]
    new_index += 1
  end
  [old_index, new_index]
end
set_text_node_indexes(chunk, old_index, new_index) click to toggle source
# File lib/dyph/two_way_differs/heckel_diff.rb, line 147
def set_text_node_indexes(chunk, old_index, new_index)
  old_iteration = 0
  while old_index + old_iteration < chunk.left_lo - 1     # chunk indexes are from 1
    @old_text << TextNode.new(text: @old_text_array[old_index + old_iteration], row: new_index + old_iteration)
    old_iteration += 1
  end

  new_iteration = 0
  while new_index + new_iteration < chunk.right_lo - 1     # chunk indexes are from 1
    @new_text << TextNode.new(text: @new_text_array[new_index + new_iteration], row: old_index + new_iteration)
    new_iteration += 1
  end
  [old_iteration, new_iteration]
end
set_the_remaining_text_node_indexes(old_index, new_index) click to toggle source
# File lib/dyph/two_way_differs/heckel_diff.rb, line 175
def set_the_remaining_text_node_indexes(old_index, new_index)
  iteration = 0
  while old_index + iteration < @old_text_array.length
    @old_text << TextNode.new(text: @old_text_array[old_index + iteration], row: new_index + iteration)
    iteration += 1
  end

  iteration = 0
  while new_index + iteration < @new_text_array.length
    @new_text << TextNode.new(text: @new_text_array[new_index + iteration], row: old_index + iteration)
    iteration += 1
  end
end