time_window_drop_collector 0.1.15 → 0.3.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.
data/README.md CHANGED
@@ -43,9 +43,9 @@ Can be:
43
43
  twdc.drop( "id1" )
44
44
  twdc.drop( "id1" )
45
45
  twdc.drop( "id2" )
46
- twdc.drop( "id1" )
46
+ twdc.drop( "id1", 4 )
47
47
 
48
- twdc.count( "id1" ) # => 3
48
+ twdc.count( "id1" ) # => 6
49
49
  twdc.count( "id2" ) # => 1
50
50
 
51
51
  # after 10 minutes
@@ -80,3 +80,4 @@ It uses the `Rails.cache` accesible
80
80
  TimeWindowDropCollector.new do
81
81
  client :redis, { :host => "host", :port => "port" }
82
82
  end
83
+
@@ -33,12 +33,12 @@ class TimeWindowDropCollector
33
33
  @storage = TimeWindowDropCollector::Storage.new( wrapper, config[:window], config[:slices] )
34
34
  end
35
35
 
36
- def drop( keys )
36
+ def drop( keys, amount=1 )
37
37
  keys = [keys] unless keys.is_a? Array
38
38
  keys = keys.map(&:to_s)
39
39
 
40
- TimeWindowDropCollector::Logger.log "DROP keys: #{keys.join(", ")}"
41
- storage.incr( keys )
40
+ TimeWindowDropCollector::Logger.log "DROP keys: #{keys.join(", ")}, amount: #{amount}"
41
+ storage.incr( keys, amount )
42
42
  end
43
43
 
44
44
  def count( orig_keys )
@@ -9,8 +9,8 @@ class TimeWindowDropCollector::Storage
9
9
  @slices = slices
10
10
  end
11
11
 
12
- def incr( keys )
13
- wrapper.incr( timestamp_key_multi( keys ), window )
12
+ def incr( keys, amount=1 )
13
+ wrapper.incr( timestamp_key_multi( keys ), window, amount )
14
14
  end
15
15
 
16
16
  def count( keys )
@@ -1,3 +1,3 @@
1
1
  class TimeWindowDropCollector
2
- VERSION = "0.1.15"
2
+ VERSION = "0.3.1"
3
3
  end
@@ -7,10 +7,10 @@ class TimeWindowDropCollector
7
7
  @client = Dalli::Client.new( opts )
8
8
  end
9
9
 
10
- def incr( keys, expire_time )
10
+ def incr( keys, expire_time, amount )
11
11
  client.multi do
12
12
  keys.each do |key|
13
- client.incr( key, 1, expire_time, 1 )
13
+ client.incr( key, amount, expire_time, 1 )
14
14
  end
15
15
  end
16
16
  end
@@ -7,9 +7,9 @@ class TimeWindowDropCollector
7
7
  @client = MemcacheMock.new
8
8
  end
9
9
 
10
- def incr( keys, expire_time )
10
+ def incr( keys, expire_time, amount )
11
11
  keys.each do |key|
12
- client.incr( key, 1, nil, 1 )
12
+ client.incr( key, amount, nil, 1 )
13
13
  end
14
14
  end
15
15
 
@@ -7,9 +7,9 @@ class TimeWindowDropCollector
7
7
  @client = Rails.cache
8
8
  end
9
9
 
10
- def incr( keys, expire_time )
10
+ def incr( keys, expire_time, amount )
11
11
  keys.each do |key|
12
- client.increment( key, 1, :expires_in => expire_time )
12
+ client.increment( key, amount, :expires_in => expire_time )
13
13
  end
14
14
  end
15
15
 
@@ -7,10 +7,10 @@ class TimeWindowDropCollector
7
7
  @client = ::Redis.new( opts )
8
8
  end
9
9
 
10
- def incr( keys, expire_time )
10
+ def incr( keys, expire_time, amount )
11
11
  client.pipelined do
12
12
  keys.each do |key|
13
- client.incr( key )
13
+ client.incrby( key, amount )
14
14
  client.expire( key, expire_time )
15
15
  end
16
16
  end
@@ -9,8 +9,8 @@ class MemcacheWrapperTest < Test::Unit::TestCase
9
9
 
10
10
  def test_incr
11
11
  wrapper = TimeWindowDropCollector::Wrappers::Memcache.new( ["arg1"] )
12
- wrapper.client.expects( :incr ).with( "key", 1, "expire_time", 1 )
13
- wrapper.incr( "key", "expire_time" )
12
+ wrapper.client.expects( :incr ).with( "key", 5, "expire_time", 1 )
13
+ wrapper.incr( "key", "expire_time", 5 )
14
14
  end
15
15
 
16
16
  def test_values_for
@@ -9,9 +9,9 @@ class MockWrapperTest < Test::Unit::TestCase
9
9
 
10
10
  def test_incr
11
11
  wrapper = TimeWindowDropCollector::Wrappers::Mock.new( ["arg1"] )
12
- wrapper.client.expects( :incr ).with( "key1", 1, nil, 1 )
13
- wrapper.client.expects( :incr ).with( "key2", 1, nil, 1 )
14
- wrapper.incr( ["key1", "key2"], "expire_time" )
12
+ wrapper.client.expects( :incr ).with( "key1", 2, nil, 1 )
13
+ wrapper.client.expects( :incr ).with( "key2", 2, nil, 1 )
14
+ wrapper.incr( ["key1", "key2"], "expire_time", 2 )
15
15
  end
16
16
 
17
17
  def test_values_for
@@ -14,10 +14,10 @@ class MemcacheWrapperTest < Test::Unit::TestCase
14
14
 
15
15
  def test_incr
16
16
  wrapper = TimeWindowDropCollector::Wrappers::RailsCache.new( ["arg1"] )
17
- wrapper.client.expects( :increment ).with( "key1", 1, :expires_in => "expire_time" )
18
- wrapper.client.expects( :increment ).with( "key2", 1, :expires_in => "expire_time" )
17
+ wrapper.client.expects( :increment ).with( "key1", 5, :expires_in => "expire_time" )
18
+ wrapper.client.expects( :increment ).with( "key2", 5, :expires_in => "expire_time" )
19
19
 
20
- wrapper.incr( ["key1", "key2"], "expire_time" )
20
+ wrapper.incr( ["key1", "key2"], "expire_time", 5 )
21
21
  end
22
22
 
23
23
  def test_values_for
@@ -4,7 +4,7 @@ class RedisMock
4
4
  def multi
5
5
  yield
6
6
  end
7
- def incr(key);end
7
+ def incrby(key,amount);end
8
8
  def expire(key);end
9
9
  def mget(keys);end
10
10
  def pipelined
@@ -24,13 +24,13 @@ class RedisWrapperTest < Test::Unit::TestCase
24
24
  Redis.expects( :new ).returns( RedisMock.new )
25
25
  wrapper = TimeWindowDropCollector::Wrappers::Redis.new( nil )
26
26
 
27
- wrapper.client.expects( :incr ).with( "key1" )
27
+ wrapper.client.expects( :incrby ).with( "key1", 10 )
28
28
  wrapper.client.expects( :expire ).with( "key1", "expire_time" )
29
29
 
30
- wrapper.client.expects( :incr ).with( "key2" )
30
+ wrapper.client.expects( :incrby ).with( "key2", 10 )
31
31
  wrapper.client.expects( :expire ).with( "key2", "expire_time" )
32
32
 
33
- wrapper.incr( ["key1", "key2"], "expire_time" )
33
+ wrapper.incr( ["key1", "key2"], "expire_time", 10 )
34
34
  end
35
35
 
36
36
  def test_incr_agregates_commands_under_pipelined
@@ -39,7 +39,7 @@ class RedisWrapperTest < Test::Unit::TestCase
39
39
 
40
40
  wrapper.client.expects( :pipelined )
41
41
 
42
- wrapper.incr( nil, nil )
42
+ wrapper.incr( nil, nil, nil )
43
43
  end
44
44
 
45
45
  def test_get
data/test/storage_test.rb CHANGED
@@ -37,11 +37,18 @@ class StorageTest < Test::Unit::TestCase
37
37
 
38
38
  def test_incr
39
39
  @storage.expects( :timestamp_key_multi ).with( ["keys"] ).returns( "timestamp_keys" )
40
- @wrapper.expects( :incr ).with( "timestamp_keys", 600 )
40
+ @wrapper.expects( :incr ).with( "timestamp_keys", 600, 1 )
41
41
 
42
42
  @storage.incr( ["keys"] )
43
43
  end
44
44
 
45
+ def test_incr_with_val
46
+ @storage.expects( :timestamp_key_multi ).with( ["keys"] ).returns( "timestamp_keys" )
47
+ @wrapper.expects( :incr ).with( "timestamp_keys", 600, 30.5 )
48
+
49
+ @storage.incr( ["keys"], 30.5 )
50
+ end
51
+
45
52
  def test_count
46
53
  @storage.expects( :window_keys_multi ).with( "keys" ).returns( "window_keys" )
47
54
  @wrapper.expects( :get ).with( "window_keys" ).returns( "keys_values" )
@@ -33,7 +33,7 @@ class TimeWindowDropCollectorTest < Test::Unit::TestCase
33
33
 
34
34
  def test_drop
35
35
  storage = mock()
36
- storage.expects( :incr ).with( ["key"] )
36
+ storage.expects( :incr ).with( ["key"], 1 )
37
37
 
38
38
  twdc = TimeWindowDropCollector.new
39
39
  twdc.stubs( :storage ).returns( storage )
@@ -41,6 +41,16 @@ class TimeWindowDropCollectorTest < Test::Unit::TestCase
41
41
  twdc.drop( "key" )
42
42
  end
43
43
 
44
+ def test_drop_with_custom_amount
45
+ storage = mock()
46
+ storage.expects( :incr ).with( ["key"], 15 )
47
+
48
+ twdc = TimeWindowDropCollector.new
49
+ twdc.stubs( :storage ).returns( storage )
50
+
51
+ twdc.drop( "key", 15 )
52
+ end
53
+
44
54
  def test_count
45
55
  storage = mock()
46
56
  storage.expects( :count ).with( ["key"] ).returns( { "key" => 10 } )
@@ -18,7 +18,7 @@ Gem::Specification.new do |s|
18
18
  s.executables = `git ls-files -- bin/*`.split( "\n" ).map{ |f| File.basename( f ) }
19
19
  s.require_paths = ["lib"]
20
20
 
21
- s.add_development_dependency "bundler", "1.0.21"
21
+ s.add_development_dependency "bundler"
22
22
  s.add_development_dependency "rake", "0.9.2.2"
23
23
  s.add_development_dependency "mocha", "0.10.0"
24
24
  s.add_development_dependency "delorean", "1.2.0"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: time_window_drop_collector
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.15
4
+ version: 0.3.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,22 +10,22 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2012-02-14 00:00:00.000000000Z
13
+ date: 2012-12-19 00:00:00.000000000Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: bundler
17
- requirement: &70206581150800 !ruby/object:Gem::Requirement
17
+ requirement: &70353016535360 !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
- - - =
20
+ - - ! '>='
21
21
  - !ruby/object:Gem::Version
22
- version: 1.0.21
22
+ version: '0'
23
23
  type: :development
24
24
  prerelease: false
25
- version_requirements: *70206581150800
25
+ version_requirements: *70353016535360
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: rake
28
- requirement: &70206581150300 !ruby/object:Gem::Requirement
28
+ requirement: &70353016534860 !ruby/object:Gem::Requirement
29
29
  none: false
30
30
  requirements:
31
31
  - - =
@@ -33,10 +33,10 @@ dependencies:
33
33
  version: 0.9.2.2
34
34
  type: :development
35
35
  prerelease: false
36
- version_requirements: *70206581150300
36
+ version_requirements: *70353016534860
37
37
  - !ruby/object:Gem::Dependency
38
38
  name: mocha
39
- requirement: &70206581149840 !ruby/object:Gem::Requirement
39
+ requirement: &70353016534360 !ruby/object:Gem::Requirement
40
40
  none: false
41
41
  requirements:
42
42
  - - =
@@ -44,10 +44,10 @@ dependencies:
44
44
  version: 0.10.0
45
45
  type: :development
46
46
  prerelease: false
47
- version_requirements: *70206581149840
47
+ version_requirements: *70353016534360
48
48
  - !ruby/object:Gem::Dependency
49
49
  name: delorean
50
- requirement: &70206581149380 !ruby/object:Gem::Requirement
50
+ requirement: &70353016533900 !ruby/object:Gem::Requirement
51
51
  none: false
52
52
  requirements:
53
53
  - - =
@@ -55,10 +55,10 @@ dependencies:
55
55
  version: 1.2.0
56
56
  type: :development
57
57
  prerelease: false
58
- version_requirements: *70206581149380
58
+ version_requirements: *70353016533900
59
59
  - !ruby/object:Gem::Dependency
60
60
  name: memcache_mock
61
- requirement: &70206581148920 !ruby/object:Gem::Requirement
61
+ requirement: &70353016533440 !ruby/object:Gem::Requirement
62
62
  none: false
63
63
  requirements:
64
64
  - - =
@@ -66,10 +66,10 @@ dependencies:
66
66
  version: 0.0.1
67
67
  type: :development
68
68
  prerelease: false
69
- version_requirements: *70206581148920
69
+ version_requirements: *70353016533440
70
70
  - !ruby/object:Gem::Dependency
71
71
  name: dalli
72
- requirement: &70206581148540 !ruby/object:Gem::Requirement
72
+ requirement: &70353016533060 !ruby/object:Gem::Requirement
73
73
  none: false
74
74
  requirements:
75
75
  - - ! '>='
@@ -77,7 +77,7 @@ dependencies:
77
77
  version: '0'
78
78
  type: :runtime
79
79
  prerelease: false
80
- version_requirements: *70206581148540
80
+ version_requirements: *70353016533060
81
81
  description: Counter storage system for a concrete time window
82
82
  email:
83
83
  - fguillen.mail@gmail.com