time_window_drop_collector 0.3.2 → 0.3.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 34b9b2de8a482fd8222318926c3e386f55a73b17
4
+ data.tar.gz: b813b99402ffc1a28c55cb5e972775667e30a1e2
5
+ SHA512:
6
+ metadata.gz: 699bf75c79b1e6eab0ce40f52bdff4c6ed913b3a7005f058a8d29770636b892d4469e8915069b02a68466ed1140522c94a44ad0713dc093ef1417035e14b7326
7
+ data.tar.gz: 05a93a25754cc7c977d206de6d79b21bc0158cb9feceb2656d5c52cb628ec7a195ca2a1a0d5523d81ae2cb40cf0ac465241d482e7647a3d67d6b87ac1239832f
data/Gemfile CHANGED
@@ -1,2 +1,2 @@
1
- source :rubygems
1
+ source 'https://rubygems.org'
2
2
  gemspec
data/README.md CHANGED
@@ -43,11 +43,14 @@ Can be:
43
43
  twdc.drop( "id1" )
44
44
  twdc.drop( "id1" )
45
45
  twdc.drop( "id2" )
46
- twdc.drop( "id1", 4 )
46
+ ts = twdc.drop( "id1", 4 )
47
47
 
48
48
  twdc.count( "id1" ) # => 6
49
49
  twdc.count( "id2" ) # => 1
50
50
 
51
+ twdc.pick( ts, "id1", 2)
52
+ twdc.count( "id1" ) # => 4
53
+
51
54
  # after 10 minutes
52
55
  twdc.count( "id1" ) # => 0
53
56
 
@@ -41,6 +41,15 @@ class TimeWindowDropCollector
41
41
  storage.incr( keys, amount )
42
42
  end
43
43
 
44
+ def pick( time, keys, amount=1)
45
+ keys = [keys] unless keys.is_a? Array
46
+ keys = keys.map(&:to_s)
47
+
48
+ TimeWindowDropCollector::Logger.log "PICK keys: #{keys.join(", ")}, amount: #{amount}"
49
+
50
+ storage.decr( time, keys, amount )
51
+ end
52
+
44
53
  def count( orig_keys )
45
54
  keys = orig_keys.is_a?(Array) ? orig_keys : [orig_keys]
46
55
  keys = keys.map(&:to_s)
@@ -10,7 +10,13 @@ class TimeWindowDropCollector::Storage
10
10
  end
11
11
 
12
12
  def incr( keys, amount=1 )
13
- wrapper.incr( timestamp_key_multi( keys ), window, amount )
13
+ now = Time.now
14
+ wrapper.incr( timestamp_key_multi( keys, now), window, amount )
15
+ now
16
+ end
17
+
18
+ def decr( timestamp, keys, amount=1 )
19
+ wrapper.decr(timestamp_key_multi( keys, timestamp), window, amount)
14
20
  end
15
21
 
16
22
  def count( keys )
@@ -21,4 +27,4 @@ class TimeWindowDropCollector::Storage
21
27
 
22
28
  grouping_count( keys_values )
23
29
  end
24
- end
30
+ end
@@ -15,22 +15,18 @@ module TimeWindowDropCollector::Utils
15
15
  "drop_window_#{key}_#{slice_start_timestamp( time )}"
16
16
  end
17
17
 
18
- def timestamp_key_multi( keys )
19
- now = timestamp
20
-
21
- keys.map { |key| timestamp_key( key, now ) }.flatten
18
+ def timestamp_key_multi( keys, time = timestamp)
19
+ keys.map { |key| timestamp_key( key, time) }.flatten
22
20
  end
23
21
 
24
- def window_keys( key, now = timestamp )
22
+ def window_keys( key, time = timestamp )
25
23
  ( 0..( slices - 1 ) ).map{ |i|
26
- timestamp_key( key, now - ( ( i*slice_milliseconds ) / 1000 ) )
24
+ timestamp_key( key, time - ( ( i*slice_milliseconds ) / 1000 ) )
27
25
  }
28
26
  end
29
27
 
30
28
  def window_keys_multi( keys )
31
- now = timestamp
32
-
33
- keys.map { |key| window_keys( key, now ) }.flatten
29
+ keys.map { |key| window_keys( key ) }.flatten
34
30
  end
35
31
 
36
32
  def timestamp
@@ -46,4 +42,4 @@ module TimeWindowDropCollector::Utils
46
42
 
47
43
  ( time_milliseconds / slice_milliseconds ) * slice_milliseconds
48
44
  end
49
- end
45
+ end
@@ -1,3 +1,3 @@
1
1
  class TimeWindowDropCollector
2
- VERSION = "0.3.2"
2
+ VERSION = "0.3.3"
3
3
  end
@@ -15,6 +15,14 @@ class TimeWindowDropCollector
15
15
  end
16
16
  end
17
17
 
18
+ def decr( keys, expire_time, amount )
19
+ client.multi do
20
+ keys.each do |key|
21
+ client.decr( key, amount, expire_time, -1 )
22
+ end
23
+ end
24
+ end
25
+
18
26
  def get( keys )
19
27
  client.get_multi( keys )
20
28
  end
@@ -1,25 +1,31 @@
1
1
  class TimeWindowDropCollector
2
- module Wrappers
3
- class Mock
4
- attr_reader :client
2
+ module Wrappers
3
+ class Mock
4
+ attr_reader :client
5
5
 
6
- def initialize( opts )
7
- @client = MemcacheMock.new
8
- end
6
+ def initialize( opts )
7
+ @client = MemcacheMock.new
8
+ end
9
9
 
10
- def incr( keys, expire_time, amount )
11
- keys.each do |key|
12
- client.incr( key, amount, nil, 1 )
13
- end
14
- end
10
+ def incr( keys, expire_time, amount )
11
+ keys.each do |key|
12
+ client.incr( key, amount, nil, 1 )
13
+ end
14
+ end
15
15
 
16
- def get( keys )
17
- client.get_multi( keys )
18
- end
16
+ def decr( keys, expire_time, amount )
17
+ keys.each do |key|
18
+ client.decr( key, amount, nil, -1 )
19
+ end
20
+ end
21
+
22
+ def get( keys )
23
+ client.get_multi( keys )
24
+ end
19
25
 
20
26
  def reset
21
27
  client.flush
22
28
  end
23
- end
24
- end
25
- end
29
+ end
30
+ end
31
+ end
@@ -1,26 +1,32 @@
1
1
  class TimeWindowDropCollector
2
- module Wrappers
3
- class RailsCache
4
- attr_reader :client
2
+ module Wrappers
3
+ class RailsCache
4
+ attr_reader :client
5
5
 
6
- def initialize( opts )
7
- @client = Rails.cache
8
- end
6
+ def initialize( opts )
7
+ @client = Rails.cache
8
+ end
9
9
 
10
- def incr( keys, expire_time, amount )
11
- keys.each do |key|
12
- client.increment( key, amount, :expires_in => expire_time )
13
- end
14
- end
10
+ def incr( keys, expire_time, amount )
11
+ keys.each do |key|
12
+ client.increment( key, amount, :expires_in => expire_time )
13
+ end
14
+ end
15
15
 
16
- def get( keys )
17
- client.read_multi( keys )
18
- end
16
+ def decr( keys, expire_time, amount )
17
+ keys.each do |key|
18
+ client.decrement( key, amount, :expires_in => expire_time )
19
+ end
20
+ end
21
+
22
+ def get( keys )
23
+ client.read_multi( keys )
24
+ end
19
25
 
20
26
  def reset
21
27
  client.reset
22
28
  end
23
- end
24
- end
29
+ end
30
+ end
25
31
  end
26
32
 
@@ -1,23 +1,32 @@
1
1
  class TimeWindowDropCollector
2
2
  module Wrappers
3
3
  class Redis
4
- attr_reader :client
4
+ attr_reader :client
5
5
 
6
6
  def initialize( opts )
7
7
  @client = ::Redis.new( opts )
8
8
  end
9
9
 
10
- def incr( keys, expire_time, amount )
10
+ def incr( keys, expire_time, amount )
11
11
  client.pipelined do
12
12
  keys.each do |key|
13
13
  client.incrby( key, amount )
14
14
  client.expire( key, expire_time )
15
15
  end
16
16
  end
17
- end
17
+ end
18
18
 
19
- def get( keys )
20
- values = client.mget( *keys )
19
+ def decr( keys, expire_time, amount )
20
+ client.pipelined do
21
+ keys.each do |key|
22
+ client.decrby( key, amount )
23
+ client.expire( key, expire_time )
24
+ end
25
+ end
26
+ end
27
+
28
+ def get( keys )
29
+ values = client.mget( *keys )
21
30
 
22
31
  result = {}
23
32
 
@@ -26,12 +35,12 @@ class TimeWindowDropCollector
26
35
  end
27
36
 
28
37
  result
29
- end
38
+ end
30
39
 
31
40
  def reset
32
41
  client.quit
33
42
  end
34
- end
43
+ end
35
44
  end
36
45
  end
37
46
 
@@ -12,4 +12,10 @@ class MemcacheWrapperTest < Test::Unit::TestCase
12
12
  wrapper.client.expects( :incr ).with( "key", 5, "expire_time", 1)
13
13
  wrapper.incr( ["key"], "expire_time", 5 )
14
14
  end
15
- end
15
+
16
+ def test_decr
17
+ wrapper = TimeWindowDropCollector::Wrappers::Memcache.new( ["arg1"] )
18
+ wrapper.client.expects( :decr ).with( "key", 5, "expire_time", -1)
19
+ wrapper.decr( ["key"], "expire_time", 5 )
20
+ end
21
+ end
@@ -14,6 +14,13 @@ class MockWrapperTest < Test::Unit::TestCase
14
14
  wrapper.incr( ["key1", "key2"], "expire_time", 2 )
15
15
  end
16
16
 
17
+ def test_decr
18
+ wrapper = TimeWindowDropCollector::Wrappers::Mock.new( ["arg1"] )
19
+ wrapper.client.expects( :decr ).with( "key1", 2, nil, -1 )
20
+ wrapper.client.expects( :decr ).with( "key2", 2, nil, -1 )
21
+ wrapper.decr( ["key1", "key2"], "expire_time", 2 )
22
+ end
23
+
17
24
  def test_values_for
18
25
  wrapper = TimeWindowDropCollector::Wrappers::Mock.new( ["arg1"] )
19
26
  wrapper.client.expects( :get_multi ).with( "keys" ).returns( "keys_values" )
@@ -25,4 +32,4 @@ class MockWrapperTest < Test::Unit::TestCase
25
32
  wrapper.client.expects( :flush )
26
33
  wrapper.reset
27
34
  end
28
- end
35
+ end
@@ -20,6 +20,14 @@ class MemcacheWrapperTest < Test::Unit::TestCase
20
20
  wrapper.incr( ["key1", "key2"], "expire_time", 5 )
21
21
  end
22
22
 
23
+ def test_decr
24
+ wrapper = TimeWindowDropCollector::Wrappers::RailsCache.new( ["arg1"] )
25
+ wrapper.client.expects( :decrement ).with( "key1", 5, :expires_in => "expire_time" )
26
+ wrapper.client.expects( :decrement ).with( "key2", 5, :expires_in => "expire_time" )
27
+
28
+ wrapper.decr( ["key1", "key2"], "expire_time", 5 )
29
+ end
30
+
23
31
  def test_values_for
24
32
  wrapper = TimeWindowDropCollector::Wrappers::RailsCache.new( ["arg1"] )
25
33
  wrapper.client.expects( :read_multi ).with( "keys" ).returns( "keys_values" )
@@ -31,4 +39,4 @@ class MemcacheWrapperTest < Test::Unit::TestCase
31
39
  wrapper.client.expects( :reset )
32
40
  wrapper.reset
33
41
  end
34
- end
42
+ end
@@ -33,6 +33,19 @@ class RedisWrapperTest < Test::Unit::TestCase
33
33
  wrapper.incr( ["key1", "key2"], "expire_time", 10 )
34
34
  end
35
35
 
36
+ def test_decr
37
+ Redis.expects( :new ).returns( RedisMock.new )
38
+ wrapper = TimeWindowDropCollector::Wrappers::Redis.new( nil )
39
+
40
+ wrapper.client.expects( :decrby ).with( "key1", 10 )
41
+ wrapper.client.expects( :expire ).with( "key1", "expire_time" )
42
+
43
+ wrapper.client.expects( :decrby ).with( "key2", 10 )
44
+ wrapper.client.expects( :expire ).with( "key2", "expire_time" )
45
+
46
+ wrapper.decr( ["key1", "key2"], "expire_time", 10 )
47
+ end
48
+
36
49
  def test_incr_agregates_commands_under_pipelined
37
50
  Redis.expects( :new ).returns( RedisMock.new )
38
51
  wrapper = TimeWindowDropCollector::Wrappers::Redis.new( nil )
@@ -59,4 +72,4 @@ class RedisWrapperTest < Test::Unit::TestCase
59
72
  wrapper.reset
60
73
  end
61
74
 
62
- end
75
+ end
@@ -36,17 +36,35 @@ class StorageTest < Test::Unit::TestCase
36
36
  end
37
37
 
38
38
  def test_incr
39
- @storage.expects( :timestamp_key_multi ).with( ["keys"] ).returns( "timestamp_keys" )
39
+ Time.expects(:now).returns('now')
40
+ @storage.expects( :timestamp_key_multi ).with( ["keys"], 'now' ).returns( "timestamp_keys" )
40
41
  @wrapper.expects( :incr ).with( "timestamp_keys", 600, 1 )
41
42
 
42
- @storage.incr( ["keys"] )
43
+ result = @storage.incr( ["keys"] )
44
+ assert_equal result, 'now'
43
45
  end
44
46
 
45
47
  def test_incr_with_val
46
- @storage.expects( :timestamp_key_multi ).with( ["keys"] ).returns( "timestamp_keys" )
48
+ Time.expects(:now).returns('now')
49
+ @storage.expects( :timestamp_key_multi ).with( ["keys"], 'now' ).returns( "timestamp_keys" )
47
50
  @wrapper.expects( :incr ).with( "timestamp_keys", 600, 30.5 )
48
51
 
49
- @storage.incr( ["keys"], 30.5 )
52
+ result = @storage.incr( ["keys"], 30.5 )
53
+ assert_equal result, 'now'
54
+ end
55
+
56
+ def test_decr
57
+ @storage.expects( :timestamp_key_multi ).with( ["keys"], 'now' ).returns( "timestamp_keys" )
58
+ @wrapper.expects( :decr ).with( "timestamp_keys", 600, 1 )
59
+
60
+ @storage.decr( 'now', ["keys"] )
61
+ end
62
+
63
+ def test_decr_with_val
64
+ @storage.expects( :timestamp_key_multi ).with( ["keys"], 'now' ).returns( "timestamp_keys" )
65
+ @wrapper.expects( :decr ).with( "timestamp_keys", 600, 30.5 )
66
+
67
+ @storage.decr( 'now', ["keys"], 30.5 )
50
68
  end
51
69
 
52
70
  def test_count
@@ -271,4 +289,4 @@ class StorageTest < Test::Unit::TestCase
271
289
  assert_equal( nil, storage.count( ["key_1"] )["key_1"] )
272
290
  end
273
291
  end
274
- end
292
+ end
@@ -51,6 +51,26 @@ class TimeWindowDropCollectorTest < Test::Unit::TestCase
51
51
  twdc.drop( "key", 15 )
52
52
  end
53
53
 
54
+ def test_pick
55
+ storage = mock()
56
+ storage.expects( :decr ).with( "time", ["key"], 1 )
57
+
58
+ twdc = TimeWindowDropCollector.new
59
+ twdc.stubs( :storage ).returns( storage )
60
+
61
+ twdc.pick( "time", "key" )
62
+ end
63
+
64
+ def test_pick_with_custom_amount
65
+ storage = mock()
66
+ storage.expects( :decr ).with( "time", ["key"], 15 )
67
+
68
+ twdc = TimeWindowDropCollector.new
69
+ twdc.stubs( :storage ).returns( storage )
70
+
71
+ twdc.pick( "time", "key", 15 )
72
+ end
73
+
54
74
  def test_count
55
75
  storage = mock()
56
76
  storage.expects( :count ).with( ["key"] ).returns( { "key" => 10 } )
@@ -77,10 +97,10 @@ class TimeWindowDropCollectorTest < Test::Unit::TestCase
77
97
  assert_equal( 20, twdc.storage.slices )
78
98
  end
79
99
 
80
- def test_integration_drop_and_count
100
+ def test_integration_drop_and_pick_and_count
81
101
  twdc = TimeWindowDropCollector.new { client :mock }
82
102
 
83
- twdc.drop( "key_1" )
103
+ ts = twdc.drop( "key_1" )
84
104
  twdc.drop( "key_1" )
85
105
  twdc.drop( "key_2" )
86
106
  twdc.drop( "key_2" )
@@ -97,25 +117,50 @@ class TimeWindowDropCollectorTest < Test::Unit::TestCase
97
117
  assert_equal( 2, twdc.count( ["key_1", "key_2"] )["key_1"] )
98
118
  assert_equal( 3, twdc.count( ["key_1", "key_2"] )["key_2"] )
99
119
  assert_equal( 0, twdc.count( ["key_6"] )["key_6"] )
120
+
121
+ twdc.pick(ts, "key_1" )
122
+ assert_equal( 1, twdc.count( "key_1" ) )
123
+
124
+ twdc.pick(ts, "key_2" )
125
+ assert_equal( 2, twdc.count( "key_2" ) )
126
+
127
+ twdc.pick(ts, ["key_2"] )
128
+ assert_equal( 1, twdc.count( "key_2" ) )
129
+
130
+ twdc.pick(ts, ["key_3", "key_4", "key_5"] )
131
+ assert_equal( 0, twdc.count( "key_3" ) )
132
+ assert_equal( 0, twdc.count( "key_4" ) )
133
+ assert_equal( 0, twdc.count( "key_5" ) )
100
134
  end
101
135
 
102
- def test_integration_drop_array_keys
136
+ def test_integration_drop_and_pick_array_keys
103
137
  twdc = TimeWindowDropCollector.new { client :mock }
104
138
 
105
- twdc.drop( ["key_1", "key_2"] )
139
+ ts = twdc.drop( ["key_1", "key_2"] )
106
140
 
107
141
  assert_equal( 1, twdc.count( "key_1" ) )
108
142
  assert_equal( 1, twdc.count( "key_2" ) )
143
+
144
+ twdc.pick(ts, ["key_1", "key_2"] )
145
+
146
+ assert_equal( 0, twdc.count( "key_1" ) )
147
+ assert_equal( 0, twdc.count( "key_2" ) )
109
148
  end
110
149
 
111
- def test_integration_drop_and_count_with_numerical_keys
150
+ def test_integration_drop_and_pick_and_count_with_numerical_keys
112
151
  twdc = TimeWindowDropCollector.new { client :mock }
113
152
 
114
- twdc.drop( 1000 )
153
+ ts = twdc.drop( 1000 )
115
154
  twdc.drop( [1001])
116
155
 
117
156
  assert_equal( 1, twdc.count( 1000 ) )
118
157
  assert_equal( 1, twdc.count( 1001 ) )
158
+
159
+ twdc.pick( ts, 1000 )
160
+ twdc.pick( ts, [1001])
161
+
162
+ assert_equal( 0, twdc.count( 1000 ) )
163
+ assert_equal( 0, twdc.count( 1001 ) )
119
164
  end
120
165
 
121
166
  def test_reset
@@ -5,8 +5,8 @@ require "time_window_drop_collector/version"
5
5
  Gem::Specification.new do |s|
6
6
  s.name = "time_window_drop_collector"
7
7
  s.version = TimeWindowDropCollector::VERSION
8
- s.authors = ["Fernando Guillen", "Carlos Moutinho"]
9
- s.email = ["fguillen.mail@gmail.com", "carlosmoutinho@gmail.com"]
8
+ s.authors = ["Fernando Guillen", "Carlos Moutinho", "Krzysztof Jablonski"]
9
+ s.email = ["fguillen.mail@gmail.com", "carlosmoutinho@gmail.com", "jablko@gmail.com"]
10
10
  s.homepage = "https://github.com/fguillen/TimeWindowDropCollector"
11
11
  s.summary = "Counter storage system for a concrete time window"
12
12
  s.description = "Counter storage system for a concrete time window"
@@ -22,7 +22,7 @@ Gem::Specification.new do |s|
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"
25
- s.add_development_dependency "memcache_mock", "0.0.1"
25
+ s.add_development_dependency "memcache_mock", "0.0.14"
26
26
 
27
27
  s.add_dependency "dalli"
28
28
  end
metadata CHANGED
@@ -1,117 +1,106 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: time_window_drop_collector
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2
5
- prerelease:
4
+ version: 0.3.3
6
5
  platform: ruby
7
6
  authors:
8
7
  - Fernando Guillen
9
8
  - Carlos Moutinho
9
+ - Krzysztof Jablonski
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2013-10-24 00:00:00.000000000 Z
13
+ date: 2014-01-07 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: bundler
17
- prerelease: false
18
17
  requirement: !ruby/object:Gem::Requirement
19
18
  requirements:
20
- - - ! '>='
19
+ - - '>='
21
20
  - !ruby/object:Gem::Version
22
21
  version: '0'
23
- none: false
24
22
  type: :development
23
+ prerelease: false
25
24
  version_requirements: !ruby/object:Gem::Requirement
26
25
  requirements:
27
- - - ! '>='
26
+ - - '>='
28
27
  - !ruby/object:Gem::Version
29
28
  version: '0'
30
- none: false
31
29
  - !ruby/object:Gem::Dependency
32
30
  name: rake
33
- prerelease: false
34
31
  requirement: !ruby/object:Gem::Requirement
35
32
  requirements:
36
33
  - - '='
37
34
  - !ruby/object:Gem::Version
38
35
  version: 0.9.2.2
39
- none: false
40
36
  type: :development
37
+ prerelease: false
41
38
  version_requirements: !ruby/object:Gem::Requirement
42
39
  requirements:
43
40
  - - '='
44
41
  - !ruby/object:Gem::Version
45
42
  version: 0.9.2.2
46
- none: false
47
43
  - !ruby/object:Gem::Dependency
48
44
  name: mocha
49
- prerelease: false
50
45
  requirement: !ruby/object:Gem::Requirement
51
46
  requirements:
52
47
  - - '='
53
48
  - !ruby/object:Gem::Version
54
49
  version: 0.10.0
55
- none: false
56
50
  type: :development
51
+ prerelease: false
57
52
  version_requirements: !ruby/object:Gem::Requirement
58
53
  requirements:
59
54
  - - '='
60
55
  - !ruby/object:Gem::Version
61
56
  version: 0.10.0
62
- none: false
63
57
  - !ruby/object:Gem::Dependency
64
58
  name: delorean
65
- prerelease: false
66
59
  requirement: !ruby/object:Gem::Requirement
67
60
  requirements:
68
61
  - - '='
69
62
  - !ruby/object:Gem::Version
70
63
  version: 1.2.0
71
- none: false
72
64
  type: :development
65
+ prerelease: false
73
66
  version_requirements: !ruby/object:Gem::Requirement
74
67
  requirements:
75
68
  - - '='
76
69
  - !ruby/object:Gem::Version
77
70
  version: 1.2.0
78
- none: false
79
71
  - !ruby/object:Gem::Dependency
80
72
  name: memcache_mock
81
- prerelease: false
82
73
  requirement: !ruby/object:Gem::Requirement
83
74
  requirements:
84
75
  - - '='
85
76
  - !ruby/object:Gem::Version
86
- version: 0.0.1
87
- none: false
77
+ version: 0.0.14
88
78
  type: :development
79
+ prerelease: false
89
80
  version_requirements: !ruby/object:Gem::Requirement
90
81
  requirements:
91
82
  - - '='
92
83
  - !ruby/object:Gem::Version
93
- version: 0.0.1
94
- none: false
84
+ version: 0.0.14
95
85
  - !ruby/object:Gem::Dependency
96
86
  name: dalli
97
- prerelease: false
98
87
  requirement: !ruby/object:Gem::Requirement
99
88
  requirements:
100
- - - ! '>='
89
+ - - '>='
101
90
  - !ruby/object:Gem::Version
102
91
  version: '0'
103
- none: false
104
92
  type: :runtime
93
+ prerelease: false
105
94
  version_requirements: !ruby/object:Gem::Requirement
106
95
  requirements:
107
- - - ! '>='
96
+ - - '>='
108
97
  - !ruby/object:Gem::Version
109
98
  version: '0'
110
- none: false
111
99
  description: Counter storage system for a concrete time window
112
100
  email:
113
101
  - fguillen.mail@gmail.com
114
102
  - carlosmoutinho@gmail.com
103
+ - jablko@gmail.com
115
104
  executables: []
116
105
  extensions: []
117
106
  extra_rdoc_files: []
@@ -147,27 +136,26 @@ files:
147
136
  - time_window_drop_collector.gemspec
148
137
  homepage: https://github.com/fguillen/TimeWindowDropCollector
149
138
  licenses: []
139
+ metadata: {}
150
140
  post_install_message:
151
141
  rdoc_options: []
152
142
  require_paths:
153
143
  - lib
154
144
  required_ruby_version: !ruby/object:Gem::Requirement
155
145
  requirements:
156
- - - ! '>='
146
+ - - '>='
157
147
  - !ruby/object:Gem::Version
158
148
  version: '0'
159
- none: false
160
149
  required_rubygems_version: !ruby/object:Gem::Requirement
161
150
  requirements:
162
- - - ! '>='
151
+ - - '>='
163
152
  - !ruby/object:Gem::Version
164
153
  version: '0'
165
- none: false
166
154
  requirements: []
167
155
  rubyforge_project: time_window_drop_collector
168
- rubygems_version: 1.8.24
156
+ rubygems_version: 2.1.11
169
157
  signing_key:
170
- specification_version: 3
158
+ specification_version: 4
171
159
  summary: Counter storage system for a concrete time window
172
160
  test_files:
173
161
  - test/config_test.rb
@@ -180,4 +168,3 @@ test_files:
180
168
  - test/test_helper.rb
181
169
  - test/time_window_drop_collector_test.rb
182
170
  - test/wrapper_test.rb
183
- has_rdoc: