lib/queuel.rb in queuel-0.0.1 vs lib/queuel.rb in queuel-0.1.0

- old
+ new

@@ -1,28 +1,40 @@ require "queuel/version" require "forwardable" -require "queuel/null/message" +require "queuel/configurator" +require "queuel/introspect" + +require "queuel/base/engine" +require "queuel/base/queue" +require "queuel/base/message" +require "queuel/base/poller" + require "queuel/null/engine" -require "queuel/null/poller" require "queuel/null/queue" -require "queuel/iron_mq/message" +require "queuel/null/message" +require "queuel/null/poller" + require "queuel/iron_mq/engine" -require "queuel/iron_mq/poller" require "queuel/iron_mq/queue" +require "queuel/iron_mq/message" +require "queuel/iron_mq/poller" + require "queuel/client" module Queuel + extend Introspect class << self extend Forwardable def_delegators :client, :push, :pop, :receive, :with - def_delegators :config, :credentials, :default_queue + def_delegators :config, :credentials, :default_queue, :receiver_threads alias << pop end def self.engine requires - Object.module_eval("::#{const_name}", __FILE__, __LINE__) + warn_engine_selection + const_with_nesting engine_const_name end def self.configure(&block) config.instance_eval &block end @@ -33,36 +45,47 @@ def self.client Client.new engine, credentials end - def self.engines - { - iron_mq: { require: 'iron_mq', const: "IronMq" }, - null: { const: "Null" } + def self.logger + config.logger.tap { |log| + log.level = config.log_level } end - def self.requires - require engines[config.engine][:require] if engines.fetch(config.engine, {})[:require] + private + + def self.warn_engine_selection + @warned_null_engine ||= logger.warn(engine_config[:message]) end - def self.const_name - "Queuel::#{engines.fetch(config.engine, {}).fetch(:const, nil) || engines[:null][:const]}::Engine" + def self.engine_config + engines.fetch(config.engine) { engines[:null] } end - class Configurator - def self.param(*params) - params.each do |name| - attr_accessor name - define_method name do |*values| - value = values.first - value ? self.send("#{name}=", value) : instance_variable_get("@#{name}") - end - end - end + def self.configured_engine_name + engine_config[:const] + end - param :credentials - param :engine - param :default_queue + def self.engines + { + iron_mq: { + require: 'iron_mq', + const: "IronMq", + message: "Using IronMQ" + }, + null: { + const: "Null", + message: "Using Null Engine, for compatability." + } + } + end + + def self.requires + require engine_config[:require] if engine_config[:require] + end + + def self.engine_const_name + "Queuel::#{configured_engine_name}::Engine" end end