class CLI::Prompt
This class contains auto complete functionality TODO: should be refactored to a new module
Public Class Methods
new(class_name, prompt = "> ")
click to toggle source
# File lib/ruby/cmd/prompt.rb, line 19 def initialize(class_name, prompt = "> ") @prompt = prompt @class_name = class_name @complete_commands = [] @initial_complete_commands = [] complete Readline.completion_append_character = " " Readline.basic_word_break_characters = "" Readline.completion_proc = proc do |s| s = update_complete_commands! s @complete_commands.grep(/^#{Regexp.escape(s)}/) end end
Public Instance Methods
cmd_loop()
click to toggle source
# File lib/ruby/cmd/prompt.rb, line 63 def cmd_loop while true line = Readline.readline(@prompt, false) if line.nil? break end params = line.split unless params.empty? method_names = @class_name.instance_methods.grep(/^do_#{Regexp.escape(params.shift)}$/) unless method_names.empty? self.send(method_names[0], params.join(" ")) end end if line.to_s.strip != "" Readline::HISTORY.push << line end end end
complete()
click to toggle source
# File lib/ruby/cmd/prompt.rb, line 36 def complete @complete_commands = @class_name.instance_methods.grep(/^do_(.*?)$/).map {|s| s.to_s.sub("do_", "")} @initial_complete_commands = @class_name.instance_methods.grep(/^do_(.*?)$/).map {|s| s.to_s.sub("do_", "")} end
update_complete_commands!(s)
click to toggle source
def complete_git
%w(clone init commit status push)
end
# File lib/ruby/cmd/prompt.rb, line 49 def update_complete_commands! s args = s.split command = args.shift method_names = command.nil? ? [] : @class_name.instance_methods.grep(/^complete_#{Regexp.escape(command)}$/) if command.nil? or method_names.empty? @complete_commands = @initial_complete_commands.clone else @complete_commands = self.send(method_names[0]).map {|s| "#{command} #{s}"} end s end