Sha256: d383e88db405214491883397fc497c0355c2a269f7c457869e761a3b82b8aea3

Contents?: true

Size: 1.37 KB

Versions: 19

Compression:

Stored size: 1.37 KB

Contents

# frozen_string_literal: true

module Discorb
  #
  # Class to handle rate limiting.
  # @private
  #
  class RatelimitHandler
    # @!visibility private
    def initialize(client)
      @client = client
      @ratelimit_hash = {}
      @path_ratelimit_hash = {}
    end

    #
    # Wait for the rate limit to reset.
    #
    # @param [String] method The HTTP method.
    # @param [String] path The path.
    #
    def wait(method, path)
      return if path.start_with?("https://")

      return unless hash = @path_ratelimit_hash[method + path]

      return unless b = @ratelimit_hash[hash]

      if b[:reset_at] < Time.now.to_i
        @ratelimit_hash.delete(hash)
        return
      end
      return if b[:remaining] > 0

      @client.log.info("Ratelimit reached, waiting for #{b[:reset_at] - Time.now.to_i} seconds")
      sleep(b[:reset_at] - Time.now.to_i)
    end

    #
    # Save the rate limit.
    #
    # @param [String] method The HTTP method.
    # @param [String] path The path.
    # @param [Net::HTTPResponse] resp The response.
    #
    def save(method, path, resp)
      return unless resp["X-RateLimit-Remaining"]

      @path_ratelimit_hash[method + path] = resp["X-RateLimit-Bucket"]
      @ratelimit_hash[resp["X-RateLimit-Bucket"]] = {
        remaining: resp["X-RateLimit-Remaining"].to_i,
        reset_at: resp["X-RateLimit-Reset"].to_i,
      }
    end
  end
end

Version data entries

19 entries across 19 versions & 1 rubygems

Version Path
discorb-0.9.3 lib/discorb/rate_limit.rb
discorb-0.9.1 lib/discorb/rate_limit.rb
discorb-0.9.0 lib/discorb/rate_limit.rb
discorb-0.8.2 lib/discorb/rate_limit.rb
discorb-0.8.1 lib/discorb/rate_limit.rb
discorb-0.8.0 lib/discorb/rate_limit.rb
discorb-0.7.6 lib/discorb/rate_limit.rb
discorb-0.7.3 lib/discorb/rate_limit.rb
discorb-0.7.2 lib/discorb/rate_limit.rb
discorb-0.7.1 lib/discorb/rate_limit.rb
discorb-0.7.0 lib/discorb/rate_limit.rb
discorb-0.6.1 lib/discorb/rate_limit.rb
discorb-0.6.0 lib/discorb/rate_limit.rb
discorb-0.5.6 lib/discorb/rate_limit.rb
discorb-0.5.5 lib/discorb/rate_limit.rb
discorb-0.5.4 lib/discorb/rate_limit.rb
discorb-0.5.3 lib/discorb/rate_limit.rb
discorb-0.5.2 lib/discorb/rate_limit.rb
discorb-0.5.1 lib/discorb/rate_limit.rb