grape-throttle 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 26bb29ef618e5d2a0e5b79d9f97638f3bd1479fe
4
- data.tar.gz: 24f038ed99d7b3438dcd215935c7f6fc0d302d00
3
+ metadata.gz: a48ae0d355926dc09eb0e43731cf314a8aba10da
4
+ data.tar.gz: dbfa8774da7394b93e90306cc7b7dc0fc3f88dd1
5
5
  SHA512:
6
- metadata.gz: 47e65d82f8dcf15a130f686bf75ed44d5e592dd36b9edc0b8093193632fecaee29e9d7697bfa9de5abe2c303d13a0a2b06d69184021e621aeffac29834f2368a
7
- data.tar.gz: 12b6eaaeec3a8e7f38f0180effb1d9b93534704acdfbdf94b4f341ab2cc1f00fb0e87f3634430c7cbde78e14318ecfddd0c1ce2de47c06eebb97efd54a94b7cb
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
 
@@ -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.3
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-06-29 00:00:00.000000000 Z
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.3.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.3.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: '0'
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: '0'
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