class Fleck::Consumer::Request

Attributes

action[R]
data[R]
errors[R]
headers[R]
id[R]
ip[R]
metadata[R]
params[R]
payload[R]
status[R]
version[R]

Public Class Methods

new(metadata, payload, delivery_info) click to toggle source
# File lib/fleck/consumer/request.rb, line 8
def initialize(metadata, payload, delivery_info)
  @id              = metadata.correlation_id
  logger.progname += " #{@id}"

  @metadata      = metadata
  @payload       = payload
  @exchange      = delivery_info.exchange.inspect
  @queue         = delivery_info.routing_key.inspect
  @data          = {}
  @headers       = (@metadata.headers || {}).to_hash_with_indifferent_access
  @action        = @metadata.type
  @version       = nil
  @ip            = nil
  @params        = {}
  @status        = 200
  @errors        = []

  parse_request!
end

Protected Instance Methods

parse_request!() click to toggle source
# File lib/fleck/consumer/request.rb, line 30
def parse_request!
  @data = Oj.load(@payload, mode: :compat).to_hash_with_indifferent_access.filtered!
  @headers.merge!(@data["headers"] || {}).filtered!

  logger.debug "Processing request (exchange: #{@exchange}, queue: #{@queue}, options: #{@headers}, message: #{@data})"

  @action            ||= @headers["action"]
  @headers["action"] ||= @action
  @version             = @headers["version"]
  @ip                  = @headers["ip"]
  @params              = @data["params"] || {}
rescue Oj::ParseError => e
  logger.error(e.inspect + "\n" + e.backtrace.join("\n"))
  @status = 400
  @errors << "Bad Request"
  @errors << e.inspect
rescue => e
  logger.error(e.inspect + "\n" + e.backtrace.join("\n"))
  @status = 500
  @errors << "Internal Server Error"
end