Sha256: fe4348f77853f038acbb35d2ee3662571e3427a27ce4047b666e4200542fb396

Contents?: true

Size: 1.61 KB

Versions: 15

Compression:

Stored size: 1.61 KB

Contents

# Creates a DSL for apps to define their blocks to run for event_types

module QueueBus
  class Dispatch

    attr_reader :app_key, :subscriptions
    
    def initialize(app_key)
      @app_key = Application.normalize(app_key)
      @subscriptions = SubscriptionList.new
    end
    
    def size
      @subscriptions.size
    end
    
    def subscribe(key, matcher_hash = nil, &block)
      dispatch_event("default", key, matcher_hash, block)
    end
    
    # allows definitions of other queues
    def method_missing(method_name, *args, &block)
      if args.size == 1 && block
        dispatch_event(method_name, args[0], nil, block)
      elsif args.size == 2 && block
        dispatch_event(method_name, args[0], args[1], block)
      else
        super
      end
    end
    
    def execute(key, attributes)
      sub = subscriptions.key(key)
      if sub
        sub.execute!(attributes)
      else
        # TODO: log that it's not there
      end
    end

    def subscription_matches(attributes)
      out = subscriptions.matches(attributes)
      out.each do |sub|
        sub.app_key = self.app_key
      end
      out
    end
    
    def dispatch_event(queue, key, matcher_hash, block)
      # if not matcher_hash, assume key is a event_type regex
      matcher_hash ||= { "bus_event_type" => key }
      add_subscription("#{app_key}_#{queue}", key, "::QueueBus::Rider", matcher_hash, block)
    end
    
    def add_subscription(queue_name, key, class_name, matcher_hash = nil, block)
      sub = Subscription.register(queue_name, key, class_name, matcher_hash, block)
      subscriptions.add(sub)
      sub
    end
  end
end

Version data entries

15 entries across 15 versions & 1 rubygems

Version Path
queue-bus-0.9.0 lib/queue_bus/dispatch.rb
queue-bus-0.8.1 lib/queue_bus/dispatch.rb
queue-bus-0.8.0 lib/queue_bus/dispatch.rb
queue-bus-0.7.0 lib/queue_bus/dispatch.rb
queue-bus-0.6.0 lib/queue_bus/dispatch.rb
queue-bus-0.5.9 lib/queue_bus/dispatch.rb
queue-bus-0.5.8 lib/queue_bus/dispatch.rb
queue-bus-0.5.7 lib/queue_bus/dispatch.rb
queue-bus-0.5.6 lib/queue_bus/dispatch.rb
queue-bus-0.5.5 lib/queue_bus/dispatch.rb
queue-bus-0.5.4 lib/queue_bus/dispatch.rb
queue-bus-0.5.3 lib/queue_bus/dispatch.rb
queue-bus-0.5.2 lib/queue_bus/dispatch.rb
queue-bus-0.5.1 lib/queue_bus/dispatch.rb
queue-bus-0.5.0 lib/queue_bus/dispatch.rb