class GorgService::Message::FormatterV2

Constants

DEFAULT_HEADERS
EXTRA_HEADERS_FOR

Public Class Methods

parse(delivery_info, properties, body) click to toggle source
# File lib/gorg_service/message/formatters.rb, line 264
def self.parse(delivery_info, properties, body)
  begin

    type=properties[:type]
    unless type
      type=delivery_info[:routing_key].split('.').first
    end

    type_map={event: GorgService::EventMessage, request: GorgService::RequestMessage, reply: GorgService::ReplyMessage, log: GorgService::LogMessage}
    klass=type_map[type.to_s.to_sym]

    raise "Unknown type" unless klass

    headers=properties[:headers]||{}

    args={
        data: convert_keys_to_sym(JSON.parse(body)),
        id:properties[:message_id],

        creation_time: properties[:timestamp] && DateTime.parse(properties[:timestamp]),
        sender:properties[:app_id],
        routing_key: delivery_info[:routing_key],

        reply_to: properties[:reply_to],
        correlation_id: properties[:correlation_id],
        content_type: properties[:content_type],
        content_encoding:properties[:content_encoding],
        soa_version: headers.delete('soa-version'),

        softfail_count: headers.delete('softfail-count'),

        headers: headers,
    }

    extra_args=EXTRA_HEADERS_FOR[klass].to_h.map do |key,method_name|
      [method_name,headers.delete(key)]
    end.to_h

    args.merge!(extra_args)

    klass.new(args)
  rescue JSON::ParserError => e
    raise GorgService::Consumer::HardfailError.new("Unprocessable message : Unable to parse JSON message body", e)
  rescue JSON::Schema::ValidationError => e
    raise GorgService::Consumer::HardfailError.new("Invalid JSON : This message does not respect Gadz.org JSON Schema",e)
  end
end

Public Instance Methods

body() click to toggle source
# File lib/gorg_service/message/formatters.rb, line 256
def body
  message.data
end
payload() click to toggle source
# File lib/gorg_service/message/formatters.rb, line 260
def payload
  body.to_json
end
properties() click to toggle source
# File lib/gorg_service/message/formatters.rb, line 230
def properties

  headers=DEFAULT_HEADERS.merge(message.headers.to_h).merge(
      'softfail-count' => message.softfail_count,
  )

  extra_headers=EXTRA_HEADERS_FOR[message.class].to_h.map do|key,method_name|
    [key,message.public_send(method_name)]
  end.to_h


  headers.merge!(extra_headers)

  {
      routing_key: message.routing_key,
      reply_to: message.reply_to,
      correlation_id: message.correlation_id,
      content_type: message.content_type,
      content_encoding: message.content_encoding,
      headers: headers,
      app_id: message.sender_id,
      type: message.type,
      message_id: message.id,
  }
end