Sha256: 2499ed64fc1b2ee4b89b421ef041c184b93ea91cf83bd18082d777cf902c9179

Contents?: true

Size: 1.14 KB

Versions: 2

Compression:

Stored size: 1.14 KB

Contents

# -*- encoding : utf-8 -*-
module Faraday

  class ExtendedParseJson < FaradayMiddleware::ParseJson

    def process_response(env)
      env[:raw_body] = env[:body] if preserve_raw?(env)


      if env[:status] >= 400
        data = parse(env[:body]) || {} rescue {}

        array_codes = [
          AV::Protocol::ERROR_INTERNAL,
          AV::Protocol::ERROR_TIMEOUT,
          AV::Protocol::ERROR_EXCEEDED_BURST_LIMIT
        ]
        error_hash = { "error" => "HTTP Status #{env[:status]} Body #{env[:body]}", "http_status_code" => env[:status] }.merge(data)
        if data['code'] && array_codes.include?(data['code'])
          sleep 60 if data['code'] == AV::Protocol::ERROR_EXCEEDED_BURST_LIMIT
          raise exception(env).new(error_hash.merge(data))
        elsif env[:status] >= 500
          raise exception(env).new(error_hash.merge(data))
        end
        raise AV::AVProtocolError.new(error_hash)
      else
        data = parse(env[:body]) || {}

        env[:body] = data
      end
    end

    def exception env
      # decide to retry or not
      (env[:retries].to_i.zero? ? AV::AVProtocolError : AV::AVProtocolRetry)
    end

  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
leancloud-ruby-client-0.1.1 lib/faraday/extended_parse_json.rb
leancloud-ruby-client-0.1.0 lib/faraday/extended_parse_json.rb