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