class Ably::Rest::Middleware::ParseMessagePack

Public Instance Methods

base64_body(body) click to toggle source
# File lib/submodules/ably-ruby/lib/ably/rest/middleware/parse_message_pack.rb, line 35
def base64_body(body)
  Base64.encode64(body)
rescue => err
  "[#{err.message}! Could not base64 encode body: '#{body}']"
end
on_complete(env) click to toggle source
# File lib/submodules/ably-ruby/lib/ably/rest/middleware/parse_message_pack.rb, line 8
def on_complete(env)
  if env.response_headers['Content-Type'] == 'application/x-msgpack'
    env.body = parse(env.body) unless env.response_headers['Ably-Middleware-Parsed'] == true
    env.response_headers['Ably-Middleware-Parsed'] = true
  end
rescue Ably::Exceptions::InvalidResponseBody => e
  debug_info = {
    method: env.method,
    url: env.url,
    base64_body: base64_body(env.body),
    response_headers: env.response_headers
  }
  raise Ably::Exceptions::InvalidResponseBody, "#{e.message}\nRequest env: #{debug_info}"
end
parse(body) click to toggle source
# File lib/submodules/ably-ruby/lib/ably/rest/middleware/parse_message_pack.rb, line 23
def parse(body)
  if body.length > 0
    MessagePack.unpack(body)
  else
    body
  end
rescue MessagePack::UnknownExtTypeError => e
  raise Ably::Exceptions::InvalidResponseBody, "MessagePack::UnknownExtTypeError body could not be decoded: #{e.message}. Got Base64:\n#{base64_body(body)}"
rescue MessagePack::MalformedFormatError => e
  raise Ably::Exceptions::InvalidResponseBody, "MessagePack::MalformedFormatError body could not be decoded: #{e.message}. Got Base64:\n#{base64_body(body)}"
end