class Spellr::InteractiveReplacement

Attributes

global[RW]
global?[RW]
reporter[R]
token[R]
token_highlight[R]

Public Class Methods

new(token, reporter) click to toggle source
# File lib/spellr/interactive_replacement.rb, line 14
def initialize(token, reporter)
  @token = token
  @token_highlight = red(token)
  @reporter = reporter
  Readline.input = reporter.output.stdin
  Readline.output = reporter.output.stdout
end

Public Instance Methods

ask_replacement() click to toggle source
# File lib/spellr/interactive_replacement.rb, line 40
def ask_replacement
  puts ''
  puts "  #{lighten '[^C] to go back'}"
  prompt_replacement
end
complete_replacement(replacement) click to toggle source
# File lib/spellr/interactive_replacement.rb, line 27
def complete_replacement(replacement)
  handle_global_replacement(replacement)
  token.replace(replacement)

  reporter.increment(:total_fixed)
  puts "\n\e[0mReplaced #{'all ' if global?}#{token_highlight} with #{green(replacement)}"
  throw :check_file_from, token
end
global_replace() click to toggle source
# File lib/spellr/interactive_replacement.rb, line 22
def global_replace
  self.global = true
  replace
end
handle_ctrl_c() click to toggle source
# File lib/spellr/interactive_replacement.rb, line 71
def handle_ctrl_c
  print "\e[0m"
  reporter.clear_line(5)
  reporter.call(token)
end
handle_global_replacement(replacement) click to toggle source
# File lib/spellr/interactive_replacement.rb, line 36
def handle_global_replacement(replacement)
  reporter.global_replacements[token.to_s] = replacement if global?
end
prompt_replacement() click to toggle source
# File lib/spellr/interactive_replacement.rb, line 46
def prompt_replacement
  Readline.pre_input_hook = -> { pre_input_hook(token) }
  prompt = "  Replace #{'all ' if global?}#{token_highlight} with: \e[32m"
  Readline.readline(prompt)
rescue Interrupt
  handle_ctrl_c
end
re_ask_replacement() click to toggle source
# File lib/spellr/interactive_replacement.rb, line 54
def re_ask_replacement
  print "\e[0m\a\e[1T"

  try_replace(prompt_replacement)
end
replace() click to toggle source
# File lib/spellr/interactive_replacement.rb, line 67
def replace
  try_replace(ask_replacement)
end
try_replace(replacement) click to toggle source
# File lib/spellr/interactive_replacement.rb, line 60
def try_replace(replacement)
  return re_ask_replacement if replacement == token
  return re_ask_replacement if replacement.empty?

  complete_replacement(replacement)
end

Private Instance Methods

pre_input_hook(value) click to toggle source
# File lib/spellr/interactive_replacement.rb, line 79
def pre_input_hook(value)
  Readline.refresh_line
  Readline.insert_text value.to_s
  Readline.redisplay

  # Remove the hook right away.
  Readline.pre_input_hook = nil
end
puts(str) click to toggle source
# File lib/spellr/interactive_replacement.rb, line 88
def puts(str)
  reporter.puts(str)
end