minuteman 1.0.2 → 1.0.3

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/Gemfile CHANGED
@@ -1,4 +1,4 @@
1
- source :rubygems
1
+ source "http://rubygems.org"
2
2
 
3
3
  gemspec
4
4
  gem "rake"
data/Gemfile.lock CHANGED
@@ -1,23 +1,30 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- minuteman (1.0.2)
5
- redis (~> 3.0.2)
4
+ minuteman (1.0.3)
5
+ redis (~> 3.0.3)
6
6
 
7
7
  GEM
8
8
  remote: http://rubygems.org/
9
9
  specs:
10
- minitest (4.2.0)
10
+ given_core (3.0.0)
11
+ sorcerer (>= 0.3.7)
12
+ minitest (4.3.2)
13
+ minitest-given (3.0.0)
14
+ given_core (= 3.0.0)
15
+ minitest (> 4.3)
11
16
  rake (0.9.2.2)
12
- redis (3.0.2)
17
+ redis (3.0.3)
13
18
  redis-namespace (1.2.1)
14
19
  redis (~> 3.0.0)
20
+ sorcerer (1.0.0)
15
21
 
16
22
  PLATFORMS
17
23
  ruby
18
24
 
19
25
  DEPENDENCIES
20
- minitest (~> 4.2.0)
26
+ minitest (~> 4.3.0)
27
+ minitest-given (~> 3.0.0)
21
28
  minuteman!
22
29
  rake
23
30
  redis-namespace (~> 1.2.1)
data/HUGS ADDED
@@ -0,0 +1,15 @@
1
+ THE HUGWARE LICENSE
2
+
3
+ LICENSE
4
+
5
+ If there is no other license you can do whatever you want with this while you
6
+ retain the attribution to the author.
7
+
8
+ HUGS
9
+
10
+ The author spent time to make this software so please show some grattitude,
11
+ in any
12
+ form. A hug, a tweet, a beer on a conference or just a plain old email. Your
13
+ choice.
14
+
15
+ Less hate, more hugs.
data/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  ![Minuteman](http://elcuervo.github.com/minuteman/img/minuteman-readme.png)
2
2
 
3
3
  # Minuteman
4
- [![Code Climate](https://codeclimate.com/badge.png)](https://codeclimate.com/github/elcuervo/minuteman)
4
+ [![Code Climate](https://codeclimate.com/github/elcuervo/minuteman.png)](https://codeclimate.com/github/elcuervo/minuteman)
5
5
  [![Build Status](https://secure.travis-ci.org/elcuervo/minuteman.png?branch=master)](https://travis-ci.org/elcuervo/minuteman)
6
6
 
7
7
  _Wikipedia_: Minutemen were members of teams from Massachusetts that were well-prepared
@@ -63,6 +63,9 @@ Currently Minutemen supports two options `:silent (default: false)` and `:redis
63
63
 
64
64
  **silent**: when `true` the operations will not raise errors to prevent failures
65
65
 
66
+ **time_spans**: an `Array` of Minuteman compatible `TimeSpan`. Eg. `%w[year month
67
+ day]` will only track events on that timespans. Ignoring the rest
68
+
66
69
  **redis**: can be a Hash with the options to be sent to `Redis.new` or a `Redis`
67
70
  connection already established (`Redis::Namespace` works as well).
68
71
 
data/Rakefile CHANGED
@@ -1,4 +1,4 @@
1
- require 'rake/testtask'
1
+ require "rake/testtask"
2
2
 
3
3
  Rake::TestTask.new("spec") do |t|
4
4
  t.pattern = "test/**/*_test.rb"
data/lib/minuteman.rb CHANGED
@@ -3,21 +3,6 @@ require "time"
3
3
  require "forwardable"
4
4
  require "minuteman/time_events"
5
5
 
6
- # Until redis gem gets updated
7
- class Redis
8
- def bitop(operation, destkey, *keys)
9
- synchronize do |client|
10
- client.call([:bitop, operation, destkey] + keys)
11
- end
12
- end
13
-
14
- def bitcount(key, start = 0, stop = -1)
15
- synchronize do |client|
16
- client.call([:bitcount, key, start, stop])
17
- end
18
- end
19
- end
20
-
21
6
  # Public: Minuteman core classs
22
7
  #
23
8
  class Minuteman
@@ -48,21 +33,9 @@ class Minuteman
48
33
 
49
34
  self.options = default_options.merge!(options)
50
35
  self.redis = define_connection(redis_options)
51
- end
52
-
53
- # Public: Generates the methods to fech data
54
- #
55
- # event_name - The event name to be searched for
56
- # date - A Time object used to do the search
57
- #
58
- %w[year month week day hour minute].each do |method_name|
59
- define_method(method_name) do |*args|
60
- event_name, date = *args
61
- date ||= Time.now.utc
62
36
 
63
- constructor = self.class.const_get(method_name.capitalize)
64
- constructor.new(event_name, date)
65
- end
37
+ spans = self.options.fetch(:time_spans, %w[year month week day hour minute])
38
+ @time_spans = generate_spans(spans)
66
39
  end
67
40
 
68
41
  # Public: Marks an id to a given event on a given time
@@ -78,7 +51,7 @@ class Minuteman
78
51
  #
79
52
  def track(event_name, ids, time = Time.now.utc)
80
53
  event_time = time.kind_of?(Time) ? time : Time.parse(time.to_s)
81
- time_events = TimeEvents.start(event_name, event_time)
54
+ time_events = TimeEvents.start(@time_spans, event_name, event_time)
82
55
 
83
56
  track_events(time_events, Array(ids))
84
57
  end
@@ -112,13 +85,29 @@ class Minuteman
112
85
 
113
86
  private
114
87
 
88
+ # Public: Generates the methods to fech data
89
+ #
90
+ # spans: An array of timespans corresponding to a TimeSpan class
91
+ #
92
+ def generate_spans(spans)
93
+ spans.map do |method_name|
94
+ constructor = self.class.const_get(method_name.capitalize)
95
+
96
+ define_singleton_method(method_name) do |*args|
97
+ event_name, date = *args
98
+ date ||= Time.now.utc
99
+
100
+ constructor.new(event_name, date)
101
+ end
102
+
103
+ constructor
104
+ end
105
+ end
106
+
115
107
  # Private: Default configuration options
116
108
  #
117
109
  def default_options
118
- {
119
- cache: true,
120
- silent: false
121
- }
110
+ { cache: true, silent: false }
122
111
  end
123
112
 
124
113
  # Private: Determines to use or instance a Redis connection
@@ -157,8 +146,6 @@ class Minuteman
157
146
  # Private: The prefix key of all the operations
158
147
  #
159
148
  def operations_cache_key_prefix
160
- [
161
- PREFIX, Minuteman::KeysMethods::BIT_OPERATION_PREFIX
162
- ].join("_")
149
+ [ PREFIX, Minuteman::KeysMethods::BIT_OPERATION_PREFIX ].join("_")
163
150
  end
164
151
  end
@@ -9,8 +9,8 @@ class Minuteman
9
9
  # event_name - The event to be tracked
10
10
  # date - A given Time object
11
11
  #
12
- def self.start(event_name, time)
13
- [Year, Month, Week, Day, Hour, Minute].map do |t|
12
+ def self.start(time_spans, event_name, time)
13
+ time_spans.map do |t|
14
14
  t.new(event_name, time)
15
15
  end
16
16
  end
data/minuteman.gemspec CHANGED
@@ -1,17 +1,18 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = "minuteman"
3
- s.version = "1.0.2"
3
+ s.version = "1.0.3"
4
4
  s.summary = "Bit Analytics"
5
5
  s.description = "Fast and furious tracking system using Redis bitwise operations"
6
6
  s.authors = ["elcuervo"]
7
- s.licenses = ["MIT"]
7
+ s.licenses = ["MIT", "HUGWARE"]
8
8
  s.email = ["yo@brunoaguirre.com"]
9
9
  s.homepage = "http://github.com/elcuervo/minuteman"
10
10
  s.files = `git ls-files`.split("\n")
11
11
  s.test_files = `git ls-files test`.split("\n")
12
12
 
13
- s.add_dependency("redis", "~> 3.0.2")
13
+ s.add_dependency("redis", "~> 3.0.3")
14
14
 
15
- s.add_development_dependency("minitest", "~> 4.2.0")
15
+ s.add_development_dependency("minitest", "~> 4.3.0")
16
+ s.add_development_dependency("minitest-given", "~> 3.0.0")
16
17
  s.add_development_dependency("redis-namespace", "~> 1.2.1")
17
18
  end
@@ -7,9 +7,9 @@ describe Minuteman do
7
7
  last_week = today - (3600 * 24 * 7)
8
8
 
9
9
  @analytics = Minuteman.new
10
- @analytics.mark("login", 12)
11
- @analytics.mark("login", [2, 42])
12
- @analytics.mark("login:successful", 567, last_week)
10
+ @analytics.track("login", 12)
11
+ @analytics.track("login", [2, 42])
12
+ @analytics.track("login:successful", 567, last_week)
13
13
 
14
14
  @week_events = @analytics.week("login")
15
15
  @last_week_events = @analytics.week("login", last_week)
data/test/test_helper.rb CHANGED
@@ -3,6 +3,7 @@ $:.unshift File.dirname(__FILE__) + '/../lib'
3
3
  require "bundler/setup"
4
4
  require "minitest/spec"
5
5
  require "minitest/pride"
6
+ require "minitest/given"
6
7
  require "minitest/autorun"
7
8
  require "minuteman"
8
9
  require "redis-namespace"
@@ -1,217 +1,225 @@
1
1
  require_relative "../test_helper"
2
2
 
3
3
  describe Minuteman do
4
- before do
5
- @analytics = Minuteman.new
6
-
7
- today = Time.now.utc
8
- last_month = today - (3600 * 24 * 30)
9
- last_week = today - (3600 * 24 * 7)
10
- last_minute = today - 120
11
-
12
- @analytics.track("login", 12)
13
- @analytics.track("login", [2, 42])
14
- @analytics.track("login", 2, last_week)
15
- @analytics.track("login:successful", 567, last_month)
16
-
17
- @year_events = @analytics.year("login", today)
18
- @week_events = @analytics.week("login", today)
19
- @month_events = @analytics.month("login", today)
20
- @day_events = @analytics.day("login", today)
21
- @hour_events = @analytics.hour("login", today)
22
- @minute_events = @analytics.minute("login", today)
23
-
24
- @last_week_events = @analytics.week("login", last_week)
25
- @last_minute_events = @analytics.minute("login", last_minute)
26
- @last_month_events = @analytics.month("login:successful", last_month)
27
- end
28
-
29
- after { @analytics.reset_all }
4
+ Given(:analytics) { Minuteman.new }
30
5
 
31
- it "should initialize correctly" do
32
- assert @analytics.redis
33
- end
34
-
35
- it "should track an event on a time" do
36
- assert_equal 3, @year_events.length
37
- assert_equal 3, @week_events.length
38
- assert_equal 1, @last_week_events.length
39
- assert_equal 1, @last_month_events.length
40
- assert_equal [true, true, false], @week_events.include?(12, 2, 1)
41
-
42
- assert @year_events.include?(12)
43
- assert @month_events.include?(12)
44
- assert @day_events.include?(12)
45
- assert @hour_events.include?(12)
46
- assert @minute_events.include?(12)
47
-
48
- assert @last_week_events.include?(2)
49
- assert !@month_events.include?(5)
50
- assert !@last_minute_events.include?(12)
51
- assert @last_month_events.include?(567)
52
- end
6
+ after { analytics.reset_all }
53
7
 
54
- it "should list all the events" do
55
- assert_equal 2, @analytics.events.size
56
- assert_equal ["login", "login:successful"], @analytics.events.sort
57
- end
8
+ context "configuration" do
9
+ Then { analytics.redis }
10
+ Then { analytics.options[:cache] == true }
58
11
 
59
- it "should reset all the keys" do
60
- assert_equal 2, @analytics.events.size
12
+ context "switching options" do
13
+ Given(:minuteman) { Minuteman.new }
61
14
 
62
- @analytics.reset_all
15
+ When { minuteman.options[:cache] = false }
16
+ Then { minuteman.options[:cache] == false }
17
+ end
63
18
 
64
- assert_equal 0, @analytics.events.size
65
- end
19
+ context "changing time spans" do
20
+ Given(:time_spans) { %w[year month day hour] }
21
+ Given(:minuteman) { Minuteman.new(time_spans: time_spans) }
66
22
 
67
- it "should reset all bit operation keys" do
68
- @week_events & @last_week_events
69
- assert_equal 1, @analytics.operations.size
23
+ When { minuteman.track("login", 12) }
70
24
 
71
- @analytics.reset_operations_cache
25
+ Then { minuteman.respond_to?(:year) }
26
+ Then { minuteman.respond_to?(:month) }
27
+ Then { minuteman.respond_to?(:day) }
28
+ Then { minuteman.respond_to?(:hour) }
72
29
 
73
- assert_equal 0, @analytics.operations.size
74
- end
30
+ Then { !minuteman.respond_to?(:minute) }
31
+ Then { !minuteman.respond_to?(:week) }
75
32
 
76
- it "should accept the AND bitwise operations" do
77
- and_operation = @week_events & @last_week_events
33
+ Then { minuteman.redis.keys.size == 4 }
34
+ Then { minuteman.options[:time_spans] == time_spans }
35
+ end
78
36
 
79
- assert @week_events.include?(2)
80
- assert @week_events.include?(12)
37
+ context "fail silently" do
38
+ Given(:minuteman) { Minuteman.new(silent: true, redis: { port: 1234 }) }
39
+ When(:result) { minuteman.track("test", 1) }
40
+ Then { result == nil }
41
+ end
81
42
 
82
- assert @last_week_events.include?(2)
83
- assert !@last_week_events.include?(12)
43
+ context "fail loudly" do
44
+ Given(:minuteman) { Minuteman.new(redis: { port: 1234 }) }
45
+ When(:result) { minuteman.track("test", 1) }
46
+ Then { result == Failure(Redis::CannotConnectError) }
47
+ end
84
48
 
85
- assert_equal 1, and_operation.length
49
+ context "changing Redis connection" do
50
+ Given(:redis) { Redis.new }
51
+ Then { Minuteman.redis != redis }
86
52
 
87
- assert !and_operation.include?(12)
88
- assert and_operation.include?(2)
89
- end
53
+ context "return the correct connection" do
54
+ When(:minuteman) { Minuteman.new(redis: redis) }
90
55
 
91
- it "should accept the OR bitwise operations" do
92
- or_operation = @week_events | @last_week_events
56
+ Then { minuteman.redis == redis }
57
+ end
93
58
 
94
- assert @week_events.include?(2)
95
- assert @last_week_events.include?(2)
96
- assert !@last_week_events.include?(12)
59
+ context "switching the connection" do
60
+ Given(:minuteman) { Minuteman.new }
61
+ When { minuteman.redis = redis }
62
+ Then { redis == Minuteman.redis }
63
+ end
97
64
 
98
- assert_equal 3, or_operation.length
65
+ context "using Redis::Namespace" do
66
+ Given(:namespace) { Redis::Namespace.new(:ns, redis: Redis.new) }
67
+ Given(:minuteman) { Minuteman.new(redis: namespace) }
99
68
 
100
- assert or_operation.include?(12)
101
- assert or_operation.include?(2)
69
+ Then { minuteman.redis == namespace }
70
+ end
71
+ end
102
72
  end
103
73
 
104
- it "should accept the NOT bitwise operations" do
105
- not_operation = ~@week_events
106
-
107
- assert @week_events.include?(2)
108
- assert @week_events.include?(12)
109
-
110
- assert !not_operation.include?(12)
111
- assert !not_operation.include?(2)
112
- end
74
+ context "event tracking" do
75
+ Given(:today) { Time.now.utc }
76
+ Given(:last_month) { today - (3600 * 24 * 30) }
77
+ Given(:last_week) { today - (3600 * 24 * 7) }
78
+ Given(:last_minute) { today - 120 }
79
+
80
+ Given(:year_events) { analytics.year("login", today) }
81
+ Given(:week_events) { analytics.week("login", today) }
82
+ Given(:month_events) { analytics.month("login", today) }
83
+ Given(:day_events) { analytics.day("login", today) }
84
+ Given(:hour_events) { analytics.hour("login", today) }
85
+ Given(:minute_events) { analytics.minute("login", today) }
86
+ Given(:last_week_events) { analytics.week("login", last_week) }
87
+ Given(:last_minute_events) { analytics.minute("login", last_minute) }
88
+ Given(:last_month_events) { analytics.month("login:successful", last_month) }
89
+
90
+ before do
91
+ analytics.track("login", 12)
92
+ analytics.track("login", [2, 42])
93
+ analytics.track("login", 2, last_week)
94
+ analytics.track("login:successful", 567, last_month)
95
+ end
113
96
 
114
- it "should have an alias for the OR operator" do
115
- or_operation = @week_events + @last_week_events
97
+ Then { analytics.events.size == 2 }
98
+ Then { year_events.length == 3 }
99
+ Then { week_events.length == 3 }
100
+ Then { last_week_events.length == 1 }
101
+ Then { last_month_events.length == 1 }
116
102
 
117
- assert @week_events.include?(2)
118
- assert @last_week_events.include?(2)
119
- assert !@last_week_events.include?(12)
103
+ context "reseting" do
104
+ before { analytics.reset_all }
105
+ Then { analytics.events.size == 0 }
120
106
 
121
- assert_equal 3, or_operation.length
107
+ context "bit operations" do
108
+ before { week_events & last_week_events }
122
109
 
123
- assert or_operation.include?(12)
124
- assert or_operation.include?(2)
125
- end
110
+ When { analytics.reset_operations_cache }
111
+ Then { analytics.operations.size == 0 }
112
+ end
113
+ end
126
114
 
127
- it "should accept the substraction of a set" do
128
- substract_operation = @year_events - @week_events
115
+ context "on a given time" do
116
+ Then { year_events.length == 3 }
117
+ Then { week_events.length == 3 }
118
+
119
+ Then { week_events.include?(12, 2, 1) == [true, true, false] }
120
+ Then { year_events.include?(12) }
121
+ Then { month_events.include?(12) }
122
+ Then { day_events.include?(12) }
123
+ Then { hour_events.include?(12) }
124
+ Then { minute_events.include?(12) }
125
+
126
+ Then { last_week_events.include?(2) }
127
+ Then { !month_events.include?(5) }
128
+ Then { !last_minute_events.include?(12) }
129
+ Then { last_month_events.include?(567) }
130
+ end
129
131
 
130
- assert @week_events.include?(2)
131
- assert @year_events.include?(2)
132
- assert !substract_operation.include?(2)
133
- end
132
+ context "listing events" do
133
+ Then { analytics.events.size == 2 }
134
+ Then { analytics.events.sort == ["login", "login:successful"] }
135
+ end
134
136
 
135
- it "should accept multiple consecutive operations" do
136
- multi_operation = @week_events & @last_week_events | @year_events
137
+ context "composing" do
138
+ context "using AND" do
139
+ Given(:and_operation) { week_events & last_week_events }
137
140
 
138
- assert_kind_of Minuteman::BitOperations::Result, multi_operation
139
- end
141
+ Then { week_events.include?(2) }
142
+ Then { week_events.include?(12) }
140
143
 
141
- it "should return the ids that belong to a given set" do
142
- ids = @week_events & [2, 12, 43]
144
+ Then { last_week_events.include?(2) }
145
+ Then { !last_week_events.include?(12) }
143
146
 
144
- assert_kind_of Minuteman::BitOperations::Data, ids
145
- assert_equal [2, 12], ids
146
- end
147
-
148
- it "should return the ids that do not belong to the given set" do
149
- ids = @week_events - [2, 12, 43]
147
+ Then { !and_operation.include?(12) }
148
+ Then { and_operation.include?(2) }
149
+ Then { and_operation.length == 1 }
150
+ end
150
151
 
151
- assert_kind_of Minuteman::BitOperations::Data, ids
152
- assert_equal [43], ids
153
- end
152
+ context "using OR" do
153
+ Given(:or_operation) { week_events | last_week_events }
154
154
 
155
- it "should return a set with data that behaves like an array" do
156
- ids = @week_events & [2, 12, 43]
155
+ Then { week_events.include?(2) }
156
+ Then { last_week_events.include?(2) }
157
+ Then { !last_week_events.include?(12) }
157
158
 
158
- assert_kind_of Enumerator, ids.each
159
- assert_kind_of Enumerator, ids.map
160
- assert_equal 2, ids.size
161
- end
162
- end
159
+ Then { or_operation.include?(12) }
160
+ Then { or_operation.include?(2) }
161
+ Then { or_operation.length == 3 }
162
+ end
163
163
 
164
- describe "Using options" do
165
- it "should be able to stop using the cache" do
166
- minuteman = Minuteman.new
167
- assert_equal true, minuteman.options[:cache]
164
+ context "using NOT" do
165
+ Given(:not_operation) { ~week_events }
168
166
 
169
- minuteman.options[:cache] = false
167
+ Then { week_events.include?(2) }
168
+ Then { week_events.include?(12) }
170
169
 
171
- assert_equal false, minuteman.options[:cache]
172
- end
173
- end
170
+ Then { !not_operation.include?(12) }
171
+ Then { !not_operation.include?(2) }
172
+ end
174
173
 
175
- describe "Changing Minuteman redis connections" do
176
- it "should support using a Redis instance" do
177
- redis = Redis.new
178
- minuteman = Minuteman.new(redis: redis)
174
+ context "using OR alias (+)" do
175
+ Given(:or_operation) { week_events + last_week_events }
179
176
 
180
- assert_equal redis, Minuteman.redis
181
- assert_equal redis, minuteman.redis
182
- end
177
+ Then { week_events.include?(2) }
178
+ Then { last_week_events.include?(2) }
179
+ Then { !last_week_events.include?(12) }
183
180
 
184
- it "should support changing the current connection" do
185
- redis = Redis.new
186
- minuteman = Minuteman.new
181
+ Then { or_operation.include?(12) }
182
+ Then { or_operation.include?(2) }
183
+ Then { or_operation.length == 3 }
184
+ end
187
185
 
188
- assert redis != Minuteman.redis
186
+ context "using MINUS" do
187
+ Given(:substract_operation) { year_events - week_events }
189
188
 
190
- minuteman.redis = redis
189
+ Then { week_events.include?(2) }
190
+ Then { year_events.include?(2) }
191
+ Then { !substract_operation.include?(2) }
192
+ end
193
+ end
191
194
 
192
- assert_equal redis, minuteman.redis
193
- end
195
+ context "composing multiple operations" do
196
+ Given(:multi_operation) { week_events & last_week_events | year_events }
197
+ Then { multi_operation.is_a?(Minuteman::BitOperations::Result) }
198
+ end
194
199
 
195
- it "should support Redis::Namespace" do
196
- namespace = Redis::Namespace.new(:ns, redis: Redis.new)
200
+ context "composing against arrays" do
201
+ context "using AND returns the intersection" do
202
+ Given(:ids) { week_events & [2, 12, 43] }
197
203
 
198
- minuteman = Minuteman.new(redis: namespace)
204
+ Then { ids.is_a?(Minuteman::BitOperations::Data) }
205
+ Then { ids == [2, 12] }
206
+ end
199
207
 
200
- assert_equal namespace, Minuteman.redis
201
- assert_equal namespace, minuteman.redis
202
- end
208
+ context "using MINUS returns the difference" do
209
+ Given(:ids) { week_events - [2, 12, 43] }
203
210
 
204
- it "should fail silently" do
205
- minuteman = Minuteman.new(silent: true, redis: { port: 1234 })
211
+ Then { ids.is_a?(Minuteman::BitOperations::Data) }
212
+ Then { ids == [43] }
213
+ end
206
214
 
207
- minuteman.track("test", 1)
208
- end
215
+ context "returns an object that behaves like Array" do
216
+ Given(:ids) { week_events & [2, 12, 43] }
209
217
 
210
- it "should fail loudly" do
211
- minuteman = Minuteman.new(redis: { port: 1234 })
218
+ Then { ids.each.is_a?(Enumerator) }
219
+ Then { ids.map.is_a?(Enumerator) }
220
+ Then { ids.size == 2 }
221
+ end
212
222
 
213
- assert_raises Redis::CannotConnectError do
214
- minuteman.track("test", 1)
215
223
  end
216
224
  end
217
225
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: minuteman
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: 1.0.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-11-29 00:00:00.000000000 Z
12
+ date: 2013-10-14 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: redis
@@ -18,7 +18,7 @@ dependencies:
18
18
  requirements:
19
19
  - - ~>
20
20
  - !ruby/object:Gem::Version
21
- version: 3.0.2
21
+ version: 3.0.3
22
22
  type: :runtime
23
23
  prerelease: false
24
24
  version_requirements: !ruby/object:Gem::Requirement
@@ -26,7 +26,7 @@ dependencies:
26
26
  requirements:
27
27
  - - ~>
28
28
  - !ruby/object:Gem::Version
29
- version: 3.0.2
29
+ version: 3.0.3
30
30
  - !ruby/object:Gem::Dependency
31
31
  name: minitest
32
32
  requirement: !ruby/object:Gem::Requirement
@@ -34,7 +34,7 @@ dependencies:
34
34
  requirements:
35
35
  - - ~>
36
36
  - !ruby/object:Gem::Version
37
- version: 4.2.0
37
+ version: 4.3.0
38
38
  type: :development
39
39
  prerelease: false
40
40
  version_requirements: !ruby/object:Gem::Requirement
@@ -42,7 +42,23 @@ dependencies:
42
42
  requirements:
43
43
  - - ~>
44
44
  - !ruby/object:Gem::Version
45
- version: 4.2.0
45
+ version: 4.3.0
46
+ - !ruby/object:Gem::Dependency
47
+ name: minitest-given
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ~>
52
+ - !ruby/object:Gem::Version
53
+ version: 3.0.0
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: 3.0.0
46
62
  - !ruby/object:Gem::Dependency
47
63
  name: redis-namespace
48
64
  requirement: !ruby/object:Gem::Requirement
@@ -69,6 +85,7 @@ files:
69
85
  - .travis.yml
70
86
  - Gemfile
71
87
  - Gemfile.lock
88
+ - HUGS
72
89
  - LICENSE
73
90
  - README.md
74
91
  - Rakefile
@@ -96,6 +113,7 @@ files:
96
113
  homepage: http://github.com/elcuervo/minuteman
97
114
  licenses:
98
115
  - MIT
116
+ - HUGWARE
99
117
  post_install_message:
100
118
  rdoc_options: []
101
119
  require_paths: