Sha256: c02465c92c9b061305fd37071b1de16bc1b254a5ec9f943ef9e1053c25668143

Contents?: true

Size: 1.27 KB

Versions: 1

Compression:

Stored size: 1.27 KB

Contents

require 'sanford-protocol/response_status'

# The Response class models a specific type of Sanford message body and provides
# a defined structure for it. A response requires a message body to contain a
# status and some data.

module Sanford; end
module Sanford::Protocol

  class Response < Struct.new(:status, :data)

    def self.parse(hash)
      self.new(hash['status'], hash['data'])
    end

    def initialize(status, data = nil)
      super(build_status(status), data)
    end

    def code;            status.code;            end
    def code=(value);    status.code = value;    end
    def message;         status.message;         end
    def message=(value); status.message = value; end
    def to_s;            status.to_s;            end

    def to_hash
      { 'status' => [status.code, status.message],
        'data'   => data
      }
    end

    def inspect
      reference = '0x0%x' % (self.object_id << 1)
      "#<#{self.class}:#{reference} @status=#{status} @data=#{data.inspect}>"
    end

    def ==(other)
      if other.kind_of?(self.class)
        self.to_hash == other.to_hash
      else
        super
      end
    end

    private

    def build_status(status)
      return status if status.kind_of?(ResponseStatus)
      ResponseStatus.new(*status)
    end

  end

end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
sanford-protocol-0.12.0 lib/sanford-protocol/response.rb