mirror of
https://github.com/jimeh/bunnyrun.git
synced 2026-02-18 23:46:39 +00:00
Simplify CLI class, drop Options class
This commit is contained in:
@@ -1,21 +1,7 @@
|
||||
require 'bunnyrun/consumer'
|
||||
require 'bunnyrun/cli'
|
||||
require 'bunnyrun/consumer'
|
||||
require 'bunnyrun/runner'
|
||||
require 'bunnyrun/version'
|
||||
|
||||
module BunnyRun
|
||||
class << self
|
||||
def publish(exchange_name, payload, attrs = {}); end
|
||||
|
||||
def after_start(&block)
|
||||
callbacks[:after_start] ||= []
|
||||
callbacks[:after_start] << block
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def callbacks
|
||||
@callbacks ||= {}
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -1,18 +1,37 @@
|
||||
require 'trollop'
|
||||
|
||||
require 'bunnyrun/consumer'
|
||||
require 'bunnyrun/options'
|
||||
require 'bunnyrun/runner'
|
||||
require 'bunnyrun/version'
|
||||
|
||||
module BunnyRun
|
||||
class CLI
|
||||
attr_reader :options
|
||||
|
||||
def self.run(argv = [])
|
||||
new.run(argv)
|
||||
end
|
||||
|
||||
def run(argv = [])
|
||||
options = Options.parse(argv)
|
||||
require_files(options.paths)
|
||||
def initialize(name: nil, version: nil, usage: nil)
|
||||
@name = name
|
||||
@version = version
|
||||
@usage = usage
|
||||
end
|
||||
|
||||
def name
|
||||
@name ||= 'bunnyrun'
|
||||
end
|
||||
|
||||
def version
|
||||
@version ||= BunnyRun::VERSION
|
||||
end
|
||||
|
||||
def usage
|
||||
@usage ||= '[options] [path ...]'
|
||||
end
|
||||
|
||||
def run(args = [])
|
||||
options = parse_args(args)
|
||||
|
||||
require_files(options[:paths]) if options[:paths].any?
|
||||
consumers = Consumer.children
|
||||
|
||||
runner = Runner.new(options, consumers)
|
||||
@@ -21,9 +40,79 @@ module BunnyRun
|
||||
|
||||
private
|
||||
|
||||
def parse_args(args)
|
||||
args = args.clone
|
||||
|
||||
opts = Trollop.with_standard_exception_handling(parser) do
|
||||
parser.parse(args)
|
||||
end
|
||||
opts[:paths] = args
|
||||
|
||||
opts
|
||||
end
|
||||
|
||||
def parser
|
||||
@parser ||= begin
|
||||
parser = Trollop::Parser.new
|
||||
define_version(parser)
|
||||
define_usage(parser)
|
||||
|
||||
parser.banner "\nOptions:"
|
||||
define_connection_options(parser)
|
||||
define_logging_options(parser)
|
||||
parser
|
||||
end
|
||||
end
|
||||
|
||||
def define_usage(parser)
|
||||
parser.banner "Usage: #{name} #{usage}"
|
||||
end
|
||||
|
||||
def define_version(parser)
|
||||
parser.version "#{name} #{version}"
|
||||
end
|
||||
|
||||
def define_connection_options(parser)
|
||||
parser.opt :url, 'Connection string ' \
|
||||
'(example: "amqp://guest:guest@127.0.0.1:5672/vhost")',
|
||||
short: 'U', type: :string
|
||||
parser.opt :host, 'Host',
|
||||
short: 'H', type: :string, default: '127.0.0.1'
|
||||
parser.opt :port, 'Port',
|
||||
short: 'P', type: :int, default: 5672
|
||||
parser.opt :ssl, 'Connect using SSL',
|
||||
short: 's', type: :bool, default: false
|
||||
parser.opt :vhost, 'Virtual host',
|
||||
short: 'V', type: :string, default: '/'
|
||||
parser.opt :user, 'Username',
|
||||
short: 'u', type: :string, default: 'guest'
|
||||
parser.opt :pass, 'Password',
|
||||
short: 'p', type: :string, default: 'guest'
|
||||
parser.opt :prefetch, 'Default prefetch count',
|
||||
short: :none, type: :int, default: 1
|
||||
|
||||
parser.conflicts :url, :host
|
||||
parser.conflicts :url, :port
|
||||
parser.conflicts :url, :ssl
|
||||
parser.conflicts :url, :vhost
|
||||
parser.conflicts :url, :user
|
||||
parser.conflicts :url, :pass
|
||||
end
|
||||
|
||||
def define_logging_options(parser)
|
||||
parser.opt :log_target, 'Log target, file path or STDOUT',
|
||||
short: 't', type: :string, default: 'STDOUT'
|
||||
parser.opt :log_level, 'Log level (debug, info, warn, error, fatal)',
|
||||
short: 'l', type: :string, default: 'info'
|
||||
parser.opt :bunny_log_target, 'Log target used by Bunny',
|
||||
short: :none, type: :string, default: 'STDOUT'
|
||||
parser.opt :bunny_log_level, 'Log level used by Bunny',
|
||||
short: :none, type: :string, default: 'warn'
|
||||
end
|
||||
|
||||
def require_files(paths)
|
||||
paths.each do |path|
|
||||
require File.join(Dir.pwd, path)
|
||||
require File.expand_path(path)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -1,5 +0,0 @@
|
||||
class String
|
||||
def undent
|
||||
gsub(/^.{#{slice(/^ +/).length}}/, '')
|
||||
end
|
||||
end
|
||||
@@ -1,152 +0,0 @@
|
||||
require 'trollop'
|
||||
|
||||
require 'bunnyrun/core_ext/string'
|
||||
|
||||
module BunnyRun
|
||||
class Options
|
||||
class << self
|
||||
def parse(argv = [])
|
||||
args = argv.clone
|
||||
|
||||
opts = parse_args(args)
|
||||
opts[:paths] = args
|
||||
|
||||
validate_paths(opts)
|
||||
|
||||
opts.each_with_object(new) do |(key, value), memo|
|
||||
memo.send("#{key}=", value) if memo.respond_to?("#{key}=")
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def parse_args(args)
|
||||
Trollop.with_standard_exception_handling(parser) do
|
||||
parser.parse(args)
|
||||
end
|
||||
end
|
||||
|
||||
def validate_paths(opts)
|
||||
parser.die('One or more paths to consumers required', nil) \
|
||||
if opts[:paths].empty?
|
||||
end
|
||||
|
||||
def parser
|
||||
return @parser if @parser
|
||||
|
||||
defaults = new
|
||||
@parser = Trollop::Parser.new do
|
||||
banner <<-EOF.undent
|
||||
Usage: bunnyrun [options] [path ...]
|
||||
|
||||
Options:
|
||||
EOF
|
||||
|
||||
version "bunnyrun #{BunnyRun::VERSION}"
|
||||
opt :url, 'Connection string ' \
|
||||
'(example: "amqp://guest:guest@127.0.0.1:5672/vhost")',
|
||||
short: 'U', type: :string, default: defaults.url
|
||||
opt :host, 'Host',
|
||||
short: 'H', type: :string, default: defaults.host
|
||||
opt :port, 'Port',
|
||||
short: 'P', type: :int, default: defaults.port
|
||||
opt :ssl, 'Connect using SSL',
|
||||
short: 's', type: :bool, default: defaults.ssl
|
||||
opt :vhost, 'Virtual host',
|
||||
short: 'V', type: :string, default: defaults.vhost
|
||||
opt :user, 'Username',
|
||||
short: 'u', type: :string, default: defaults.user
|
||||
opt :pass, 'Password',
|
||||
short: 'p', type: :string, default: defaults.pass
|
||||
opt :prefetch, 'Default prefetch count',
|
||||
short: :none, type: :int, default: defaults.prefetch
|
||||
|
||||
banner ''
|
||||
|
||||
opt :log_target, 'Log target, file path or STDOUT',
|
||||
short: 't', type: :string, default: defaults.log_target
|
||||
opt :log_level, 'Log level (debug, info, warn, error, fatal)',
|
||||
short: 'l', type: :string, default: defaults.log_level
|
||||
opt :bunny_log_target, 'Log target used by Bunny',
|
||||
short: :none, type: :string, default: defaults.bunny_log_target
|
||||
opt :bunny_log_level, 'Log level used by Bunny',
|
||||
short: :none, type: :string, default: defaults.bunny_log_level
|
||||
|
||||
conflicts :url, :host
|
||||
conflicts :url, :port
|
||||
conflicts :url, :ssl
|
||||
conflicts :url, :vhost
|
||||
conflicts :url, :user
|
||||
conflicts :url, :pass
|
||||
|
||||
banner ''
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def url
|
||||
@url ||= nil
|
||||
end
|
||||
attr_writer :url
|
||||
|
||||
def host
|
||||
@host ||= '127.0.0.1'
|
||||
end
|
||||
attr_writer :host
|
||||
|
||||
def port
|
||||
@port ||= 5672
|
||||
end
|
||||
attr_writer :port
|
||||
|
||||
def ssl
|
||||
@ssl ||= false
|
||||
end
|
||||
attr_writer :ssl
|
||||
|
||||
def vhost
|
||||
@vhost ||= '/'
|
||||
end
|
||||
attr_writer :vhost
|
||||
|
||||
def user
|
||||
@user ||= 'guest'
|
||||
end
|
||||
attr_writer :user
|
||||
|
||||
def pass
|
||||
@pass ||= 'guest'
|
||||
end
|
||||
attr_writer :pass
|
||||
|
||||
def prefetch
|
||||
@prefetch ||= 1
|
||||
end
|
||||
attr_writer :prefetch
|
||||
|
||||
def log_target
|
||||
@log_target ||= 'STDOUT'
|
||||
end
|
||||
attr_writer :log_target
|
||||
|
||||
def log_level
|
||||
@log_level ||= 'info'
|
||||
end
|
||||
attr_writer :log_level
|
||||
|
||||
def bunny_log_target
|
||||
@bunny_log_target ||= 'STDOUT'
|
||||
end
|
||||
attr_writer :bunny_log_target
|
||||
|
||||
def bunny_log_level
|
||||
@bunny_log_level ||= 'warn'
|
||||
end
|
||||
attr_writer :bunny_log_level
|
||||
|
||||
def paths
|
||||
@paths ||= []
|
||||
end
|
||||
attr_writer :paths
|
||||
end
|
||||
end
|
||||
@@ -58,28 +58,28 @@ module BunnyRun
|
||||
end
|
||||
|
||||
def connection_opts
|
||||
return options.url if options.url
|
||||
return options[:url] if options[:url]
|
||||
|
||||
{
|
||||
host: options.host,
|
||||
port: options.port,
|
||||
ssl: options.ssl,
|
||||
vhost: options.vhost,
|
||||
user: options.user,
|
||||
pass: options.pass
|
||||
host: options[:host],
|
||||
port: options[:port],
|
||||
ssl: options[:ssl],
|
||||
vhost: options[:vhost],
|
||||
user: options[:user],
|
||||
pass: options[:pass]
|
||||
}
|
||||
end
|
||||
|
||||
def log_target
|
||||
if options.log_target.casecmp('stdout').zero?
|
||||
if options[:log_target].casecmp('stdout').zero?
|
||||
STDOUT
|
||||
else
|
||||
options.log_target
|
||||
options[:log_target]
|
||||
end
|
||||
end
|
||||
|
||||
def log_level
|
||||
Kernel.const_get("::Logger::#{options.log_level.upcase}")
|
||||
Kernel.const_get("::Logger::#{options[:log_level].upcase}")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user