Sha256: 451d240b64bf4cda798fde9b2df042e7b11c97d72ee0bffd58fa3538131e8457

Contents?: true

Size: 1.18 KB

Versions: 13

Compression:

Stored size: 1.18 KB

Contents

require 'net/http'
require_relative '../provider_utils/waiter'

class NS1::Response::UnparsableBodyError < NS1::Response::Error
  def initialize(status)
    @status = status
    super({}, status)
  end
end

# Patch the method which retrieves headers for API rate limit dynamically
module NS1::Transport
  class NetHttp
    X_RATELIMIT_PERIOD = 'x-ratelimit-period'.freeze
    X_RATELIMIT_REMAINING = 'x-ratelimit-remaining'.freeze

    def process_response(response)
      response_hash = response.to_hash

      if response_hash.key?(X_RATELIMIT_PERIOD) && response_hash.key?(X_RATELIMIT_REMAINING)
        sleep_time = response_hash[X_RATELIMIT_PERIOD].first.to_i /
          [1, response_hash[X_RATELIMIT_REMAINING].first.to_i].max.to_f

        rate_limit = RateLimitWaiter.new('NS1')
        rate_limit.wait(sleep_time)
      end

      begin
        body = JSON.parse(response.body)
        case response
        when Net::HTTPOK
          NS1::Response::Success.new(body, response.code.to_i)
        else
          NS1::Response::Error.new(body, response.code.to_i)
        end
      rescue JSON::ParserError
        NS1::Response::UnparsableBodyError.new(response.code.to_i)
      end
    end
  end
end

Version data entries

13 entries across 13 versions & 1 rubygems

Version Path
record_store-8.0.5 lib/record_store/provider/ns1/patch_api_header.rb
record_store-8.0.4 lib/record_store/provider/ns1/patch_api_header.rb
record_store-8.0.3 lib/record_store/provider/ns1/patch_api_header.rb
record_store-8.0.2 lib/record_store/provider/ns1/patch_api_header.rb
record_store-8.0.1 lib/record_store/provider/ns1/patch_api_header.rb
record_store-8.0.0 lib/record_store/provider/ns1/patch_api_header.rb
record_store-7.1.1 lib/record_store/provider/ns1/patch_api_header.rb
record_store-7.1.0 lib/record_store/provider/ns1/patch_api_header.rb
record_store-7.0.1 lib/record_store/provider/ns1/patch_api_header.rb
record_store-7.0.0 lib/record_store/provider/ns1/patch_api_header.rb
record_store-6.7.2 lib/record_store/provider/ns1/patch_api_header.rb
record_store-6.7.1 lib/record_store/provider/ns1/patch_api_header.rb
record_store-6.7.0 lib/record_store/provider/ns1/patch_api_header.rb