class Moogle::Handlers::AcceptNotification
Handler that accepts Moogle::Messges::Notifications and creates actual push requests to relay the notification to each found target.
Constants
- DEFAULT_PUSH_OPTIONS
Attributes
default_options[R]
pusher_queue[R]
Public Class Methods
new()
click to toggle source
# File lib/moogle/handlers/accept_notification.rb, line 34 def initialize @pusher_queue = opts! :pusher_queue @default_options = opts :default_push_options, DEFAULT_PUSH_OPTIONS end
Public Instance Methods
call()
click to toggle source
# File lib/moogle/handlers/accept_notification.rb, line 39 def call return nil if request.receiver_refs.blank? || request.message_kind.blank? # Get all targets whose links' kinds + receivers match. model = opts :model, Moogle::Target targets = model.all( model.links.message_kind => request.message_kind, model.links.receiver_ref => request.receiver_refs) # Create a new push request for each target found. # Push each request to the pusher queue, and errors are caught # and pushed to the error channel. targets.each do |target| with_error_handling( kind: 'moogle/handlers/accept_notification', request: request.to_hash, target_id: target.id) do request_factory = request_factory_for target.type push_data = [ request.attributes, default_options, target.options, { target_id: target.id, message_origin: "#{request.message_kind}:#{request.uuid}:" } ].reduce(&:merge) push_request = request_factory.build push_data pusher_queue.push push_request.to_hash end end return nil rescue => e e.extend Moogle::Error raise e end
request_factory_for(target_type)
click to toggle source
# File lib/moogle/handlers/accept_notification.rb, line 77 def request_factory_for(target_type) case target_type.to_s when 'Moogle::BlogTarget' Moogle::Requests::PushBlogEntry when 'Moogle::EmailTarget' Moogle::Requests::PushEmail #when 'Moogle::FacebookTarget' # Moogle::Requests::PushFacebookAction #when 'Moogle::TwitterTarget' # Moogle::Requests::PushTweet when 'Moogle::WebhookTarget' Moogle::Requests::PushWebhookPing else raise ArgumentError, "Unsupported Target #{target_type}" end end