time_window_drop_collector 0.1.15 → 0.3.1

Sign up to get free protection for your applications and to get access to all the features.
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