Class: Maitredee::Subscriber
- Inherits:
-
Object
- Object
- Maitredee::Subscriber
- Extended by:
- Adapters::TestAdapter::SubscriberTesting
- Defined in:
- lib/maitredee/subscriber.rb
Overview
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!(.body)
end
def process
Recipe.find(.body[:id]).update(.body)
end
def delete
Recipe.find(.body[:id]).destroy
end
end
Defined Under Namespace
Classes: EventConfig, SubscriberProxy
Class Attribute Summary collapse
-
.topic_name ⇒ Object
readonly
Returns the value of attribute topic_name.
Instance Attribute Summary collapse
- #message ⇒ SubscriberMessage readonly
Class Method Summary collapse
-
.process(message) ⇒ Object
takes message and routes it based off SubscriberMessage#event_name.
-
.queue_name ⇒ Object
returns the queue_name set in .subscribe_to or is generated off the class name without
Subscriber
. -
.queue_resource_name ⇒ String
Returns the resource name of the queue depending on the adapter.
-
.subscribe_to(topic_name, queue_name: nil, queue_resource_name: nil, &block) ⇒ Object
configures Subscriber to which topic it should listen to and lets you configure events in the block.
Instance Method Summary collapse
-
#initialize(message) ⇒ Subscriber
constructor
A new instance of Subscriber.
Methods included from Adapters::TestAdapter::SubscriberTesting
Constructor Details
#initialize(message) ⇒ Subscriber
Returns a new instance of Subscriber.
159 160 161 |
# File 'lib/maitredee/subscriber.rb', line 159 def initialize() @message = end |
Class Attribute Details
.topic_name ⇒ Object (readonly)
Returns the value of attribute topic_name.
88 89 90 |
# File 'lib/maitredee/subscriber.rb', line 88 def topic_name @topic_name end |
Instance Attribute Details
#message ⇒ SubscriberMessage (readonly)
156 157 158 |
# File 'lib/maitredee/subscriber.rb', line 156 def @message end |
Class Method Details
.process(message) ⇒ Object
takes message and routes it based off SubscriberMessage#event_name
147 148 149 150 151 152 |
# File 'lib/maitredee/subscriber.rb', line 147 def process() event_config = event_configs[.event_name.to_s] if event_config new().send(event_config.action) end end |
.queue_name ⇒ Object
returns the queue_name set in .subscribe_to or is generated off the class name without Subscriber
135 136 137 |
# File 'lib/maitredee/subscriber.rb', line 135 def queue_name @queue_name ||= name.chomp(Subscriber.name.demodulize).underscore.dasherize end |
.queue_resource_name ⇒ String
Returns the resource name of the queue depending on the adapter
141 142 143 |
# 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) ⇒ Object
configures Subscriber to which topic it should listen to and lets you configure events in the block
114 115 116 117 118 119 120 121 122 123 124 125 126 127 |
# 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 |