Sha256: 23dac9b80c0a4683019fa8f35d0f2e2051114bcd2c3105faef8a68aa42d119f3

Contents?: true

Size: 1.21 KB

Versions: 12

Compression:

Stored size: 1.21 KB

Contents

# frozen_string_literal: true

module RailwayIpc
  class IncomingMessage
    attr_reader :type, :payload, :parsed_payload, :errors

    def initialize(payload)
      @parsed_payload = JSON.parse(payload)
      @type = parsed_payload['type']
      @payload = payload
      @errors = {}
    rescue JSON::ParserError => e
      raise RailwayIpc::IncomingMessage::ParserError.new(e)
    end

    def uuid
      decoded.uuid
    end

    def user_uuid
      decoded.user_uuid
    end

    def correlation_id
      decoded.correlation_id
    end

    def valid?
      errors[:uuid] = 'uuid is required' unless uuid.present?
      errors[:correlation_id] = 'correlation_id is required' unless correlation_id.present?
      errors.none?
    end

    def decoded
      @decoded ||=
        begin
          protobuf_msg = Base64.decode64(parsed_payload['encoded_message'])
          decoder = Kernel.const_get(type)
          decoder.decode(protobuf_msg)
        rescue Google::Protobuf::ParseError => e
          raise RailwayIpc::IncomingMessage::ParserError.new(e)
        rescue NameError
          RailwayIpc::Messages::Unknown.decode(protobuf_msg)
        end
    end

    def stringify_errors
      errors.values.join(', ')
    end
  end
end

Version data entries

12 entries across 12 versions & 1 rubygems

Version Path
railway-ipc-3.0.0 lib/railway_ipc/incoming_message.rb
railway-ipc-2.2.2 lib/railway_ipc/incoming_message.rb
railway-ipc-2.2.1 lib/railway_ipc/incoming_message.rb
railway-ipc-2.2.0 lib/railway_ipc/incoming_message.rb
railway-ipc-2.1.0 lib/railway_ipc/incoming_message.rb
railway-ipc-2.0.3 lib/railway_ipc/incoming_message.rb
railway-ipc-2.0.2 lib/railway_ipc/incoming_message.rb
railway-ipc-2.0.1 lib/railway_ipc/incoming_message.rb
railway-ipc-2.0.0 lib/railway_ipc/incoming_message.rb
railway-ipc-1.1.0 lib/railway_ipc/incoming_message.rb
railway-ipc-1.0.1 lib/railway_ipc/incoming_message.rb
railway-ipc-1.0.0 lib/railway_ipc/incoming_message.rb