rails_rate_limiter 0.1.3 → 0.2.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: cc8d075f4e6bd2d140fdb831d6a6e58cb2c2a365
4
- data.tar.gz: d6a11b2be61a472611ec5fd818d57818df007f76
2
+ SHA256:
3
+ metadata.gz: bf0a533c1192e113e76a12f6ef39c7ccb149acf02fb7a99b58d7fbcb98d223db
4
+ data.tar.gz: '0497b4b08ff06fbe0f62c5d2426f03c8bccf8ccab172064f627bef56a8ff8d68'
5
5
  SHA512:
6
- metadata.gz: a262c89d7d090c57e34620397458f1897cb75afa674f856a073a4c1f37c098a9643317ba6bb4eae57fdc38b5dcc222f23d07507df3d5be79c53c7a153224cb14
7
- data.tar.gz: d610bc4f55ce3daf8b35f55d928d04afe9c0788c1f1c5b1bf962d6b4b522ce70e600385f1b5561c1565f909c36a9aa292a11f0eeb71692533b9a7a42ae48dfdf
6
+ metadata.gz: 88645a319feabdc3baf70855f463a86bf6e2df978e39749f87da263d4b154a1522656d5712112a3ef2992a4bf6c45daa275b66f69537752eda18db7c213e4ec2
7
+ data.tar.gz: 8dbbb42486361fd33ee1d5619e3e3bd3394fc87b04a31729a4a0aad322f9d11a3d9edf116464b5d12d9c372a44fec107fee3cf781ae49b422d453d0e6c1d618a
data/Gemfile.lock CHANGED
@@ -1,9 +1,9 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rails_rate_limiter (0.1.2)
4
+ rails_rate_limiter (0.2.1)
5
5
  rails (>= 4.2)
6
- redis (~> 3.0)
6
+ redis (>= 3.0)
7
7
 
8
8
  GEM
9
9
  remote: https://rubygems.org/
@@ -56,24 +56,24 @@ GEM
56
56
  crass (1.0.4)
57
57
  diff-lcs (1.3)
58
58
  erubi (1.7.1)
59
- globalid (0.4.1)
59
+ globalid (0.4.2)
60
60
  activesupport (>= 4.2.0)
61
61
  i18n (1.0.1)
62
62
  concurrent-ruby (~> 1.0)
63
63
  loofah (2.2.2)
64
64
  crass (~> 1.0.2)
65
65
  nokogiri (>= 1.5.9)
66
- mail (2.7.0)
66
+ mail (2.7.1)
67
67
  mini_mime (>= 0.1.1)
68
- marcel (0.3.2)
68
+ marcel (0.3.3)
69
69
  mimemagic (~> 0.3.2)
70
70
  method_source (0.9.0)
71
- mimemagic (0.3.2)
72
- mini_mime (1.0.0)
71
+ mimemagic (0.3.5)
72
+ mini_mime (1.0.2)
73
73
  mini_portile2 (2.3.0)
74
74
  minitest (5.11.3)
75
75
  mock_redis (0.17.3)
76
- nio4r (2.3.1)
76
+ nio4r (2.5.4)
77
77
  nokogiri (1.8.2)
78
78
  mini_portile2 (~> 2.3.0)
79
79
  pry (0.11.3)
@@ -107,7 +107,7 @@ GEM
107
107
  rake (>= 0.8.7)
108
108
  thor (>= 0.18.1, < 2.0)
109
109
  rake (10.5.0)
110
- redis (3.3.5)
110
+ redis (4.2.5)
111
111
  rspec-core (3.7.1)
112
112
  rspec-support (~> 3.7.0)
113
113
  rspec-expectations (3.7.0)
@@ -125,10 +125,10 @@ GEM
125
125
  rspec-mocks (~> 3.7.0)
126
126
  rspec-support (~> 3.7.0)
127
127
  rspec-support (3.7.1)
128
- sprockets (3.7.1)
128
+ sprockets (4.0.2)
129
129
  concurrent-ruby (~> 1.0)
130
130
  rack (> 1, < 3)
131
- sprockets-rails (3.2.1)
131
+ sprockets-rails (3.2.2)
132
132
  actionpack (>= 4.0)
133
133
  activesupport (>= 4.0)
134
134
  sprockets (>= 3.0.0)
@@ -136,9 +136,9 @@ GEM
136
136
  thread_safe (0.3.6)
137
137
  tzinfo (1.2.5)
138
138
  thread_safe (~> 0.1)
139
- websocket-driver (0.7.0)
139
+ websocket-driver (0.7.3)
140
140
  websocket-extensions (>= 0.1.0)
141
- websocket-extensions (0.1.3)
141
+ websocket-extensions (0.1.5)
142
142
 
143
143
  PLATFORMS
144
144
  ruby
@@ -152,4 +152,4 @@ DEPENDENCIES
152
152
  rspec-rails
153
153
 
154
154
  BUNDLED WITH
155
- 1.16.1
155
+ 1.17.3
data/README.md CHANGED
@@ -1,3 +1,5 @@
1
+ [![Gem Version](https://badge.fury.io/rb/rails_rate_limiter.svg)](https://badge.fury.io/rb/rails_rate_limiter)
2
+
1
3
  # RailsRateLimiter
2
4
 
3
5
  This is a high level rate limiting gem for Ruby on Rails using Redis. It limits amount of requests on controller's level, that allows you to customize rate limiting options using everything that available in your action, e.g. `current_user`.
data/bin/console CHANGED
@@ -1,14 +1,14 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require "bundler/setup"
4
- require "rails_rate_limiter"
3
+ require 'bundler/setup'
4
+ require 'rails_rate_limiter'
5
5
 
6
6
  # You can add fixtures and/or initialization code here to make experimenting
7
7
  # with your gem easier. You can also use a different console, if you like.
8
8
 
9
9
  # (If you use this, don't forget to add pry to your Gemfile!)
10
- # require "pry"
11
- # Pry.start
10
+ require 'pry'
11
+ Pry.start
12
12
 
13
- require "irb"
14
- IRB.start(__FILE__)
13
+ # require "irb"
14
+ # IRB.start(__FILE__)
@@ -56,7 +56,7 @@ module RailsRateLimiter
56
56
  private
57
57
 
58
58
  def check_rate_limits(strategy, limit, per, pattern, client, block)
59
- requester = pattern || request.remote_ip
59
+ requester = compute_requester_pattern(pattern || request.remote_ip)
60
60
 
61
61
  strategy_class =
62
62
  "RailsRateLimiter::Strategies::#{strategy.classify}".constantize
@@ -66,4 +66,11 @@ module RailsRateLimiter
66
66
  # a wrong context that leads to not preventing action execution after render
67
67
  instance_exec result, &block
68
68
  end
69
+
70
+ def compute_requester_pattern(requester)
71
+ return "ip_#{requester}" unless requester.respond_to?(:call)
72
+ # instance_exec is using here because simple block.call executes block in
73
+ # a wrong context that leads to not preventing action execution after render
74
+ "custom_#{instance_exec(&requester)}"
75
+ end
69
76
  end
@@ -12,12 +12,12 @@ module RailsRateLimiter
12
12
  # requests per time period.
13
13
  # @param per [Fixnum, Lambda, Proc] :per Time period in seconds.
14
14
  # @param requester [Lambda, Proc] Identifies request
15
- # @param client [Object] Redis client
15
+ # @param client [Object, Proc] Redis client
16
16
  def initialize(limit, per, requester, client = nil)
17
17
  @limit = limit.respond_to?(:call) ? limit.call : limit
18
18
  @expires_in = calculate_expires_in(per)
19
- @requester_pattern = compute_requester_pattern(requester)
20
- @client = client
19
+ @requester_pattern = requester
20
+ @client = client.is_a?(Proc) ? client.call : client # Redis client already responds to #call so we have to strict
21
21
  end
22
22
 
23
23
  def run
@@ -62,11 +62,6 @@ module RailsRateLimiter
62
62
  value = per.respond_to?(:call) ? per.call : per
63
63
  (value.to_f * TIMESTAMP_ACCURACY).to_i
64
64
  end
65
-
66
- def compute_requester_pattern(requester)
67
- return "ip_#{requester}" unless requester.respond_to?(:call)
68
- "custom_#{requester.call}"
69
- end
70
65
  end
71
66
  end
72
67
  end
@@ -1,3 +1,3 @@
1
1
  module RailsRateLimiter
2
- VERSION = "0.1.3"
2
+ VERSION = "0.2.1"
3
3
  end
@@ -20,7 +20,7 @@ Gem::Specification.new do |spec|
20
20
  spec.require_paths = ['lib']
21
21
 
22
22
  spec.add_runtime_dependency 'rails', '>= 4.2'
23
- spec.add_runtime_dependency 'redis', '~> 3.0'
23
+ spec.add_runtime_dependency 'redis', '>= 3.0'
24
24
 
25
25
  spec.add_development_dependency 'bundler', '~> 1.16'
26
26
  spec.add_development_dependency 'rake', '~> 10.0'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rails_rate_limiter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ruslan Kotov
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-05-05 00:00:00.000000000 Z
11
+ date: 2021-02-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -28,14 +28,14 @@ dependencies:
28
28
  name: redis
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: '3.0'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - "~>"
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '3.0'
41
41
  - !ruby/object:Gem::Dependency
@@ -151,8 +151,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
151
151
  - !ruby/object:Gem::Version
152
152
  version: '0'
153
153
  requirements: []
154
- rubyforge_project:
155
- rubygems_version: 2.6.13
154
+ rubygems_version: 3.0.3
156
155
  signing_key:
157
156
  specification_version: 4
158
157
  summary: Requests rate limiting library for Ruby on Rails