Class: RateLimiter::Middleware

Inherits:
Object
  • Object
show all
Defined in:
lib/rate_limiter/middleware.rb

Instance Method Summary collapse

Constructor Details

#initialize(app) ⇒ Middleware

Returns a new instance of Middleware.



4
5
6
7
8
# File 'lib/rate_limiter/middleware.rb', line 4

def initialize(app)
  @app = app
  @config = RateLimiter.config
  @storage = RateLimiter.storage
end

Instance Method Details

#call(request) ⇒ Object



10
11
12
13
14
15
16
17
18
19
20
21
22
23
# File 'lib/rate_limiter/middleware.rb', line 10

def call(request)
  client_id = request['REMOTE_ADDR']
  @storage.add_request(client_id)

  puts "********************************************************"
  puts "Requests in last minute: #{@storage.requests_in_last_minute(client_id).size}"
  puts "********************************************************"

  if @storage.requests_in_last_minute(client_id).size > @config.requests_per_minute
    [429, { 'Content-Type' => 'text/plain' }, ['Rate limit exceeded. Try again later.']]
  else
    @app.call(request)
  end
end