Class: Takagi::Middleware::RateLimiting

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

Instance Method Summary collapse

Constructor Details

#initializeRateLimiting

Returns a new instance of RateLimiting.



6
7
8
9
# File 'lib/takagi/middleware/rate_limiting.rb', line 6

def initialize
  @request_counts = Hash.new(0)
  @mutex = Mutex.new
end

Instance Method Details

#call(request) {|request| ... } ⇒ Object

Yields:

  • (request)


11
12
13
14
15
16
17
18
19
20
21
# File 'lib/takagi/middleware/rate_limiting.rb', line 11

def call(request)
  key = request.uri.path

  count = @mutex.synchronize do
    @request_counts[key] += 1
  end

  return request.to_response(code: 132, payload: { error: 'Too Many Requests' }) if count > 10

  yield request
end