grape-throttle 0.0.2 → 0.0.3

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 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