class RakeCommit::PromptLine

Public Class Methods

new(attribute, prompt_exclusions = [], default_value = nil) click to toggle source
# File lib/rake_commit/prompt_line.rb, line 8
def initialize(attribute, prompt_exclusions = [], default_value = nil)
  @attribute = attribute
  @prompt_exclusions = prompt_exclusions
  @default_value = default_value
end

Public Instance Methods

prompt() click to toggle source
# File lib/rake_commit/prompt_line.rb, line 14
def prompt
  return nil if @prompt_exclusions.include?(@attribute)

  puts "\n"
  puts "previous #{@attribute}: #{previous_input}" if previous_input

  set_readline_default_input(@default_value) if @default_value
  set_readline_history

  input = nil
  loop do
    input = readline("#{@attribute}: ").chomp
    break unless (input.empty? && !previous_input)
  end

  unless input.empty?
    append_history(input)
    return input
  end

  puts "using: #{previous_input}"
  return previous_input
end

Private Instance Methods

append_history(input) click to toggle source
# File lib/rake_commit/prompt_line.rb, line 40
def append_history(input)
  File.open(history_file, "a") { |f| f.puts(input) }
end
history() click to toggle source
# File lib/rake_commit/prompt_line.rb, line 56
def history
  @history ||= load_history
end
history_file() click to toggle source
# File lib/rake_commit/prompt_line.rb, line 69
def history_file
  @history_file ||= File.expand_path(Dir.tmpdir + "/#{@attribute}.data")
end
load_history() click to toggle source
# File lib/rake_commit/prompt_line.rb, line 65
def load_history
  File.exists?(history_file) ? File.read(history_file).split("\n") : []
end
previous_input() click to toggle source
# File lib/rake_commit/prompt_line.rb, line 52
def previous_input
  @previous_input ||= history.last
end
set_readline_default_input(default_input) click to toggle source
# File lib/rake_commit/prompt_line.rb, line 44
def set_readline_default_input(default_input)
  Readline.pre_input_hook = lambda do
    Readline.insert_text(default_input)
    Readline.redisplay
    Readline.pre_input_hook = nil
  end
end
set_readline_history() click to toggle source
# File lib/rake_commit/prompt_line.rb, line 60
def set_readline_history
  HISTORY.pop until HISTORY.empty?
  HISTORY.push(*history)
end