ratelimit 1.0.0 → 1.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
  SHA1:
3
- metadata.gz: d3469b758aeb6c99ad1c09a4d29592c577fa763d
4
- data.tar.gz: 99d79d9a382c81ed8ac69cd3b296423768d6d70e
3
+ metadata.gz: 0e82db7b9218b7b7df79470dc1220e90df8f5bc2
4
+ data.tar.gz: 73ab3802584dd987f5cb944335e37958ebdcad08
5
5
  SHA512:
6
- metadata.gz: 5c4de3a5f289954c3739da0b7741cc20aa98c03f052a5cc91ab175155551ce3f64c572bb49266563392dea094f32b5a2b8cc095b7731d37cf3f9c7aa0143b840
7
- data.tar.gz: 58bb9fb868721df9c6c03475300be40c22288260b612f562d69ee06cadb9e6ba015292349a80f500b6ad47d4b220641a96af6d3eeddebcd531c24625efdbf9f4
6
+ metadata.gz: cef293468c29242233d60053461d244ef025d85eb3b593684ec8ec7de76c9eb40c12a625532225aa27e14e77c5c9a83410400c5c909b983c43eda4f44c9ec87f
7
+ data.tar.gz: 71029040e9883fb9949b08d47cb69abcef9d9b93a02a42758c22bffffa67b3c41db617e6a8ef80baadbd500b5410b9deb2541c0bde4d697efa4b5082c06b5665
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- ruby-2.1.1
1
+ ruby-2.1.2
data/CHANGELOG.md ADDED
@@ -0,0 +1,19 @@
1
+ # 1.0.0 06/15/2014
2
+
3
+
4
+ * #7 Allow adding more than one to a counter - @Nielsomat
5
+ * #8 Add Ruby 2 support and remove Ruby 1.8 support
6
+ * #6 Clean up initialization method
7
+ * #11 Optimize Redis Commits - @lautis
8
+ * #10 Add a return value - @lautis
9
+
10
+
11
+ # 0.0.3 11/08/2011
12
+
13
+ * Allow non-string subject and key -- Thanks Alexey Noskov
14
+ Fix for bucket_expiry allowed to be larger than bucket_span and causing bad results -- Thanks Alexey Noskov
15
+
16
+
17
+ # 0.0.2 10/29/2011
18
+
19
+ Initial Relase
data/README.md CHANGED
@@ -1,8 +1,8 @@
1
1
  # Ratelimit: Slow your roll
2
2
 
3
- [![Build Status](https://secure.travis-ci.org/ejfinneran/ratelimit.png?branch=master)](http://travis-ci.org/ejfinneran/ratelimit)
4
- [![Code Climate](https://codeclimate.com/github/ejfinneran/ratelimit.png)](https://codeclimate.com/github/ejfinneran/ratelimit)
5
- [![Coverage Status](https://coveralls.io/repos/ejfinneran/ratelimit/badge.png)](https://coveralls.io/r/ejfinneran/ratelimit)
3
+ [![Build Status](https://secure.travis-ci.org/ejfinneran/ratelimit.svg?branch=master)](http://travis-ci.org/ejfinneran/ratelimit)
4
+ [![Code Climate](https://img.shields.io/codeclimate/github/ejfinneran/ratelimit.svg)](https://codeclimate.com/github/ejfinneran/ratelimit)
5
+ [![Coverage Status](https://img.shields.io/coveralls/ejfinneran/ratelimit.svg)](https://coveralls.io/r/ejfinneran/ratelimit)
6
6
 
7
7
  Ratelimit provides a way to rate limit actions across multiple servers using Redis. This is a port of RateLimit.js found [here](https://github.com/chriso/redback/blob/master/lib/advanced_structures/RateLimit.js) and inspired by [this post](http://chris6f.com/rate-limiting-with-redis).
8
8
 
@@ -11,15 +11,21 @@ Ratelimit provides a way to rate limit actions across multiple servers using Red
11
11
 
12
12
  Add this line to your application's Gemfile:
13
13
 
14
- gem 'ratelimit'
14
+ ``` rb
15
+ gem 'ratelimit'
16
+ ```
15
17
 
16
18
  And then execute:
17
19
 
18
- $ bundle
20
+ ``` sh
21
+ $ bundle
22
+ ```
19
23
 
20
24
  Or install it yourself as:
21
25
 
22
- $ gem install ratelimit
26
+ ``` sh
27
+ $ gem install ratelimit
28
+ ```
23
29
 
24
30
  ## Usage
25
31
 
@@ -29,25 +35,31 @@ Add to the count for a given subject via add with a unique key. I've used the ex
29
35
 
30
36
  You can then fetch the number of executions for given interval in seconds via the count method.
31
37
 
32
- ratelimit = Ratelimit.new("messages")
33
- 5.times do
34
- ratelimit.add(phone_number)
35
- end
36
- ratelimit.count(phone_number, 30)
37
- => 5
38
+ ``` rb
39
+ ratelimit = Ratelimit.new("messages")
40
+ 5.times do
41
+ ratelimit.add(phone_number)
42
+ end
43
+ ratelimit.count(phone_number, 30)
44
+ # => 5
45
+ ```
38
46
 
39
47
  You can check if a given threshold has been exceeded or not. The following code checks if the currently rate is over 10 executions in the last 30 seconds or not.
40
48
 
41
- ratelimit.exceeded?(phone_number, {:threshold => 10, :interval => 30})
42
- => false
43
- ratelimit.within_bounds?(phone_number, {:threshold => 10, :interval => 30})
44
- => true
49
+ ``` rb
50
+ ratelimit.exceeded?(phone_number, threshold: 10, interval: 30)
51
+ # => false
52
+ ratelimit.within_bounds?(phone_number, threshold: 10, interval: 30)
53
+ # => true
54
+ ```
45
55
 
46
56
  You can also pass a block that will only get executed if the given threshold is within bounds. Beware, this code blocks until the block can be run.
47
57
 
48
- ratelimit.exec_within_threshold(phone_number, {:threshold => 10, :interval => 30}) do
49
- some_rate_limited_code
50
- end
58
+ ``` rb
59
+ ratelimit.exec_within_threshold phone_number, threshold: 10, interval: 30 do
60
+ some_rate_limited_code
61
+ end
62
+ ```
51
63
 
52
64
  ## Documentation
53
65
 
data/lib/ratelimit.rb CHANGED
@@ -56,8 +56,8 @@ class Ratelimit
56
56
  count = (interval / @bucket_interval).floor
57
57
  subject = "#{@key}:#{subject}"
58
58
 
59
- keys = (0..count).map do |i|
60
- (bucket - i + @bucket_count) % @bucket_count
59
+ keys = (0..count - 1).map do |i|
60
+ (bucket - i) % @bucket_count
61
61
  end
62
62
  return redis.hmget(subject, *keys).inject(0) {|a, i| a + i.to_i}
63
63
  end
@@ -1,3 +1,3 @@
1
1
  class Ratelimit
2
- VERSION = "1.0.0"
2
+ VERSION = "1.0.1"
3
3
  end
@@ -92,4 +92,12 @@ describe Ratelimit do
92
92
  end
93
93
  expect(@value).to be 1
94
94
  end
95
+
96
+
97
+ it "counts correclty if bucket_span equals count-interval " do
98
+ @r = Ratelimit.new("key", {:bucket_span => 10, bucket_interval: 1})
99
+ @r.add('value1')
100
+ expect(@r.count('value1', 10)).to eql(1)
101
+ end
102
+
95
103
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ratelimit
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - E.J. Finneran
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-06-15 00:00:00.000000000 Z
11
+ date: 2014-08-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: redis
@@ -164,7 +164,7 @@ files:
164
164
  - ".ruby-gemset"
165
165
  - ".ruby-version"
166
166
  - ".travis.yml"
167
- - CHANGELOG
167
+ - CHANGELOG.md
168
168
  - Gemfile
169
169
  - LICENSE.txt
170
170
  - README.md
data/CHANGELOG DELETED
@@ -1,11 +0,0 @@
1
- 0.0.2 10/29/2011 38422666592c32dc079fd46bb41b5f526a7cf1d2
2
- =========================================================
3
-
4
- Initial Relase
5
-
6
-
7
- 0.0.3 11/08/2011 b5b81dcc488f231b6a7abbdeb87c7ddf247b4029
8
- =========================================================
9
-
10
- Allow non-string subject and key -- Thanks Alexey Noskov
11
- Fix for bucket_expiry allowed to be larger than bucket_span and causing bad results -- Thanks Alexey Noskov