class RailwayIpc::IncomingMessage

Constants

DEFAULT_DECODER

Attributes

errors[R]
message_format[R]
parsed_payload[R]
payload[R]
type[R]

Public Class Methods

new(payload, message_format: nil) click to toggle source
# File lib/railway_ipc/incoming_message.rb, line 7
def initialize(payload, message_format: nil)
  @message_format = message_format
  @parsed_payload = JSON.parse(payload)
  @type = parsed_payload['type']
  @payload = payload
  @errors = {}
rescue JSON::ParserError => e
  raise RailwayIpc::IncomingMessage::ParserError.new(e)
end

Public Instance Methods

correlation_id() click to toggle source
# File lib/railway_ipc/incoming_message.rb, line 25
def correlation_id
  decoded.correlation_id
end
decoded() click to toggle source
# File lib/railway_ipc/incoming_message.rb, line 35
def decoded
  @decoded ||= \
    get_decoder(message_format).call(type, parsed_payload['encoded_message'])
end
stringify_errors() click to toggle source
# File lib/railway_ipc/incoming_message.rb, line 40
def stringify_errors
  errors.values.join(', ')
end
user_uuid() click to toggle source
# File lib/railway_ipc/incoming_message.rb, line 21
def user_uuid
  decoded.user_uuid
end
uuid() click to toggle source
# File lib/railway_ipc/incoming_message.rb, line 17
def uuid
  decoded.uuid
end
valid?() click to toggle source
# File lib/railway_ipc/incoming_message.rb, line 29
def valid?
  errors[:uuid] = 'uuid is required' unless uuid.present?
  errors[:correlation_id] = 'correlation_id is required' unless correlation_id.present?
  errors.none?
end

Private Instance Methods

get_decoder(name) click to toggle source
# File lib/railway_ipc/incoming_message.rb, line 48
def get_decoder(name)
  {
    'binary_protobuf' => RailwayIpc::MessageDecoders::ProtobufBinaryDecoder,
    'json_protobuf' => RailwayIpc::MessageDecoders::ProtobufJsonDecoder
  }.fetch(name, DEFAULT_DECODER)
end