lib/console.rb in simple_console-0.0.1 vs lib/console.rb in simple_console-0.0.2

- old
+ new

@@ -1,58 +1,63 @@ require "console/version" require 'readline' +require 'console/default_commands' + + module Console def self.included(cls) cls.extend(ClassMethods) - - ### default commands ### - cls.instance_eval do - define_cmd(:help, "show commands") do - @commands.each do |key, val| - puts " #{key}: #{val[:desc]}" - end - end - - define_cmd(:exit, "quit client") do - puts 'good bye!' - exit - end - end + cls.include(Console::DefaultCommands) end module ClassMethods def define_cmd(name, desc, &block) - @commands ||= {} - @commands[name.to_s] = {desc: desc, block: block} + commands[name.to_s] = {desc: desc, block: block} + + define_method(command_method_name(name), &block) end - def run_cmd(cmd_name, args) - if @commands[cmd_name] - @commands[cmd_name][:block].call(*args) + def run_cmd(instance, cmd_name, args = []) + cmd_name = cmd_name.to_s + + if commands[cmd_name] + instance.send(command_method_name(cmd_name), *args) else puts "Invalid command '#{cmd_name}'" end rescue => e puts e.message end + + def commands + @commands ||= {} + end + + + private + + def command_method_name(cmd_name) + "_cmd_#{cmd_name}" + end + end - def start(prompt = '> ', hello = nil) - puts (hello || "use 'help' command show all commands") + def start(prompt = '> ', options = {}) + puts (options[:hello] || options['hello'] || "use 'help' command show all commands") loop do cmd_name, *cmd_args = Readline.readline(prompt, true).split unless cmd_name puts next else - self.class.run_cmd(cmd_name, cmd_args) + self.class.run_cmd(self, cmd_name, cmd_args) end end end - end +