Module: Sinatra::RateLimiter

Defined in:
lib/sinatra/rate-limiter.rb

Defined Under Namespace

Modules: Helpers Classes: Exceeded, RateLimit

Class Method Summary collapse

Class Method Details

.registered(app) ⇒ Object



72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
# File 'lib/sinatra/rate-limiter.rb', line 72

def self.registered(app)
  app.helpers RateLimiter::Helpers

  app.set :rate_limiter,                  false
  app.set :rate_limiter_environments,     [:production]
  app.set :rate_limiter_default_limits,   [10, 20]  # 10 requests per 20 seconds
  app.set :rate_limiter_default_options, {
    send_headers:   true,
    header_prefix:  'Rate-Limit',
    identifier:     Proc.new{ |request| request.ip }
  }

  app.set :rate_limiter_redis_conn,       Redis.new
  app.set :rate_limiter_redis_namespace,  'rate_limit'
  app.set :rate_limiter_redis_expires,    24*60*60 # This must be larger than longest limit time period

  app.error Sinatra::RateLimiter::Exceeded do
    status 429
    content_type 'text/plain'

    "#{env['sinatra.error.rate_limiter'].bucket.eql?('default') ? 'R' : env['sinatra.error.rate_limiter'].bucket + ' R'}" +
      "ate limit exceeded: #{env['sinatra.error.rate_limiter'].requests} requests" +
      " in #{env['sinatra.error.rate_limiter'].seconds} seconds." +
      " Try again in #{env['sinatra.error.rate_limiter'].try_again} seconds."
  end
end