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