class Replacement

Attributes

added_by_user[R]
removed_by_user[R]

Public Class Methods

generate(before, after) click to toggle source
# File lib/replacement.rb, line 16
def self.generate(before, after)
  leading_same_characters_count =  (0..before.length).to_a.find do |index|
    before[index] != after[index]
  end

  trailing_same_characters_count = (0..before.length).to_a.find do |index|
    before[before.length - index - 1] != after[after.length - index - 1]
  end

  removed_by_user = drop_characters(before, leading_same_characters_count, trailing_same_characters_count)
  added_by_user = drop_characters(after, leading_same_characters_count, trailing_same_characters_count)

  left_context = before[0...leading_same_characters_count]

  right_context = before[-trailing_same_characters_count..-1]

  Replacement.new(removed_by_user, added_by_user, left_context, right_context)
end
new(removed_by_user, added_by_user, left_context, right_context) click to toggle source
# File lib/replacement.rb, line 9
def initialize(removed_by_user, added_by_user, left_context, right_context)
  @removed_by_user = removed_by_user
  @added_by_user = added_by_user
  @left_context = left_context
  @right_context = right_context
end

Private Class Methods

drop_characters(subject, leading, trailing) click to toggle source
# File lib/replacement.rb, line 58
def self.drop_characters(subject, leading, trailing)
  subject[leading...(subject.size - trailing)]
end

Public Instance Methods

highlighted_suggest(requiring_suggestions) click to toggle source
# File lib/replacement.rb, line 39
def highlighted_suggest(requiring_suggestions)
  formattable_suggest(requiring_suggestions, &:red)
end
suggest(requiring_suggestions) click to toggle source
# File lib/replacement.rb, line 35
def suggest(requiring_suggestions)
  formattable_suggest(requiring_suggestions, &:identity)
end

Private Instance Methods

formattable_suggest(requiring_suggestions) { |added_by_user| ... } click to toggle source
# File lib/replacement.rb, line 45
def formattable_suggest(requiring_suggestions)
  indices = requiring_suggestions.indices_of_pattern(removed_by_user)

  best_replacement_index = indices.max_key do |index|
    Score.best_score(removed_by_user, requiring_suggestions, @left_context, @right_context, index)
  end

  return unless best_replacement_index

  subbed = requiring_suggestions[best_replacement_index..-1].sub(removed_by_user, yield(added_by_user))
  requiring_suggestions[0...best_replacement_index] + subbed
end