simple_throttle 1.0.3 → 1.0.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 88bc1f488ffad8621894918d48bbde5df0c68ef498ddaaf359d91f81914a27c5
4
- data.tar.gz: c219a0b2a6b66e1e5427bdab8260dcfc4f0121618fd8c340a3e892f92dad1192
3
+ metadata.gz: cd25dd96b13df27a165952bee5a5ff4fd6731c164c88aaa586e2c990a47650d3
4
+ data.tar.gz: 4298862682b63ef05bebf1e70abb62bf1dad5e7c3a23835e4c9ad94ed38c8cd5
5
5
  SHA512:
6
- metadata.gz: 9e30ae0a0a4dbfb09778fc1cfcd02d3376b020fc83d4166a2ab6066725a4c2c0e8680f38ac26c127b6b0952ed4558ff9c3e82e0301dda0dc4db9bf831cb8c383
7
- data.tar.gz: 5cfb1b4e72a4b1014a131b50ddb028e41289b102016b54ba2a5eef4c03d2f7a5edd66b21c84924be54df1e01796d0c1c2c963a7cf8072bfc1ca7951bab983a47
6
+ metadata.gz: 52eda43dd29e5c4ceadb806c0a132abeb30737365aea897a33815e7aa40ca518ea97ed4506c3b612e4729f08e9e3534877dd9f3d6890925cdb8bf7afdc4a5e70
7
+ data.tar.gz: 839f5e758fe348fa974dd3b8e3b2d37827002ab39db178058095344ed90c94b25aeb6a477d93ac042a9d291bf3afd8bbf13672b60a91233fa09cb13861a94bf1
data/CHANGELOG.md CHANGED
@@ -4,6 +4,9 @@ All notable changes to this project will be documented in this file.
4
4
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
5
5
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
6
 
7
+ ## 1.0.4
8
+ - Fix wait_time method to match the documentation from [bc-swoop](https://github.com/bc-swoop)
9
+
7
10
  ## 1.0.3
8
11
 
9
12
  ### Changed
data/README.md CHANGED
@@ -60,7 +60,7 @@ $ gem install simple_throttle
60
60
 
61
61
  ## Contributing
62
62
 
63
- Open a pull request on GitHub.
63
+ Fork the repository and open a pull request on GitHub.
64
64
 
65
65
  Please use the [standardrb](https://github.com/testdouble/standard) syntax and lint your code with `standardrb --fix` before submitting.
66
66
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.0.3
1
+ 1.0.4
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "redis"
4
+
4
5
  # Create a simple throttle that can be used to limit the number of request for a resouce
5
6
  # per time period. These objects are thread safe.
6
7
  class SimpleThrottle
@@ -41,7 +42,15 @@ class SimpleThrottle
41
42
 
42
43
  class << self
43
44
  # Add a global throttle that can be referenced later with the [] method.
44
- def add(name, limit:, ttl:, redis: nil)
45
+ # This can be used to configure global throttles that you want to setup once
46
+ # and then use in multiple places.
47
+ #
48
+ # @param name [String] unique name for the throttle
49
+ # @param ttl [Numeric] number of seconds that the throttle will remain active
50
+ # @param limit [Integer] number of allowed requests within the throttle ttl
51
+ # @param redis [Redis, Proc] Redis instance to use or a Proc that yields a Redos instance
52
+ # @return [void]
53
+ def add(name, ttl:, limit:, redis: nil)
45
54
  @lock.synchronize do
46
55
  @throttles ||= {}
47
56
  @throttles[name.to_s] = new(name, limit: limit, ttl: ttl, redis: redis)
@@ -49,6 +58,9 @@ class SimpleThrottle
49
58
  end
50
59
 
51
60
  # Returns a globally defined throttle with the specfied name.
61
+ #
62
+ # @param name [String, Symbol] name of the throttle
63
+ # @return [SimpleThrottle]
52
64
  def [](name)
53
65
  if defined?(@throttles) && @throttles
54
66
  @throttles[name.to_s]
@@ -60,11 +72,17 @@ class SimpleThrottle
60
72
  # it will be invoked at runtime to get the instance. Use this method if your Redis instance
61
73
  # isn't constant (for example if you're in a forking environment and re-initialize connections
62
74
  # on fork)
75
+ #
76
+ # @param client [Redis, Proc]
77
+ # @yieldreturn [Redis]
78
+ # @return [void]
63
79
  def set_redis(client = nil, &block)
64
80
  @redis_client = (client || block)
65
81
  end
66
82
 
67
83
  # Return the Redis instance where the throttles are stored.
84
+ #
85
+ # @return [Redis]
68
86
  def redis
69
87
  @redis_client ||= Redis.new
70
88
  if @redis_client.is_a?(Proc)
@@ -93,11 +111,12 @@ class SimpleThrottle
93
111
 
94
112
  attr_reader :name, :limit, :ttl
95
113
 
96
- # Create a new throttle
114
+ # Create a new throttle.
115
+ #
97
116
  # @param name [String] unique name for the throttle
98
117
  # @param ttl [Numeric] number of seconds that the throttle will remain active
99
118
  # @param limit [Integer] number of allowed requests within the throttle ttl
100
- # @param redis [Redis] Redis client to use
119
+ # @param redis [Redis, Proc] Redis instance to use or a Proc that yields a Redos instance
101
120
  def initialize(name, ttl:, limit:, redis: nil)
102
121
  @name = name.to_s
103
122
  @name = name.dup.freeze unless name.frozen?
@@ -108,17 +127,23 @@ class SimpleThrottle
108
127
 
109
128
  # Returns true if the limit for the throttle has not been reached yet. This method
110
129
  # will also track the throttled resource as having been invoked on each call.
130
+ #
131
+ # @return [Boolean]
111
132
  def allowed!
112
133
  size = current_size(true)
113
134
  size < limit
114
135
  end
115
136
 
116
137
  # Reset a throttle back to zero.
138
+ #
139
+ # @return [void]
117
140
  def reset!
118
141
  redis_client.del(redis_key)
119
142
  end
120
143
 
121
144
  # Peek at the current number for throttled calls being tracked.
145
+ #
146
+ # @return [Integer]
122
147
  def peek
123
148
  current_size(false)
124
149
  end
@@ -126,6 +151,8 @@ class SimpleThrottle
126
151
  # Returns when the next resource call should be allowed. Note that this doesn't guarantee that
127
152
  # calling allow! will return true if the wait time is zero since other processes or threads can
128
153
  # claim the resource.
154
+ #
155
+ # @return [Float]
129
156
  def wait_time
130
157
  if peek < limit
131
158
  0.0
@@ -133,7 +160,7 @@ class SimpleThrottle
133
160
  first = redis_client.lindex(redis_key, 0).to_f / 1000.0
134
161
  delta = Time.now.to_f - first
135
162
  delta = 0.0 if delta < 0
136
- delta
163
+ ttl - delta
137
164
  end
138
165
  end
139
166
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: simple_throttle
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.3
4
+ version: 1.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - We Heart It
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2021-09-14 00:00:00.000000000 Z
12
+ date: 2023-02-10 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: redis