grape-throttle 0.0.2 → 0.0.3

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: 7ed50ef26f42b2a23a70ca4980f489a0aa84054d
4
- data.tar.gz: 9637edba76b7b8962e6c94d0d45cc97e3fb9820d
3
+ metadata.gz: 26bb29ef618e5d2a0e5b79d9f97638f3bd1479fe
4
+ data.tar.gz: 24f038ed99d7b3438dcd215935c7f6fc0d302d00
5
5
  SHA512:
6
- metadata.gz: 53d9d218043ac41857ba6cbde85eca9069a557ef4374b57dc3882f08447d12f68ddcf6c5626a464de02eeb4d27d023136b532e32d669501e95c4e48e8517e1b7
7
- data.tar.gz: 636e71131d1aca85d3ade3eb523654127aec25a7b6a8cfd26823e640bd7e64122c88c3756dfbfb5cbbb24ff7180b0872b303e3d3dac8811f70a293189fe2da8f
6
+ metadata.gz: 47e65d82f8dcf15a130f686bf75ed44d5e592dd36b9edc0b8093193632fecaee29e9d7697bfa9de5abe2c303d13a0a2b06d69184021e621aeffac29834f2368a
7
+ data.tar.gz: 12b6eaaeec3a8e7f38f0180effb1d9b93534704acdfbdf94b4f341ab2cc1f00fb0e87f3634430c7cbde78e14318ecfddd0c1ce2de47c06eebb97efd54a94b7cb
@@ -3,6 +3,7 @@ module Grape
3
3
  class ThrottleMiddleware < Grape::Middleware::Base
4
4
  def before
5
5
  endpoint = env['api.endpoint']
6
+ logger = options[:logger] || Logger.new(STDOUT)
6
7
  return unless throttle_options = endpoint.route_setting(:throttle)
7
8
 
8
9
  if limit = throttle_options[:hourly]
@@ -27,14 +28,20 @@ module Grape
27
28
  rate_key = "#{r.route_method}:#{r.route_path}:#{user_value}"
28
29
 
29
30
  redis = options[:cache]
30
- current = redis.get(rate_key).to_i
31
- if !current.nil? && current >= limit
32
- endpoint.error!("too many requests, please try again later", 403)
33
- else
34
- redis.multi do
35
- redis.incr(rate_key)
36
- redis.expire(rate_key, period.to_i)
31
+ begin
32
+ redis.ping
33
+ current = redis.get(rate_key).to_i
34
+ if !current.nil? && current >= limit
35
+ endpoint.error!("too many requests, please try again later", 403)
36
+ else
37
+ redis.multi do
38
+ redis.incr(rate_key)
39
+ redis.expire(rate_key, period.to_i)
40
+ end
37
41
  end
42
+
43
+ rescue Exception => e
44
+ logger.warn(e.message)
38
45
  end
39
46
 
40
47
  end
@@ -1,5 +1,6 @@
1
1
  require 'grape'
2
2
  require 'grape/extensions/throttle_extension'
3
+ require 'logger'
3
4
 
4
5
  module Grape
5
6
  module Middleware
@@ -67,4 +67,17 @@ describe "ThrottleHelper" do
67
67
  end
68
68
 
69
69
  end
70
+
71
+ describe 'Redis down' do
72
+ before do
73
+ expect_any_instance_of(Redis).to receive(:ping){ raise Exception }
74
+ allow($stdout).to receive(:write)
75
+ end
76
+
77
+ it 'should work when redis is down' do
78
+ get "/throttle"
79
+ expect(last_response.status).to eq(200)
80
+ end
81
+
82
+ end
70
83
  end
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.2
4
+ version: 0.0.3
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-05-26 00:00:00.000000000 Z
11
+ date: 2015-06-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rack-test