lib/rack/throttle/hourly.rb in rack-throttle-0.2.0 vs lib/rack/throttle/hourly.rb in rack-throttle-0.3.0
- old
+ new
@@ -3,10 +3,42 @@
# This rate limiter strategy throttles the application by defining a
# maximum number of allowed HTTP requests per hour (by default, 3,600
# requests per 60 minutes, which works out to an average of 1 request per
# second).
#
- # _Not yet implemented in the current release._
- class Hourly < Limiter
- # TODO
+ # Note that this strategy doesn't use a sliding time window, but rather
+ # tracks requests per distinct hour. This means that the throttling
+ # counter is reset every hour on the hour (according to the server's local
+ # timezone).
+ #
+ # @example Allowing up to 3,600 requests per hour
+ # use Rack::Throttle::Hourly
+ #
+ # @example Allowing up to 100 requests per hour
+ # use Rack::Throttle::Hourly, :max => 100
+ #
+ class Hourly < TimeWindow
+ ##
+ # @param [#call] app
+ # @param [Hash{Symbol => Object}] options
+ # @option options [Integer] :max (3600)
+ def initialize(app, options = {})
+ super
+ end
+
+ ##
+ def max_per_hour
+ @max_per_hour ||= options[:max_per_hour] || options[:max] || 3_600
+ end
+
+ alias_method :max_per_window, :max_per_hour
+
+ protected
+
+ ##
+ # @param [Rack::Request] request
+ # @return [String]
+ def cache_key(request)
+ [super, Time.now.strftime('%Y-%m-%dT%H')].join(':')
+ end
end
end; end