Skip to content

Commit

Permalink
CLI quick Refactor
Browse files Browse the repository at this point in the history
  • Loading branch information
nviennot committed Feb 4, 2013
1 parent 08ba5f0 commit d5125a9
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 24 deletions.
2 changes: 1 addition & 1 deletion bin/promiscuous
Expand Up @@ -2,7 +2,7 @@

begin
require 'promiscuous'
Promiscuous::CLI.new.run
Promiscuous::CLI.new.boot
rescue => e
$stderr.puts "#{e.class}: #{e.message}"
$stderr.puts '-' * 80
Expand Down
52 changes: 29 additions & 23 deletions lib/promiscuous/cli.rb
@@ -1,4 +1,6 @@
class Promiscuous::CLI
attr_accessor :options

def self.trap_signals
Signal.trap 'SIGUSR2' do
Thread.list.each do |thread|
Expand All @@ -14,18 +16,19 @@ def self.trap_signals
end
trap_signals

def publish(options={})
print_status "Publishing #{options[:criteria]}..."
criteria = eval(options[:criteria])

bar = ProgressBar.create(:format => '%t |%b>%i| %c/%C %e', :title => 'Publishing', :total => criteria.count)
criteria.each do |doc|
doc.promiscuous_sync
bar.increment
def publish
options[:criterias].map { |criteria| eval(criteria) }.each do |criteria|
title = criteria.name
title = "#{title}#{' ' * [0, 20 - title.size].max}"
bar = ProgressBar.create(:format => '%t |%b>%i| %c/%C %e', :title => title, :total => criteria.count)
criteria.each do |doc|
doc.promiscuous_sync
bar.increment
end
end
end

def subscribe(options={})
def subscribe
Promiscuous::Loader.load_descriptors if defined?(Rails)
print_status "Replicating with #{Promiscuous::Subscriber::AMQP.subscribers.count} subscribers"
Promiscuous::Subscriber::Worker.run
Expand All @@ -42,8 +45,8 @@ def parse_args(args)

opts.separator ""
opts.separator "Actions:"
opts.separator " publish \"Model.where(:shard => 123)\""
opts.separator " subscribe"
opts.separator " promiscuous publish \"Member.where(:updated_at.gt => 1.day.ago)\" BrandAction"
opts.separator " promiscuous subscribe"
opts.separator ""
opts.separator "Options:"

Expand Down Expand Up @@ -71,17 +74,17 @@ def parse_args(args)
parser.parse!(args)

options[:action] = args.shift.try(:to_sym)
options[:criteria] = args.shift
options[:criterias] = args

unless options[:action].in? [:publish, :subscribe]
puts parser
exit
end

if options[:action] == :publish
raise "Please specify a criteria" unless options[:criteria]
raise "Please specify one or more criterias" unless options[:criterias].present?
else
raise "Why are you specifying a criteria?" if options[:criteria]
raise "Why are you specifying a criteria?" if options[:criterias].present?
end

options
Expand All @@ -90,7 +93,7 @@ def parse_args(args)
exit
end

def load_app(options={})
def load_app
if options[:require]
require options[:require]
else
Expand All @@ -100,22 +103,25 @@ def load_app(options={})
end
end

def run
options = parse_args(ARGV)
load_app(options)
maybe_run_bareback(options)
def boot
self.options = parse_args(ARGV)
load_app
maybe_run_bareback
run
end

def run
case options[:action]
when :publish then publish(options)
when :subscribe then subscribe(options)
when :publish then publish
when :subscribe then subscribe
end
end

def maybe_run_bareback(options)
def maybe_run_bareback
if options[:bareback]
Promiscuous::Config.bareback = true
print_status "WARNING: --- BAREBACK MODE ----"
print_status "WARNING: You are replicating without protection, you can get corrupted in no time"
print_status "WARNING: You are replicating without protection, you can get out of sync in no time"
print_status "WARNING: --- BAREBACK MODE ----"
end
end
Expand Down

0 comments on commit d5125a9

Please sign in to comment.