sinatra-rate-limiter 0.4.0 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +4 -3
- data/lib/sinatra/rate-limiter.rb +11 -11
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e2eb98d3fb4708f2dde94dc7aa8fac5e790eea55
|
4
|
+
data.tar.gz: eff8f03476da900eff856f94b20989608cd07c1d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cc4c520d384178af38c646dd55aedfcf08ee89d96a464825b4c26f3ddc66e3084e9a0a2831d2e68772073c75dd583b97636acb9a29b0fd96aec670ba2c22661b
|
7
|
+
data.tar.gz: 409c06eefea02caf1cea1c6a7b8a5fa662abaa7647a11660011c6a30e2c5ff2fada3e04e8f565a6e5f75e3e5452353922476b1bf4d2c4e1e2b568d07a996cb26
|
data/README.md
CHANGED
@@ -66,9 +66,10 @@ See the _Examples_ section below for usage examples.
|
|
66
66
|
### Error handling
|
67
67
|
|
68
68
|
When a rate limit is exceeded, the exception `Sinatra::RateLimiter::Exceeded`
|
69
|
-
is thrown. By default, this sends an response code `429` with
|
70
|
-
|
71
|
-
|
69
|
+
is thrown. By default, this sends an response code `429` with a simple plain
|
70
|
+
text error message. You can use Sinatra's error handling to customise this.
|
71
|
+
|
72
|
+
E.g.:
|
72
73
|
|
73
74
|
```
|
74
75
|
error Sinatra::RateLimiter::Exceeded do
|
data/lib/sinatra/rate-limiter.rb
CHANGED
@@ -20,20 +20,16 @@ module Sinatra
|
|
20
20
|
limiter.request = request
|
21
21
|
limiter.options = options
|
22
22
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
end
|
23
|
+
limiter.headers.each{|h,v| response.headers[h] = v} if limiter.options.send_headers
|
24
|
+
|
25
|
+
if (error_locals = limiter.limits_exceeded?)
|
26
|
+
response.headers['Retry-After'] = error_locals[:try_again] if limiter.options.send_headers
|
28
27
|
|
29
28
|
request.env['sinatra.error.rate_limiter'] = Struct.new(*error_locals.keys).new(*error_locals.values)
|
30
|
-
raise Sinatra::RateLimiter::Exceeded, "
|
31
|
-
" #{error_locals[:requests]} requests in #{error_locals[:seconds]} seconds." +
|
32
|
-
" Try again in #{error_locals[:try_again]} seconds."
|
29
|
+
raise Sinatra::RateLimiter::Exceeded, "#{bucket.eql?('default') ? 'R' : bucket + ' r'}ate limit exceeded"
|
33
30
|
end
|
34
31
|
|
35
32
|
limiter.log_request
|
36
|
-
limiter.headers.each{|h,v| response.headers[h] = v} if limiter.options.send_headers
|
37
33
|
end
|
38
34
|
|
39
35
|
private
|
@@ -92,7 +88,11 @@ module Sinatra
|
|
92
88
|
app.error Sinatra::RateLimiter::Exceeded do
|
93
89
|
status 429
|
94
90
|
content_type 'text/plain'
|
95
|
-
|
91
|
+
|
92
|
+
"#{env['sinatra.error.rate_limiter'].bucket.eql?('default') ? 'R' : env['sinatra.error.rate_limiter'].bucket + ' R'}" +
|
93
|
+
"ate limit exceeded: #{env['sinatra.error.rate_limiter'].requests} requests" +
|
94
|
+
" in #{env['sinatra.error.rate_limiter'].seconds} seconds." +
|
95
|
+
" Try again in #{env['sinatra.error.rate_limiter'].try_again} seconds."
|
96
96
|
end
|
97
97
|
end
|
98
98
|
|
@@ -144,7 +144,7 @@ module Sinatra
|
|
144
144
|
|
145
145
|
if exceeded
|
146
146
|
try_again = limit_reset(exceeded)
|
147
|
-
return exceeded.merge({try_again: try_again.to_i})
|
147
|
+
return exceeded.merge({try_again: try_again.to_i, bucket: @bucket})
|
148
148
|
end
|
149
149
|
end
|
150
150
|
|