Sha256: da159f5b2688103d3b7ba8a2454ba77e40d7d5df6777c462c6bdf817835f0831

Contents?: true

Size: 1.04 KB

Versions: 1

Compression:

Stored size: 1.04 KB

Contents

# frozen_string_literal: true

module Yext
  module Api
    module Utils
      # Faraday Middleware for extracting API limits from call responses.
      class ApiRateLimits < Faraday::Response::Middleware
        include Yext::Api::Concerns::ApiFinder

        def call(env)
          @app.call(env).on_complete do |environment|
            save_rates(environment, find_api(env[:url], env[:method].to_s))

            env.response
          end
        end

        private

        def save_rates(environment, api_module)
          return if api_module.blank?

          api_module.last_status = environment[:status]

          response_headers = environment[:response_headers]

          return unless response_headers.key?("rate-limit-remaining")

          api_module.update_rates(remaining: response_headers["rate-limit-remaining"].to_i,
                                  limit:     response_headers["rate-limit-limit"].to_i,
                                  reset_at:  Time.at(response_headers["rate-limit-reset"].to_i))
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
yext-api-0.1.1 lib/yext/api/utils/api_rate_limits.rb