class Rack::Throttle::Interval

This rate limiter strategy throttles the application by enforcing a minimum interval (by default, 1 second) between subsequent allowed HTTP requests.

@example Allowing up to two requests per second

use Rack::Throttle::Interval, :min => 0.5   #  500 ms interval

@example Allowing a request every two seconds

use Rack::Throttle::Interval, :min => 2.0   # 2000 ms interval

Public Class Methods

new(app, options = {}) click to toggle source

@param [#call] app @param [Hash{Symbol => Object}] options @option options [Float] :min (1.0)

Calls superclass method
# File lib/rack/throttle/interval.rb, line 18
def initialize(app, options = {})
  super
end

Public Instance Methods

allowed?(request) click to toggle source

Returns `true` if sufficient time (equal to or more than {#minimum_interval}) has passed since the last request and the given present `request`.

@param [Rack::Request] request @return [Boolean]

# File lib/rack/throttle/interval.rb, line 29
def allowed?(request)
  t1 = request_start_time(request)
  t0 = cache_get(key = cache_key(request)) rescue nil
  allowed = !t0 || (dt = t1 - t0.to_f) >= minimum_interval
  begin
    cache_set(key, t1)
    allowed
  rescue => e
    # If an error occurred while trying to update the timestamp stored
    # in the cache, we will fall back to allowing the request through.
    # This prevents the Rack application blowing up merely due to a
    # backend cache server (Memcached, Redis, etc.) being offline.
    allowed = true
  end
end
minimum_interval() click to toggle source

Returns the required minimal interval (in terms of seconds) that must elapse between two subsequent HTTP requests.

@return [Float]

# File lib/rack/throttle/interval.rb, line 59
def minimum_interval
  @min ||= (@options[:min] || 1.0).to_f
end
retry_after() click to toggle source

Returns the number of seconds before the client is allowed to retry an HTTP request.

@return [Float]

# File lib/rack/throttle/interval.rb, line 50
def retry_after
  minimum_interval
end