class Qurd::Processor
Use a {#Qurd::Listener} to act on an AWS SQS message
Attributes
listener[R]
@!attribute listener [r]
@return [Qurd::Listener]
@!attribute message [r]
@return [Qurd::Message]
message[R]
@!attribute listener [r]
@return [Qurd::Listener]
@!attribute message [r]
@return [Qurd::Message]
Public Class Methods
new(listener, msg, listener_name, queue_url)
click to toggle source
@param [Qurd::Listener] listener @param [Struct] msg An AWS SQS message
# File lib/qurd/processor.rb, line 16 def initialize(listener, msg, listener_name, queue_url) @listener = listener @message = Message.new( message: msg, name: listener_name, queue_url: queue_url, aws_credentials: @listener.aws_credentials, region: @listener.region ) end
Public Instance Methods
inspect()
click to toggle source
@private
# File lib/qurd/processor.rb, line 45 def inspect format('<Qurd::Processor:%x listener:%s message:%s>', object_id, listener.inspect, message.inspect ) end
process()
click to toggle source
Process an SQS message, by instantiating an instance of each action, calling run_before
, run
, and run_after
, and deleting the message.
# File lib/qurd/processor.rb, line 29 def process qurd_logger.info("Processing #{listener.name} " \ "action:#{message.action} " \ "event:#{message.message.Event}") if message.action instantiate_actions run_before run_action run_after end message.delete end
Private Instance Methods
instantiate_actions()
click to toggle source
# File lib/qurd/processor.rb, line 55 def instantiate_actions @actions = qurd_configuration.actions[message.action].map do |klass| qurd_logger.debug("Instantiating #{klass}") klass.new(message) end end
run(action) { |action| ... }
click to toggle source
# File lib/qurd/processor.rb, line 88 def run(action, &_block) qurd_logger.debug("Running #{action}") yield action rescue StandardError => e qurd_logger.error "#{action} raised #{e}" qurd_logger.error e.backtrace.join("\n") message.failed!(e) end
run_action()
click to toggle source
# File lib/qurd/processor.rb, line 68 def run_action run_actions('run') do |action| action.send(message.action) if message.action end end
run_actions(desc, &block)
click to toggle source
# File lib/qurd/processor.rb, line 80 def run_actions(desc, &block) @actions.each do |action| qurd_logger.time("#{desc} #{action}") do run(action, &block) end end end
run_after()
click to toggle source
# File lib/qurd/processor.rb, line 74 def run_after run_actions('run_after') do |action| action.send(:run_after) end end
run_before()
click to toggle source
# File lib/qurd/processor.rb, line 62 def run_before run_actions('run_before') do |action| action.send(:run_before) end end