exe/socrates in socrates-0.1.3 vs exe/socrates in socrates-0.1.4

- old
+ new

@@ -2,11 +2,78 @@ File.expand_path("../../lib", __FILE__).tap do |lib| $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib) end +require "optparse" + require "socrates" require "socrates/sample_states" -puts "Type `help` to see what I can do..." +options = { + adapter: "console", + storage: "memory", + debug: false +} -Socrates::Bots::CLIBot.new(state_factory: Socrates::SampleStates::StateFactory.new).start +option_parser = OptionParser.new do |parser| + parser.banner = "Usage: socrates [options] run" + + parser.on("-h", "--help", "Show this help message") do + puts parser + exit + end + parser.on("-a", "--adapter ADAPTER", "Use the specified Adapter: console (default) or slack") do |value| + options[:adapter] = value.downcase + end + parser.on("-s", "--storage STORAGE", "Use the specified Storage: memory (default) or redis") do |value| + options[:storage] = value.downcase + end + parser.on("-d", "--debug", "Print detailed logging") do + options[:debug] = true + end +end +option_parser.parse! + +def run_command(options) + storage = + case options[:storage] + when "redis" + Socrates::Storage::RedisStorage.new(url: ENV.fetch("REDIS_URL", "redis://localhost")) + else + Socrates::Storage::MemoryStorage.new + end + + Socrates.configure do |config| + config.storage = storage + + if options[:debug] + config.logger = Socrates::Logger.default + config.logger.level = Logger::DEBUG + end + end + + case (adapter = options[:adapter]) + when "console" + Socrates::Bots::CLIBot.new(state_factory: Socrates::SampleStates::StateFactory.new).start + when "slack" + Socrates::Bots::SlackBot.new(state_factory: Socrates::SampleStates::StateFactory.new).start + else + puts "Unknown adapter '#{adapter}'" + exit 1 + end +end + +command = ARGV.shift + +if command.nil? + puts option_parser.help + exit 1 +end + +case command.downcase + when "run" + run_command(options) + else + puts "Unknown command '#{command}'" + exit 1 +end