lib/ably/rest/middleware/parse_message_pack.rb in ably-1.0.7 vs lib/ably/rest/middleware/parse_message_pack.rb in ably-1.1.0
- old
+ new
@@ -8,19 +8,35 @@
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
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, "Expected MessagePack response: #{e.message}"
+ raise Ably::Exceptions::InvalidResponseBody, "MessagePack::MalformedFormatError body could not be decoded: #{e.message}. Got Base64:\n#{base64_body(body)}"
+ end
+
+ def base64_body(body)
+ Base64.encode64(body)
+ rescue => err
+ "[#{err.message}! Could not base64 encode body: '#{body}']"
end
end
end
end
end