ruby_rate_limiter 2.0.8 → 2.1.0

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: f812a1ae8b8449217f489de3234d4f26a077bdc4f8bd6653dbe29457c363ab23
4
- data.tar.gz: f2941667395af0a013e11c87394ab355ed5c01ec789fdc294e5eb84ef4ac4c3b
3
+ metadata.gz: a23283f4cf54bc34f7fa761e08c79032c9de40ccc7a4da6d5af6e3498e474017
4
+ data.tar.gz: f4e11f0d03ea1a2532cffc98bbfe3707d50c58ed6f033cce3b7b39f09034ad15
5
5
  SHA512:
6
- metadata.gz: ebd5d104e4172e0b32856dc26b815b04d0a49b89b35e7a9c8520ad474ab00e2dfb5c2771078a579e8c9075b49ed84a75c2b98e5e5ad672ec4b750ef576ea1eaf
7
- data.tar.gz: e402b83a46be87121443283dc178a8eabed68056c44a23423f2c008d0bc5f9c7d8f5a870fb1c00ef629f5ad006501c42267fbb4ae01532030f434409662b8d1c
6
+ metadata.gz: 3f52b1a24f3c2022fc451b1b2bfc591a89f006f7c04a5f9d33030840341c0bcc1772c0a3319f850f1b046ae9c8dead896a02fd67539fac5e713ab947ba0e1745
7
+ data.tar.gz: 15c4b5b4895957972139afce12a97ac3b64e53754e1b755b71e78289216c6e0f232c2ddb09c49250cb69279d96641507b686525b830691a40ec30fec7692f8ab
@@ -1,6 +1,5 @@
1
1
  # lib/ruby_rate_limiter/storage/redis_storage.rb
2
2
  require 'redis'
3
- require_relative 'abstract_storage'
4
3
 
5
4
  module RubyRateLimiter
6
5
  module Storage
@@ -14,7 +13,15 @@ module RubyRateLimiter
14
13
  end
15
14
 
16
15
  def set(key, value)
17
- @redis.set(key, value)
16
+ @redis.setnx(key, value)
17
+ end
18
+
19
+ def watch(key, &block)
20
+ @redis.watch(key, &block)
21
+ end
22
+
23
+ def multi(&block)
24
+ @redis.multi(&block)
18
25
  end
19
26
  end
20
27
  end
@@ -1,12 +1,12 @@
1
1
  # lib/ruby_rate_limiter/token_bucket.rb
2
2
  require 'forwardable'
3
+ require 'logger'
3
4
  require_relative 'storage/abstract_storage'
4
5
  require_relative 'storage/redis_storage'
5
6
 
6
7
  module RubyRateLimiter
7
8
  class TokenBucket
8
9
  extend Forwardable
9
-
10
10
  DEFAULT_BUCKET_SIZE = 10
11
11
  DEFAULT_REFILL_RATE = 1
12
12
  DEFAULT_STORAGE = RubyRateLimiter::Storage::RedisStorage.new
@@ -29,40 +29,41 @@ module RubyRateLimiter
29
29
  @bucket_size = bucket_size
30
30
  @refill_rate_per_second = refill_rate.to_f / TIME_UNITS[time_unit]
31
31
  @storage = storage
32
+
33
+ @logger = Logger.new(STDOUT)
34
+ @logger.level = Logger::DEBUG
32
35
  initialize_bucket
33
36
  end
34
37
 
35
38
  def allow_request?
36
39
  refill_tokens
37
40
  tokens = get_bucket_size
38
- puts "Allow request: tokens before = #{tokens}" # Debugging line
41
+ @logger.info "Allow request: tokens before = #{tokens}"
39
42
 
40
43
  return false if tokens < 1
41
44
 
42
45
  update_bucket_size(tokens - 1)
43
- puts "Allow request: tokens after = #{get_bucket_size}" # Debugging line
46
+ @logger.info "Allow request: tokens after = #{get_bucket_size}"
44
47
  true
45
48
  end
46
49
 
47
50
  private
48
51
 
49
52
  def initialize_bucket
50
- if @storage.get("#{@user_id}_tokens").nil?
53
+ if @storage.get("#{@user_id}_tokens").empty?
51
54
  update_bucket_size(@bucket_size)
52
55
  update_last_refill_time(Time.now.to_f)
53
- puts "Initialized bucket: tokens = #{@bucket_size}, time = #{Time.now.to_f}"
56
+ @logger.info "Initialized bucket: tokens = #{@bucket_size}, time = #{Time.now.to_f}"
54
57
  end
55
58
  end
56
59
 
57
60
  def get_bucket_size
58
61
  size = (@storage.get("#{@user_id}_tokens") || @bucket_size).to_i
59
- puts "get_bucket_size: #{@user_id}_tokens = #{size}" # Debugging line
60
62
  size
61
63
  end
62
64
 
63
65
  def get_last_refill_time
64
66
  last_refill = (@storage.get("#{@user_id}_last_refill") || Time.now.to_f).to_f
65
- puts "get_last_refill_time: #{@user_id}_last_refill = #{last_refill}" # Debugging line
66
67
  last_refill
67
68
  end
68
69
 
@@ -80,18 +81,15 @@ module RubyRateLimiter
80
81
  elapsed_time = current_time - last_refill_time
81
82
 
82
83
  if elapsed_time < 0
83
- puts "Warning: elapsed_time is negative. Adjusting to zero."
84
84
  elapsed_time = 0
85
85
  end
86
86
 
87
87
  new_tokens = (elapsed_time * @refill_rate_per_second).to_i
88
- puts "Refill tokens: current_time = #{current_time}, last_refill_time = #{last_refill_time}, elapsed_time = #{elapsed_time}, new_tokens = #{new_tokens}" # Debugging line
89
-
88
+
90
89
  if new_tokens > 0
91
90
  tokens = [get_bucket_size + new_tokens, @bucket_size].min
92
91
  update_bucket_size(tokens)
93
92
  update_last_refill_time(current_time)
94
- puts "Refill tokens: updated tokens = #{tokens}, current_time = #{current_time}" # Debugging line
95
93
  end
96
94
  end
97
95
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RateLimiter
4
- VERSION = "2.0.8"
4
+ VERSION = "2.1.0"
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby_rate_limiter
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.8
4
+ version: 2.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mutuba