Sha256: 9e7780d89f97d8d5166f7d288fc1b2334ca10c1d66352a48cd2ebaf1b9500d00

Contents?: true

Size: 1 KB

Versions: 1

Compression:

Stored size: 1 KB

Contents

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

# 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 = RateLimit.new('NS1')
        rate_limit.sleep_for(sleep_time)
      end

      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
      raise NS1::Transport::ResponseParseError
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
record_store-6.1.2 lib/record_store/provider/ns1/patch_api_header.rb