grape-throttle 0.0.3 → 0.0.4
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/lib/grape/middleware/throttle_middleware.rb +4 -1
- data/spec/simple_api_spec.rb +16 -0
- metadata +8 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a48ae0d355926dc09eb0e43731cf314a8aba10da
|
4
|
+
data.tar.gz: dbfa8774da7394b93e90306cc7b7dc0fc3f88dd1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c8c98f8c8270a9b4ef1c5b07686183081063d3a3aab2152803b72e53d0c4e5aa1771ad2bbda257eec72b50da8c712ce900ad198cc3880a71e30aadf28b304d2a
|
7
|
+
data.tar.gz: ea2c3665786c6f8b1d21bf65de5de6c527be26bb581591d6b8c17c294c622ddd06f6c66a9174ccef66c65f88d1cdbd2b1450c2af93fcfadec843a9c927898abc
|
@@ -1,6 +1,7 @@
|
|
1
1
|
module Grape
|
2
2
|
module Middleware
|
3
3
|
class ThrottleMiddleware < Grape::Middleware::Base
|
4
|
+
COUNTER_START = 0
|
4
5
|
def before
|
5
6
|
endpoint = env['api.endpoint']
|
6
7
|
logger = options[:logger] || Logger.new(STDOUT)
|
@@ -35,8 +36,10 @@ module Grape
|
|
35
36
|
endpoint.error!("too many requests, please try again later", 403)
|
36
37
|
else
|
37
38
|
redis.multi do
|
39
|
+
# Set the value of the key to COUNTER_START if the key does not already exist and
|
40
|
+
# set the expiry only on creation to avoid clobbering it later
|
41
|
+
redis.set(rate_key, COUNTER_START, { :nx => true, :ex => period.to_i } )
|
38
42
|
redis.incr(rate_key)
|
39
|
-
redis.expire(rate_key, period.to_i)
|
40
43
|
end
|
41
44
|
end
|
42
45
|
|
data/spec/simple_api_spec.rb
CHANGED
@@ -23,6 +23,11 @@ describe "ThrottleHelper" do
|
|
23
23
|
get('/wrong-configuration') do
|
24
24
|
"step on it"
|
25
25
|
end
|
26
|
+
|
27
|
+
throttle period: 2.seconds, limit: 3
|
28
|
+
get('/really-short-throttle') do
|
29
|
+
"step on it"
|
30
|
+
end
|
26
31
|
end
|
27
32
|
end
|
28
33
|
|
@@ -68,6 +73,17 @@ describe "ThrottleHelper" do
|
|
68
73
|
|
69
74
|
end
|
70
75
|
|
76
|
+
describe "requests just below the period" do
|
77
|
+
it "do not get throttled by the rate limit" do
|
78
|
+
4.times do
|
79
|
+
get "/really-short-throttle"
|
80
|
+
sleep 1
|
81
|
+
end
|
82
|
+
|
83
|
+
expect(last_response.status).to eq(200)
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
71
87
|
describe 'Redis down' do
|
72
88
|
before do
|
73
89
|
expect_any_instance_of(Redis).to receive(:ping){ raise Exception }
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: grape-throttle
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alejandro Wainzinger
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-12-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rack-test
|
@@ -58,14 +58,14 @@ dependencies:
|
|
58
58
|
requirements:
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: 0.
|
61
|
+
version: 0.5.0
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: 0.
|
68
|
+
version: 0.5.0
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: grape
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -84,16 +84,16 @@ dependencies:
|
|
84
84
|
name: redis
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- - "
|
87
|
+
- - "~>"
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version: '
|
89
|
+
version: '3.2'
|
90
90
|
type: :runtime
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
|
-
- - "
|
94
|
+
- - "~>"
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version: '
|
96
|
+
version: '3.2'
|
97
97
|
description: A middleware for Grape to add endpoint-specific throttling.
|
98
98
|
email:
|
99
99
|
- alejandro.wainzinger@gmail.com
|