]> git.openstreetmap.org Git - rails.git/blob - lib/rate_limiter.rb
Add frozen_string_literal comments to ruby files
[rails.git] / lib / rate_limiter.rb
1 # frozen_string_literal: true
2
3 class RateLimiter
4   def initialize(cache, interval, limit, max_burst)
5     @cache = cache
6     @requests_per_second = limit.to_f / interval
7     @burst_limit = max_burst
8   end
9
10   def allow?(key)
11     last_update, requests = @cache.get(key)
12
13     if last_update
14       elapsed = Time.now.to_i - last_update
15
16       requests -= elapsed * @requests_per_second
17     else
18       requests = 0.0
19     end
20
21     requests < @burst_limit
22   end
23
24   def update(key)
25     now = Time.now.to_i
26
27     last_update, requests = @cache.get(key)
28
29     if last_update
30       elapsed = now - last_update
31
32       requests -= elapsed * @requests_per_second
33       requests += 1.0
34     else
35       requests = 1.0
36     end
37
38     @cache.set(key, [now, [requests, 1.0].max])
39   end
40 end