prop 0.6.5 → 0.6.6

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.
Files changed (4) hide show
  1. data/lib/prop.rb +8 -8
  2. data/prop.gemspec +2 -2
  3. data/test/test_prop.rb +14 -0
  4. metadata +22 -23
data/lib/prop.rb CHANGED
@@ -7,7 +7,7 @@ class Object
7
7
  end
8
8
 
9
9
  class Prop
10
- VERSION = "0.6.5"
10
+ VERSION = "0.6.6"
11
11
 
12
12
  class RateLimitExceededError < RuntimeError
13
13
  attr_accessor :handle, :retry_after, :description
@@ -54,7 +54,7 @@ class Prop
54
54
 
55
55
  def throttle!(handle, key = nil, options = {})
56
56
  options = sanitized_prop_options(handle, key, options)
57
- cache_key = sanitized_prop_key(key, options[:interval])
57
+ cache_key = sanitized_prop_key(handle, key, options)
58
58
  counter = reader.call(cache_key).to_i
59
59
 
60
60
  return counter if disabled?
@@ -68,21 +68,21 @@ class Prop
68
68
 
69
69
  def throttled?(handle, key = nil, options = {})
70
70
  options = sanitized_prop_options(handle, key, options)
71
- cache_key = sanitized_prop_key(key, options[:interval])
71
+ cache_key = sanitized_prop_key(handle, key, options)
72
72
 
73
73
  reader.call(cache_key).to_i >= options[:threshold]
74
74
  end
75
75
 
76
76
  def reset(handle, key = nil, options = {})
77
77
  options = sanitized_prop_options(handle, key, options)
78
- cache_key = sanitized_prop_key(key, options[:interval])
78
+ cache_key = sanitized_prop_key(handle, key, options)
79
79
 
80
80
  writer.call(cache_key, 0)
81
81
  end
82
82
 
83
83
  def query(handle, key = nil, options = {})
84
84
  options = sanitized_prop_options(handle, key, options)
85
- cache_key = sanitized_prop_key(key, options[:interval])
85
+ cache_key = sanitized_prop_key(handle, key, options)
86
86
 
87
87
  reader.call(cache_key).to_i
88
88
  end
@@ -91,9 +91,9 @@ class Prop
91
91
  private
92
92
 
93
93
  # Builds the expiring cache key
94
- def sanitized_prop_key(key, interval)
95
- window = (Time.now.to_i / interval)
96
- cache_key = "#{normalize_cache_key(key)}/#{ window }"
94
+ def sanitized_prop_key(handle, key, options)
95
+ window = (Time.now.to_i / options[:interval])
96
+ cache_key = normalize_cache_key([handle, key, window])
97
97
  "prop/#{Digest::MD5.hexdigest(cache_key)}"
98
98
  end
99
99
 
data/prop.gemspec CHANGED
@@ -13,8 +13,8 @@ Gem::Specification.new do |s|
13
13
  ## If your rubyforge_project name is different, then edit it and comment out
14
14
  ## the sub! line in the Rakefile
15
15
  s.name = 'prop'
16
- s.version = '0.6.5'
17
- s.date = '2011-12-13'
16
+ s.version = '0.6.6'
17
+ s.date = '2012-03-31'
18
18
  s.rubyforge_project = 'prop'
19
19
 
20
20
  ## Make sure your summary is short. The description may be as long
data/test/test_prop.rb CHANGED
@@ -179,5 +179,19 @@ class TestProp < Test::Unit::TestCase
179
179
  end
180
180
  end
181
181
 
182
+ context 'different handles with the same interval' do
183
+ setup do
184
+ Prop.configure(:api_requests, :threshold => 100, :interval => 30)
185
+ Prop.configure(:login_attempts, :threshold => 10, :interval => 30)
186
+ end
187
+
188
+ should 'be counted separately' do
189
+ user_id = 42
190
+ Prop.throttle!(:api_requests, user_id)
191
+ assert_equal(1, Prop.count(:api_requests, user_id))
192
+ assert_equal(0, Prop.count(:login_attempts, user_id))
193
+ end
194
+ end
195
+
182
196
  end
183
197
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: prop
3
3
  version: !ruby/object:Gem::Version
4
- hash: 13
4
+ hash: 11
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 6
9
- - 5
10
- version: 0.6.5
9
+ - 6
10
+ version: 0.6.6
11
11
  platform: ruby
12
12
  authors:
13
13
  - Morten Primdahl
@@ -15,13 +15,12 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-12-13 00:00:00 -08:00
19
- default_executable:
18
+ date: 2012-03-31 00:00:00 Z
20
19
  dependencies:
21
20
  - !ruby/object:Gem::Dependency
22
21
  name: rake
23
- type: :development
24
- version_requirements: &id001 !ruby/object:Gem::Requirement
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
25
24
  none: false
26
25
  requirements:
27
26
  - - ">="
@@ -30,12 +29,12 @@ dependencies:
30
29
  segments:
31
30
  - 0
32
31
  version: "0"
33
- prerelease: false
34
- requirement: *id001
32
+ type: :development
33
+ version_requirements: *id001
35
34
  - !ruby/object:Gem::Dependency
36
35
  name: bundler
37
- type: :development
38
- version_requirements: &id002 !ruby/object:Gem::Requirement
36
+ prerelease: false
37
+ requirement: &id002 !ruby/object:Gem::Requirement
39
38
  none: false
40
39
  requirements:
41
40
  - - ">="
@@ -44,12 +43,12 @@ dependencies:
44
43
  segments:
45
44
  - 0
46
45
  version: "0"
47
- prerelease: false
48
- requirement: *id002
46
+ type: :development
47
+ version_requirements: *id002
49
48
  - !ruby/object:Gem::Dependency
50
49
  name: shoulda
51
- type: :development
52
- version_requirements: &id003 !ruby/object:Gem::Requirement
50
+ prerelease: false
51
+ requirement: &id003 !ruby/object:Gem::Requirement
53
52
  none: false
54
53
  requirements:
55
54
  - - ">="
@@ -58,12 +57,12 @@ dependencies:
58
57
  segments:
59
58
  - 0
60
59
  version: "0"
61
- prerelease: false
62
- requirement: *id003
60
+ type: :development
61
+ version_requirements: *id003
63
62
  - !ruby/object:Gem::Dependency
64
63
  name: mocha
65
- type: :development
66
- version_requirements: &id004 !ruby/object:Gem::Requirement
64
+ prerelease: false
65
+ requirement: &id004 !ruby/object:Gem::Requirement
67
66
  none: false
68
67
  requirements:
69
68
  - - ">="
@@ -72,8 +71,8 @@ dependencies:
72
71
  segments:
73
72
  - 0
74
73
  version: "0"
75
- prerelease: false
76
- requirement: *id004
74
+ type: :development
75
+ version_requirements: *id004
77
76
  description: Gem for implementing rate limits.
78
77
  email: primdahl@me.com
79
78
  executables: []
@@ -92,7 +91,6 @@ files:
92
91
  - prop.gemspec
93
92
  - test/helper.rb
94
93
  - test/test_prop.rb
95
- has_rdoc: true
96
94
  homepage: http://github.com/morten/prop
97
95
  licenses: []
98
96
 
@@ -122,9 +120,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
122
120
  requirements: []
123
121
 
124
122
  rubyforge_project: prop
125
- rubygems_version: 1.5.3
123
+ rubygems_version: 1.8.15
126
124
  signing_key:
127
125
  specification_version: 2
128
126
  summary: Gem for implementing rate limits.
129
127
  test_files:
130
128
  - test/test_prop.rb
129
+ has_rdoc: