class RJR::Messages::Compressed::Response

Public Class Methods

is_compressed_response_message?(message) click to toggle source
# File lib/rjr/messages/compressed.rb, line 158
def self.is_compressed_response_message?(message)
  begin
    json = JSONParser.parse(message)
    json.has_key?('r') || json.has_key?('e')
  rescue Exception => e
    puts e.to_s
    false
  end
end
is_response_message?(message) click to toggle source
Calls superclass method
# File lib/rjr/messages/compressed.rb, line 168
def self.is_response_message?(message)
  is_compressed_response_message?(message) || super(message)
end
new(args = {}) click to toggle source
# File lib/rjr/messages/compressed.rb, line 94
def initialize(args = {})
  parse_args(args)
end

Public Instance Methods

compressed_error_json() click to toggle source
# File lib/rjr/messages/compressed.rb, line 180
def compressed_error_json
  {'e' => {'co' => @result.error_code,
           'm'  => @result.error_msg,
           'cl' => @result.error_class}}
end
compressed_success_json() click to toggle source
# File lib/rjr/messages/compressed.rb, line 172
def compressed_success_json
  # XXX encapsulate in array & extract above so as to
  # guarantee to be able to be parsable JSON
  deflated = Zlib::Deflate.deflate([@result.result].to_json.to_s)
  encoded  = Base64.encode64(deflated)
  {'r' => encoded}
end
has_compressed_request?() click to toggle source
# File lib/rjr/messages/compressed.rb, line 150
def has_compressed_request?
  !!@request && @request.class.const_defined?(:COMPRESSED)
end
has_uncompressed_request?() click to toggle source
# File lib/rjr/messages/compressed.rb, line 154
def has_uncompressed_request?
  !!@request && !@request.class.const_defined?(:COMPRESSED)
end
to_json(*a) click to toggle source
Calls superclass method
# File lib/rjr/messages/compressed.rb, line 186
def to_json(*a)
  return super(*a) if has_uncompressed_request?

  result_json = @result.success ?
                compressed_success_json : compressed_error_json

  response = {'j' => 2.0,
              'i' => @msg_id}.merge(@headers).
                              merge(result_json).to_json(*a)
end

Private Instance Methods

parse_args(args) click to toggle source
Calls superclass method
# File lib/rjr/messages/compressed.rb, line 100
def parse_args(args)
  args = Hash[args]
  @request = args[:request]

  if args[:message]
    message = args.delete(:message)
    parse_message(message, args)
  else
    super(args)
  end
end
parse_compressed_result(response) click to toggle source
# File lib/rjr/messages/compressed.rb, line 128
def parse_compressed_result(response)
  @result         = Result.new
  @result.success = response.has_key?('r')
  @result.failed  = !@result.success

  if @result.success
    decoded   = Base64.decode64(response['r'])
    inflated  = Zlib::Inflate.inflate(decoded)
    converted = JSONParser.parse(inflated).first
    @result.result = converted

  elsif response.has_key?('e')
    @result.error_code  = response['e']['co']
    @result.error_msg   = response['e']['m']
    @result.error_class = response['e']['cl']
  end

  @result
end
parse_message(message, args={}) click to toggle source
# File lib/rjr/messages/compressed.rb, line 112
def parse_message(message, args={})
  @json_message = message
  response      = JSONParser.parse(@json_message)

  if response.has_key?('r') || response.has_key?('e')
    result = parse_compressed_result(response)
    parse_args({:id     => response['i'],
                :result => result}.merge(args))

  else
    result = parse_result(response)
    parse_args({:id     => response['id'],
                :result => result}.merge(args))
  end
end