Sha256: 6987958b35629ebce35326f2e4b17a827f0f9cc8f3d5807c9a6ed0a3423a18fb

Contents?: true

Size: 1.54 KB

Versions: 22

Compression:

Stored size: 1.54 KB

Contents

require 'faraday'
require 'msgpack'

module Ably
  module Rest
    module Middleware
      class ParseMessagePack < Faraday::Response::Middleware
        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, "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

Version data entries

22 entries across 22 versions & 2 rubygems

Version Path
ably-rest-1.2.0 lib/submodules/ably-ruby/lib/ably/rest/middleware/parse_message_pack.rb
ably-1.2.0 lib/ably/rest/middleware/parse_message_pack.rb
ably-rest-1.1.8 lib/submodules/ably-ruby/lib/ably/rest/middleware/parse_message_pack.rb
ably-1.1.8 lib/ably/rest/middleware/parse_message_pack.rb
ably-rest-1.1.7 lib/submodules/ably-ruby/lib/ably/rest/middleware/parse_message_pack.rb
ably-1.1.7 lib/ably/rest/middleware/parse_message_pack.rb
ably-rest-1.1.6 lib/submodules/ably-ruby/lib/ably/rest/middleware/parse_message_pack.rb
ably-1.1.6 lib/ably/rest/middleware/parse_message_pack.rb
ably-rest-1.1.5 lib/submodules/ably-ruby/lib/ably/rest/middleware/parse_message_pack.rb
ably-1.1.5 lib/ably/rest/middleware/parse_message_pack.rb
ably-rest-1.1.4 lib/submodules/ably-ruby/lib/ably/rest/middleware/parse_message_pack.rb
ably-1.1.4 lib/ably/rest/middleware/parse_message_pack.rb
ably-rest-1.1.4.rc lib/submodules/ably-ruby/lib/ably/rest/middleware/parse_message_pack.rb
ably-1.1.4.rc lib/ably/rest/middleware/parse_message_pack.rb
ably-rest-1.1.3 lib/submodules/ably-ruby/lib/ably/rest/middleware/parse_message_pack.rb
ably-1.1.3 lib/ably/rest/middleware/parse_message_pack.rb
ably-rest-1.1.2 lib/submodules/ably-ruby/lib/ably/rest/middleware/parse_message_pack.rb
ably-1.1.2 lib/ably/rest/middleware/parse_message_pack.rb
ably-rest-1.1.2.rc1 lib/submodules/ably-ruby/lib/ably/rest/middleware/parse_message_pack.rb
ably-1.1.1 lib/ably/rest/middleware/parse_message_pack.rb