class Maitredee::Subscriber

Inherit from this class to easily subscrive to messages:

class RecipeSubscriber < Maitredee::Subscriber
  # this is the topic name
  subscribe_to :recipes do

    # this is the event name optionally say which method to use to process
    event(:create, to: create)

    # event_name will be used as the method name if it is a valid method name, otherwise to: must be set
    event(:delete)

    # for empty event name just use nil
    event(nil, to: :process)

    # you can specify a catch all route
    default_event to: :process
  end

  # optional initializer to do message pre processing
  # def initialize(message)
  #   super
  #   # do business here
  # end

  def create
    Recipe.create!(message.body)
  end

  def process
    Recipe.find(message.body[:id]).update(message.body)
  end

  def delete
    Recipe.find(message.body[:id]).destroy
  end
end

Constants

EventConfig

Attributes

topic_name[R]
message[R]

@return [SubscriberMessage]

Public Class Methods

event_configs() click to toggle source

@api private

# File lib/maitredee/subscriber.rb, line 130
def event_configs
  @event_configs ||= {}
end
new(message) click to toggle source

@param message [SubscriberMessage]

# File lib/maitredee/subscriber.rb, line 159
def initialize(message)
  @message = message
end
process(message) click to toggle source

takes message and routes it based off SubscriberMessage#event_name @param message [SubscriberMessage]

# File lib/maitredee/subscriber.rb, line 147
def process(message)
  event_config = event_configs[message.event_name.to_s]
  if event_config
    new(message).send(event_config.action)
  end
end
queue_name() click to toggle source

returns the queue_name set in .subscribe_to or is generated off the class name without `Subscriber`

# File lib/maitredee/subscriber.rb, line 135
def queue_name
  @queue_name ||= name.chomp(Subscriber.name.demodulize).underscore.dasherize
end
queue_resource_name() click to toggle source

Returns the resource name of the queue depending on the adapter @return [String]

# File lib/maitredee/subscriber.rb, line 141
def queue_resource_name
  @queue_resource_name ||= Maitredee.queue_resource_name(topic_name, queue_name)
end
subscribe_to(topic_name, queue_name: nil, queue_resource_name: nil, &block) click to toggle source

configures Subscriber to which topic it should listen to and lets you configure events in the block @example subscribe to a topic

class RecipeSubscriber < Maitredee::Subscriber
  subscribe_to :recipes do
    event(:delete) # by default this calls the event_name, #delete
    event(:update, to: :process) # events can be routed to different methods though
    event(nil, to: :process) # subscribe without event names

    default_event(to: :process) # this will default a catch all route
  end

  def delete
    # do some work
  end

  def process
    # do some work
  end
end

@see SubscriberProxy @param topic_name [#to_s] @param queue_name [#to_s] overide default generation from class name @param queue_resource_name [#to_s] overide default generation from queue_name and topic_name

# File lib/maitredee/subscriber.rb, line 114
def subscribe_to(topic_name, queue_name: nil, queue_resource_name: nil, &block)
  @topic_name = topic_name
  @queue_name = queue_name if queue_name
  @queue_resource_name = queue_resource_name if queue_resource_name

  proxy = SubscriberProxy.new(self)
  proxy.instance_eval(&block)

  if event_configs.empty? && event_configs.default.nil?
    raise Maitredee::NoRoutesError, "No events routed"
  end

  Maitredee.register_subscriber(self)
end