class Tochtli::MessageSetup

Public Instance Methods

call(env) click to toggle source
# File lib/tochtli/application.rb, line 66
def call(env)
  controller_class  = env[:controller_class]
  delivery_info     = env[:delivery_info]
  payload           = env[:payload]
  properties        = env[:properties]
  rabbit_connection = env[:rabbit_connection]
  cache             = env[:cache]
  logger            = env[:logger]
  message_route     = controller_class.find_message_route(delivery_info.routing_key)

  if message_route
    env[:message]    = create_message(message_route.message_class, properties, payload)
    env[:controller] = controller_class.new(rabbit_connection, cache, logger)
    env[:action]     = message_route.action

    @app.call(env)

  else
    logger.error "\n\nMessage DROPPED by #{controller_class.name} at #{Time.now}"
    logger.error "\tProperties: #{properties.inspect}."
    logger.error "\tDelivery info: exchange: #{delivery_info[:exchange]}, routing_key: #{delivery_info[:routing_key]}."
    false
  end
end
create_message(message_class, properties, payload) click to toggle source
# File lib/tochtli/application.rb, line 91
def create_message(message_class, properties, payload)
  message            = message_class.new(nil, properties)
  message.attributes = JSON.parse(payload)
  raise InvalidMessageError.new(message.errors.join(", "), message) if message.invalid?
  message
end