better_rate_limit 0.1.6 → 0.1.7

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
  SHA256:
3
- metadata.gz: fd081be677a01d7f69d7e6e6ada8a3172d84d6ee74fbf7ccab5d5fbecb89ee58
4
- data.tar.gz: 2817642bfee1165564273b8b36ae434e02e7135c6e63a887a4c178c4558d3752
3
+ metadata.gz: 05720aabc13993c0e8fc708415d4464b6db86b9cdcffab16e9f32b6dabfaa935
4
+ data.tar.gz: 4e2c18b7928c45e3276e92d87eb080d977bcde352abe3f55c482afa815806808
5
5
  SHA512:
6
- metadata.gz: bdd3fda987a39c8027d47ddec7b6112e089a609aaabd3a924e71a76417619b69284416183d68744ea05fa55b47e1cead0d04cb99ddb33937e6db97f578d784db
7
- data.tar.gz: 7b03b579af9be74f8669af5531d254580b0f384232dc5cb295f6d4cbcea7ca3525d42ee41105f0c08dd121c6a68d91544e06dd38a7044bd0b4062cc6007077c5
6
+ metadata.gz: a081b16c393cc95387701e41eba68c5109aa8fcb574324042f55830828879d06f14c87a859f667b90b3df56108cb92b2e5d5954272e4169aa2e35d1517da69f8
7
+ data.tar.gz: 0db7a65a4135753ebe34fc6c0f34126ede4f41360fb4a3cab4999b2934c244423f9d46cd23c2b31cd18412826399462d256ddc9d41abc89d0feaf64541a64f0c
data/Gemfile.lock CHANGED
@@ -1,44 +1,44 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- better_rate_limit (0.1.5)
4
+ better_rate_limit (0.1.6)
5
5
  actionpack (>= 5.0)
6
6
  redis (>= 3.3)
7
7
 
8
8
  GEM
9
9
  remote: https://rubygems.org/
10
10
  specs:
11
- actionpack (5.2.4.3)
12
- actionview (= 5.2.4.3)
13
- activesupport (= 5.2.4.3)
11
+ actionpack (5.2.6.2)
12
+ actionview (= 5.2.6.2)
13
+ activesupport (= 5.2.6.2)
14
14
  rack (~> 2.0, >= 2.0.8)
15
15
  rack-test (>= 0.6.3)
16
16
  rails-dom-testing (~> 2.0)
17
17
  rails-html-sanitizer (~> 1.0, >= 1.0.2)
18
- actionview (5.2.4.3)
19
- activesupport (= 5.2.4.3)
18
+ actionview (5.2.6.2)
19
+ activesupport (= 5.2.6.2)
20
20
  builder (~> 3.1)
21
21
  erubi (~> 1.4)
22
22
  rails-dom-testing (~> 2.0)
23
23
  rails-html-sanitizer (~> 1.0, >= 1.0.3)
24
- activesupport (5.2.4.3)
24
+ activesupport (5.2.6.2)
25
25
  concurrent-ruby (~> 1.0, >= 1.0.2)
26
26
  i18n (>= 0.7, < 2)
27
27
  minitest (~> 5.1)
28
28
  tzinfo (~> 1.1)
29
29
  builder (3.2.4)
30
30
  coderay (1.1.3)
31
- concurrent-ruby (1.1.6)
31
+ concurrent-ruby (1.1.9)
32
32
  crass (1.0.6)
33
- erubi (1.9.0)
34
- i18n (1.8.5)
33
+ erubi (1.10.0)
34
+ i18n (1.9.1)
35
35
  concurrent-ruby (~> 1.0)
36
- loofah (2.6.0)
36
+ loofah (2.14.0)
37
37
  crass (~> 1.0.2)
38
38
  nokogiri (>= 1.5.9)
39
39
  method_source (1.0.0)
40
40
  mini_portile2 (2.4.0)
41
- minitest (5.14.1)
41
+ minitest (5.15.0)
42
42
  mocha (1.11.2)
43
43
  mock_redis (0.25.0)
44
44
  nokogiri (1.10.10)
@@ -47,8 +47,8 @@ GEM
47
47
  coderay (~> 1.1)
48
48
  method_source (~> 1.0)
49
49
  rack (2.2.3)
50
- rack-test (0.6.3)
51
- rack (>= 1.0)
50
+ rack-test (1.1.0)
51
+ rack (>= 1.0, < 3)
52
52
  rails-controller-testing (1.0.5)
53
53
  actionpack (>= 5.0.1.rc1)
54
54
  actionview (>= 5.0.1.rc1)
@@ -56,13 +56,13 @@ GEM
56
56
  rails-dom-testing (2.0.3)
57
57
  activesupport (>= 4.2.0)
58
58
  nokogiri (>= 1.6)
59
- rails-html-sanitizer (1.3.0)
59
+ rails-html-sanitizer (1.4.2)
60
60
  loofah (~> 2.3)
61
61
  rake (12.3.3)
62
- redis (4.2.5)
62
+ redis (4.3.1)
63
63
  thread_safe (0.3.6)
64
64
  timecop (0.9.1)
65
- tzinfo (1.2.7)
65
+ tzinfo (1.2.9)
66
66
  thread_safe (~> 0.1)
67
67
 
68
68
  PLATFORMS
@@ -2,7 +2,7 @@
2
2
 
3
3
  module BetterRateLimit
4
4
  class Configuration
5
- attr_accessor :ignore
5
+ attr_accessor :ignore, :redis_client
6
6
 
7
7
  def initialize
8
8
  @ignore = false
@@ -2,6 +2,12 @@
2
2
 
3
3
  require 'redis'
4
4
 
5
+ class MissingRedisConfigError < StandardError
6
+ def initialize
7
+ super 'Redis client not set'
8
+ end
9
+ end
10
+
5
11
  module BetterRateLimit
6
12
  module RedisConnection
7
13
  def self.included(host)
@@ -10,7 +16,7 @@ module BetterRateLimit
10
16
 
11
17
  module ClassMethods
12
18
  def redis_client
13
- @redis_client ||= Redis.new(url: ENV.fetch('REDIS_URL', 'redis://localhost:6379'))
19
+ @redis_client ||= BetterRateLimit.configuration.redis_client
14
20
  end
15
21
  end
16
22
  end
@@ -10,23 +10,24 @@ module BetterRateLimit
10
10
 
11
11
  class << self
12
12
  def throttle(key, limit:, time_window:)
13
+ raise MissingRedisConfigError unless redis_client
13
14
  return true if BetterRateLimit.configuration.ignore
14
15
 
15
16
  now = Time.now.utc
16
17
  timestamps_count = redis_client.llen key
17
18
 
18
19
  if timestamps_count < limit
19
- redis_client.multi do
20
- redis_client.rpush key, now
21
- redis_client.expire key, time_window.to_i
20
+ redis_client.multi do |pipeline|
21
+ pipeline.rpush key, now
22
+ pipeline.expire key, time_window.to_i
22
23
  end
23
24
  true
24
25
  else
25
26
  first = redis_client.lpop(key)
26
27
 
27
- redis_client.multi do
28
- redis_client.rpush key, now
29
- redis_client.expire key, time_window.to_i
28
+ redis_client.multi do |pipeline|
29
+ pipeline.rpush key, now
30
+ pipeline.expire key, time_window.to_i
30
31
  end
31
32
 
32
33
  return false unless first
@@ -1,3 +1,3 @@
1
1
  module BetterRateLimit
2
- VERSION = "0.1.6"
2
+ VERSION = "0.1.7"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: better_rate_limit
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.6
4
+ version: 0.1.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pablo Fonseca
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2021-07-13 00:00:00.000000000 Z
12
+ date: 2022-07-15 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: redis
@@ -84,7 +84,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
84
84
  - !ruby/object:Gem::Version
85
85
  version: '0'
86
86
  requirements: []
87
- rubygems_version: 3.1.4
87
+ rubygems_version: 3.2.22
88
88
  signing_key:
89
89
  specification_version: 4
90
90
  summary: Rate limit requests