ruby_rate_limiter 0.1.1 → 2.0.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
2
  SHA256:
3
- metadata.gz: 6d487b84e9e255e4a2fe403fc98961ee09083d7be86a5bc929e9a106e9455b87
4
- data.tar.gz: 28bf084c36db3488761ef6ff9014a0a79743a23c78d1085e55188a2d09262217
3
+ metadata.gz: 2462f7011d88430891bdc353e44d9a7fdb83077c6b812ccb1403951731393a5e
4
+ data.tar.gz: a27cf78a19b55a6b44dbe46519ee409d843b08b0a57119164f5ef5158e8c19bd
5
5
  SHA512:
6
- metadata.gz: 1ece0c93d76158c3192290bb0eecbcfe09b82b71e23035b8a6616967a3fddd2af174956d72edde13fb9df3bc00fd579d8195c2115ca8586f51dbad0a8771e03d
7
- data.tar.gz: ac79381bda71677bd9a0fed4935f3d167b1a840f51ef4656df951c2563a0fe4f81d561cd4d61c5420a13ef375672c596a05baf258dfab1bda3205f91446cf711
6
+ metadata.gz: 1f5ff9ff0ac134525513565276dbcd30c617772f969dd8b99e864f609c965b22557616ea8f75c004e2e9696f8bdc230dd9e00a5f60ffb21d972e639dce57327f
7
+ data.tar.gz: c66242a80c84285c31f3025f47ecfa5dff10121a1507543e3c6ef41cfd21509cfdceb8689aa93602e10bccaae868f49cfb2aa44f7febbd13d7e455331f311b82
@@ -9,18 +9,30 @@ module RubyRateLimiter
9
9
 
10
10
  DEFAULT_BUCKET_SIZE = 10
11
11
  DEFAULT_REFILL_RATE = 1
12
+ DEFAULT_STORAGE = RubyRateLimiter::Storage::RedisStorage.new
13
+ TIME_UNITS = {
14
+ second: 1,
15
+ minute: 60,
16
+ hour: 3600
17
+ }.freeze
12
18
 
13
19
  def_delegators :@storage, :get, :set
14
20
 
15
- def initialize(user_id, bucket_size: DEFAULT_BUCKET_SIZE, refill_rate: DEFAULT_REFILL_RATE, storage: RateLimiter::Storage::RedisStorage.new)
21
+ def initialize(
22
+ user_id,
23
+ bucket_size: DEFAULT_BUCKET_SIZE,
24
+ refill_rate: DEFAULT_REFILL_RATE,
25
+ time_unit: :second,
26
+ storage: DEFAULT_STORAGE
27
+ )
16
28
  @user_id = user_id
17
29
  @bucket_size = bucket_size
18
- @refill_rate = refill_rate
30
+ @refill_rate_per_second = refill_rate.to_f / TIME_UNITS[time_unit]
19
31
  @storage = storage
20
32
  end
21
33
 
22
34
  def allow_request?
23
- refill_tokens
35
+ refill_tokens
24
36
  tokens = get_bucket_size
25
37
  return false if tokens < 1
26
38
 
@@ -51,7 +63,7 @@ module RubyRateLimiter
51
63
  last_refill_time = get_last_refill_time
52
64
  elapsed_time = current_time - last_refill_time
53
65
 
54
- new_tokens = (elapsed_time * @refill_rate).to_i
66
+ new_tokens = (elapsed_time * @refill_rate_per_second).to_i
55
67
  return if new_tokens <= 0
56
68
 
57
69
  tokens = [get_bucket_size + new_tokens, @bucket_size].min
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RateLimiter
4
- VERSION = "0.1.1"
4
+ VERSION = "2.0.1"
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: 0.1.1
4
+ version: 2.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mutuba