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
+