class Word

The core structure that stores information of the string to owoify and performs actual owoification.

Public Class Methods

new(word) click to toggle source
# File lib/structures/word.rb, line 7
def initialize(word)
  @replaced_words = Set.new
  @word = word
end

Public Instance Methods

replace(search_value, replace_value, replace_replaced_words = false) click to toggle source
# File lib/structures/word.rb, line 30
def replace(search_value, replace_value, replace_replaced_words = false)
  return self if !replace_replaced_words && search_value_contains_replaced_words(search_value, replace_value)

  replacing_word = @word
  replacing_word = @word.gsub(search_value, replace_value) if search_value.match? @word
  collection = @word.scan(search_value).flatten
  replaced_words = collection.length > 1 ? collection.map { |x| x.gsub(x, replace_value) } : []

  if replacing_word != @word
    replaced_words.each do |word|
      @replaced_words.add(word)
    end
    @word = replacing_word
  end
  self
end
replace_with_func_multiple(search_value, func, replace_replaced_words = false) click to toggle source
# File lib/structures/word.rb, line 68
def replace_with_func_multiple(search_value, func, replace_replaced_words = false)
  return self unless search_value.match? @word

  word = @word
  captures = search_value.match(word)
  replace_value = func.call(captures[1], captures[2])

  return self if !replace_replaced_words && search_value_contains_replaced_words(search_value, replace_value)

  replacing_word = @word.gsub(captures[0], replace_value)
  collection = @word.scan(search_value).flatten
  replaced_words = collection.length > 1 ? collection.map { |x| x.gsub(x, replace_value) } : []
  if replacing_word != @word
    replaced_words.each do |w|
      @replaced_words.add(w)
    end
    @word = replacing_word
  end
  self
end
replace_with_func_single(search_value, func, replace_replaced_words = false) click to toggle source
# File lib/structures/word.rb, line 47
def replace_with_func_single(search_value, func, replace_replaced_words = false)
  replace_value = func.call

  return self if !replace_replaced_words && search_value_contains_replaced_words(search_value, replace_value)

  replacing_word = @word
  if search_value.match? @word
    match = @word.match(search_value)[0]
    replacing_word = @word.gsub(match, replace_value)
  end
  collection = @word.scan(search_value).flatten
  replaced_words = collection.length > 1 ? collection.map { |x| x.gsub(x, replace_value) } : []
  if replacing_word != @word
    replaced_words.each do |word|
      @replaced_words.add(word)
    end
    @word = replacing_word
  end
  self
end
to_s() click to toggle source
# File lib/structures/word.rb, line 12
def to_s
  @word
end

Private Instance Methods

search_value_contains_replaced_words(search_value, replace_value) click to toggle source
# File lib/structures/word.rb, line 18
def search_value_contains_replaced_words(search_value, replace_value)
  @replaced_words.any? do |word|
    if search_value.match? word
      match_result = search_value.match(word)[0]
      return word.gsub(match_result, replace_value) == replace_value
    end
    false
  end
end