class Vx::Common::AMQP::CLI

Public Class Methods

new() click to toggle source
# File lib/vx/common/amqp/cli.rb, line 13
def initialize
  @options = parse_options
end

Public Instance Methods

run() click to toggle source
# File lib/vx/common/amqp/cli.rb, line 17
def run
  require_before_executing
  load_consumers

  consumers = find_consumers.inject({}) do |a,c|
    a[c] = 2
    a
  end

  supervisor = Common::AMQP::Supervisor::Threaded.new
  consumers.each do |k,v|
    v.times do |n|
      supervisor.add k, :subscribe, n
    end
  end
  supervisor.run
end

Private Instance Methods

find_consumers() click to toggle source
# File lib/vx/common/amqp/cli.rb, line 37
def find_consumers
  Vx::Common::AMQP::Consumer.classes.inject([]) do |a,c|
    c = Kernel.const_get(c)
    a << c if c.method_defined? :perform
    a
  end.uniq
end
load_consumers() click to toggle source
# File lib/vx/common/amqp/cli.rb, line 45
def load_consumers
  if l = @options[:load_from]
    path = File.expand_path(l, Dir.pwd)
    Dir["#{path}/**.rb"].each do |f|
      load f
    end
  end
end
parse_options() click to toggle source
# File lib/vx/common/amqp/cli.rb, line 60
def parse_options
  options = {}

  OptionParser.new do |opts|
    opts.banner = "Usage: amqp_consumers [options]"

    opts.on("-r", "--require FILE", String, 'Require file before executing') do |r|
      options[:require] = r
    end

    opts.on("-l", "--load DIR", "Load consumers from directory") do |l|
      options[:load_from] = l
    end

    opts.on("-c", "--consumer CONSUMER[,NUM]", "a", "b") do |l|
      name,num = l.split(",")
      num ||= 1
      options[:consumers] ||= []
      options[:consumers] << [name, num.to_i]
    end
  end.parse!

  options
end
require_before_executing() click to toggle source
# File lib/vx/common/amqp/cli.rb, line 54
def require_before_executing
  if r = @options[:require]
    require File.expand_path(r, Dir.pwd)
  end
end