gatoroid 0.2.12 → 0.2.13
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 +1 -0
- data/Gemfile.lock +2 -0
- data/VERSION +1 -1
- data/gatoroid.gemspec +5 -2
- data/lib/gator/gatorer.rb +3 -3
- data/lib/gator/readers.rb +16 -16
- data/spec/gatoroid_spec.rb +36 -9
- data/spec/spec_helper.rb +16 -2
- metadata +25 -14
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -11,6 +11,7 @@ GEM
|
|
11
11
|
bson_ext (1.6.2)
|
12
12
|
bson (~> 1.6.2)
|
13
13
|
builder (3.0.0)
|
14
|
+
database_cleaner (0.8.0)
|
14
15
|
diff-lcs (1.1.3)
|
15
16
|
git (1.2.5)
|
16
17
|
i18n (0.6.0)
|
@@ -48,6 +49,7 @@ PLATFORMS
|
|
48
49
|
|
49
50
|
DEPENDENCIES
|
50
51
|
bson_ext
|
52
|
+
database_cleaner (= 0.8.0)
|
51
53
|
jeweler
|
52
54
|
mocha
|
53
55
|
mongoid (>= 2.1.0)
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.2.
|
1
|
+
0.2.13
|
data/gatoroid.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "gatoroid"
|
8
|
-
s.version = "0.2.
|
8
|
+
s.version = "0.2.13"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Kevin Haight"]
|
12
|
-
s.date = "2012-
|
12
|
+
s.date = "2012-11-13"
|
13
13
|
s.description = "Gatoroid is a way to store analytics using the poweful features of MongoDB for scalability"
|
14
14
|
s.email = "kevinjhaight@gmail.com"
|
15
15
|
s.extra_rdoc_files = [
|
@@ -52,6 +52,7 @@ Gem::Specification.new do |s|
|
|
52
52
|
s.add_development_dependency(%q<rspec>, [">= 2.2.0"])
|
53
53
|
s.add_development_dependency(%q<mocha>, [">= 0"])
|
54
54
|
s.add_development_dependency(%q<bson_ext>, [">= 0"])
|
55
|
+
s.add_development_dependency(%q<database_cleaner>, ["= 0.8.0"])
|
55
56
|
else
|
56
57
|
s.add_dependency(%q<mongoid>, [">= 2.1.0"])
|
57
58
|
s.add_dependency(%q<rake>, [">= 0"])
|
@@ -59,6 +60,7 @@ Gem::Specification.new do |s|
|
|
59
60
|
s.add_dependency(%q<rspec>, [">= 2.2.0"])
|
60
61
|
s.add_dependency(%q<mocha>, [">= 0"])
|
61
62
|
s.add_dependency(%q<bson_ext>, [">= 0"])
|
63
|
+
s.add_dependency(%q<database_cleaner>, ["= 0.8.0"])
|
62
64
|
end
|
63
65
|
else
|
64
66
|
s.add_dependency(%q<mongoid>, [">= 2.1.0"])
|
@@ -67,6 +69,7 @@ Gem::Specification.new do |s|
|
|
67
69
|
s.add_dependency(%q<rspec>, [">= 2.2.0"])
|
68
70
|
s.add_dependency(%q<mocha>, [">= 0"])
|
69
71
|
s.add_dependency(%q<bson_ext>, [">= 0"])
|
72
|
+
s.add_dependency(%q<database_cleaner>, ["= 0.8.0"])
|
70
73
|
end
|
71
74
|
end
|
72
75
|
|
data/lib/gator/gatorer.rb
CHANGED
@@ -25,9 +25,9 @@ module Mongoid #:nodoc:
|
|
25
25
|
end
|
26
26
|
|
27
27
|
# Get collections for
|
28
|
-
def collection_for(date,grain,
|
28
|
+
def collection_for(date,grain,opts={})
|
29
29
|
unless date.nil?
|
30
|
-
return @object.collection.group(:keyf => create_fkey(grain,
|
30
|
+
return @object.collection.group(:keyf => create_fkey(grain,0),
|
31
31
|
:reduce => "function(obj,prev){for (var key in obj.#{@for}) {prev.#{@for} += obj.#{@for}}}",
|
32
32
|
:cond=>create_query_hash(date,grain,opts),
|
33
33
|
:initial => {@for => 0})
|
@@ -204,7 +204,7 @@ module Mongoid #:nodoc:
|
|
204
204
|
end
|
205
205
|
|
206
206
|
sdate,edate = convert_date_by_level(date,grain) # Set Dates
|
207
|
-
key_hash[:date] = {"$gte" => normalize_date(sdate), "$lt" => normalize_date(edate)}
|
207
|
+
key_hash[:date] = {"$gte" => normalize_date(sdate), "$lt" => normalize_date(edate + 1.day)}
|
208
208
|
return key_hash
|
209
209
|
end
|
210
210
|
|
data/lib/gator/readers.rb
CHANGED
@@ -29,15 +29,7 @@ module Mongoid #:nodoc:
|
|
29
29
|
|
30
30
|
# Range - retuns a collection for a specified range on specified level
|
31
31
|
def range(date, grain=DEFAULT_GRAIN, opts={})
|
32
|
-
|
33
|
-
if date.is_a?(Range)
|
34
|
-
off_set = date.last.utc_offset
|
35
|
-
else
|
36
|
-
off_set = date.utc_offset
|
37
|
-
end
|
38
|
-
|
39
|
-
|
40
|
-
data = collection_for(date,grain,off_set,opts)
|
32
|
+
data = collection_for(date,HOUR,opts)
|
41
33
|
|
42
34
|
# Add Zero values for dates missing
|
43
35
|
# May want to look into a way to get mongo to do this
|
@@ -49,17 +41,26 @@ module Mongoid #:nodoc:
|
|
49
41
|
when HOUR
|
50
42
|
start_date = start_date.change(:sec=>0).change(:min => 0)
|
51
43
|
end_date = end_date.change(:sec=>0).change(:min => 0) - 1.hour
|
44
|
+
data = data.group_by {|d| (Time.zone.at(d["date"].to_i).change(:sec=>0).change(:min => 0)).to_i }
|
52
45
|
when DAY
|
53
46
|
start_date = start_date.change(:hour=>0).change(:sec=>0).change(:min => 0)
|
54
47
|
end_date = end_date.change(:hour=>0).change(:sec=>0).change(:min => 0)
|
48
|
+
data = data.group_by {|d| (Time.zone.at(d["date"].to_i).change(:hour=>0).change(:sec=>0).change(:min => 0)).to_i }
|
55
49
|
when MONTH
|
56
50
|
start_date = start_date.change(:day=>1).change(:hour=>0).change(:sec=>0).change(:min => 0)
|
57
51
|
end_date = end_date.change(:day=>1).change(:hour=>0).change(:sec=>0).change(:min => 0)
|
52
|
+
data = data.group_by {|d| (Time.zone.at(d["date"].to_i).change(:day=>1).change(:hour=>0).change(:sec=>0).change(:min => 0)).to_i }
|
58
53
|
end
|
59
54
|
|
55
|
+
# Initialize result set array
|
56
|
+
result_set = []
|
57
|
+
|
58
|
+
# Build Result Set by Time Zone
|
60
59
|
while start_date <= end_date
|
61
|
-
if data
|
62
|
-
|
60
|
+
if data[start_date.to_i].nil?
|
61
|
+
result_set << {"date" => "#{start_date.to_i}", @for => 0}
|
62
|
+
else
|
63
|
+
result_set << {"date" => "#{start_date.to_i}", @for => data[start_date.to_i].map{|di| di[@for.to_s].to_i}.inject(0, :+)}
|
63
64
|
end
|
64
65
|
|
65
66
|
case grain
|
@@ -72,9 +73,8 @@ module Mongoid #:nodoc:
|
|
72
73
|
end
|
73
74
|
end
|
74
75
|
end
|
75
|
-
|
76
|
-
|
77
|
-
return data
|
76
|
+
|
77
|
+
return result_set
|
78
78
|
end
|
79
79
|
|
80
80
|
|
@@ -82,11 +82,11 @@ module Mongoid #:nodoc:
|
|
82
82
|
def group_by(date,grain,opts={})
|
83
83
|
# Get Offset
|
84
84
|
if date.is_a?(Range)
|
85
|
-
off_set = date.
|
85
|
+
off_set = date.last.utc_offset
|
86
86
|
else
|
87
87
|
off_set = date.utc_offset
|
88
88
|
end
|
89
|
-
data = collection_for_group(date,
|
89
|
+
data = collection_for_group(date,HOUR,0,opts)
|
90
90
|
return data
|
91
91
|
end
|
92
92
|
|
data/spec/gatoroid_spec.rb
CHANGED
@@ -10,6 +10,7 @@ end
|
|
10
10
|
describe Mongoid::Gator do
|
11
11
|
before(:all) do
|
12
12
|
@gatoroid_version = File.read(File.expand_path("../VERSION", File.dirname(__FILE__)))
|
13
|
+
Time.zone = 'UTC'
|
13
14
|
end
|
14
15
|
|
15
16
|
it "should expose the same version as the VERSION file" do
|
@@ -88,23 +89,40 @@ describe Mongoid::Gator do
|
|
88
89
|
|
89
90
|
|
90
91
|
it "should give 1 for today stats" do
|
92
|
+
lambda { @obj.visits.add(1,:siteid=>100) }.should_not raise_error Mongoid::Errors::ModelNotSaved
|
91
93
|
@obj.visits.today(:siteid=>100).should == 1
|
92
94
|
end
|
93
95
|
|
94
|
-
it "should give
|
95
|
-
@obj.visits.
|
96
|
+
it "should give 1 for yesterday stats" do
|
97
|
+
lambda { @obj.visits.add(1,:siteid=>100, :date=>Time.now - 1.day) }.should_not raise_error Mongoid::Errors::ModelNotSaved
|
98
|
+
@obj.visits.yesterday(:siteid=>100).should == 1
|
96
99
|
end
|
97
100
|
|
98
101
|
it "should give 1 for using on for today stats" do
|
102
|
+
lambda { @obj.visits.add(1,:siteid=>100) }.should_not raise_error Mongoid::Errors::ModelNotSaved
|
99
103
|
@obj.visits.on(Time.now,:siteid=>100).should == 1
|
100
104
|
end
|
101
105
|
|
102
106
|
it "should give 1 for last stats" do
|
103
|
-
@obj.visits.
|
107
|
+
lambda { @obj.visits.add(1,:siteid=>100, :date=>Time.now - 6.day) }.should_not raise_error Mongoid::Errors::ModelNotSaved
|
108
|
+
lambda { @obj.visits.add(1,:siteid=>100, :date=>Time.now - 5.day) }.should_not raise_error Mongoid::Errors::ModelNotSaved
|
109
|
+
lambda { @obj.visits.add(1,:siteid=>100, :date=>Time.now - 4.day) }.should_not raise_error Mongoid::Errors::ModelNotSaved
|
110
|
+
lambda { @obj.visits.add(1,:siteid=>100, :date=>Time.now - 3.day) }.should_not raise_error Mongoid::Errors::ModelNotSaved
|
111
|
+
lambda { @obj.visits.add(1,:siteid=>100, :date=>Time.now - 2.day) }.should_not raise_error Mongoid::Errors::ModelNotSaved
|
112
|
+
lambda { @obj.visits.add(1,:siteid=>100, :date=>Time.now - 1.day) }.should_not raise_error Mongoid::Errors::ModelNotSaved
|
113
|
+
lambda { @obj.visits.add(1,:siteid=>100) }.should_not raise_error Mongoid::Errors::ModelNotSaved
|
114
|
+
@obj.visits.last(7,:siteid=>100).should == 7
|
104
115
|
end
|
105
116
|
|
106
|
-
it "should have 1 record using range method for today and yesterday at day grain" do
|
107
|
-
@obj.visits.
|
117
|
+
it "should have 1 record using range method for today and yesterday at day grain", :kevtest => true do
|
118
|
+
lambda { @obj.visits.add(100,:siteid=>100) }.should_not raise_error Mongoid::Errors::ModelNotSaved
|
119
|
+
1.upto(365){ | x |
|
120
|
+
1.upto(2){ |y|
|
121
|
+
lambda { @obj.visits.add(1,:siteid=>100, :date=>Time.now + x.days + y.hours) }.should_not raise_error Mongoid::Errors::ModelNotSaved
|
122
|
+
}
|
123
|
+
}
|
124
|
+
Time.zone = "Pacific Time (US & Canada)"
|
125
|
+
@obj.visits.range(Time.zone.now..Time.zone.now + 365.day,Mongoid::Gator::Readers::DAY, :siteid=>100).should have(366).record
|
108
126
|
end
|
109
127
|
|
110
128
|
it "should have 1 record using range method for today and yesterday at hour grain" do
|
@@ -176,19 +194,28 @@ describe Mongoid::Gator do
|
|
176
194
|
end
|
177
195
|
|
178
196
|
it "should give 1 for today stats" do
|
179
|
-
Test.visits.
|
197
|
+
lambda { Test.visits.add(1,:siteid=>200) }.should_not raise_error Mongoid::Errors::ModelNotSaved
|
198
|
+
Test.visits.today(:siteid=>200).should == 1
|
180
199
|
end
|
181
200
|
|
182
201
|
it "should give 0 for yesterday stats" do
|
183
202
|
Test.visits.yesterday(:siteid=>200).should == 0
|
184
203
|
end
|
185
204
|
|
186
|
-
it "should give 1 for using
|
187
|
-
Test.visits.
|
205
|
+
it "should give 1 for using ON for today stats" do
|
206
|
+
lambda { Test.visits.add(1,:siteid=>200) }.should_not raise_error Mongoid::Errors::ModelNotSaved
|
207
|
+
Test.visits.on(Time.now,:siteid=>200).should == 1
|
188
208
|
end
|
189
209
|
|
190
210
|
it "should give 1 for last stats" do
|
191
|
-
Test.visits.
|
211
|
+
lambda { Test.visits.add(1,:siteid=>200, :date => Time.now - 6.days) }.should_not raise_error Mongoid::Errors::ModelNotSaved
|
212
|
+
lambda { Test.visits.add(1,:siteid=>200, :date => Time.now - 5.days) }.should_not raise_error Mongoid::Errors::ModelNotSaved
|
213
|
+
lambda { Test.visits.add(1,:siteid=>200, :date => Time.now - 4.days) }.should_not raise_error Mongoid::Errors::ModelNotSaved
|
214
|
+
lambda { Test.visits.add(1,:siteid=>200, :date => Time.now - 3.days) }.should_not raise_error Mongoid::Errors::ModelNotSaved
|
215
|
+
lambda { Test.visits.add(1,:siteid=>200, :date => Time.now - 2.days) }.should_not raise_error Mongoid::Errors::ModelNotSaved
|
216
|
+
lambda { Test.visits.add(1,:siteid=>200, :date => Time.now - 1.days) }.should_not raise_error Mongoid::Errors::ModelNotSaved
|
217
|
+
lambda { Test.visits.add(1,:siteid=>200) }.should_not raise_error Mongoid::Errors::ModelNotSaved
|
218
|
+
Test.visits.last(7,:siteid=>200).should ==7
|
192
219
|
end
|
193
220
|
|
194
221
|
it "should have 1 record using range method for today and yesterday at day grain" do
|
data/spec/spec_helper.rb
CHANGED
@@ -21,7 +21,21 @@ end
|
|
21
21
|
|
22
22
|
RSpec.configure do |config|
|
23
23
|
config.mock_with :mocha
|
24
|
-
|
25
|
-
|
24
|
+
|
25
|
+
# keep our mongo DB all shiney and new between tests
|
26
|
+
require 'database_cleaner'
|
27
|
+
|
28
|
+
config.before(:suite) do
|
29
|
+
DatabaseCleaner.strategy = :truncation
|
30
|
+
DatabaseCleaner.orm = "mongoid"
|
31
|
+
end
|
32
|
+
|
33
|
+
config.before(:each) do
|
34
|
+
DatabaseCleaner.clean
|
35
|
+
end
|
36
|
+
|
37
|
+
config.after(:each) do
|
38
|
+
DatabaseCleaner.clean
|
26
39
|
end
|
40
|
+
|
27
41
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gatoroid
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.13
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-11-13 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: mongoid
|
16
|
-
requirement: &
|
16
|
+
requirement: &2152253900 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: 2.1.0
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *2152253900
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: rake
|
27
|
-
requirement: &
|
27
|
+
requirement: &2152253120 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *2152253120
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: jeweler
|
38
|
-
requirement: &
|
38
|
+
requirement: &2152252140 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *2152252140
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: rspec
|
49
|
-
requirement: &
|
49
|
+
requirement: &2152251320 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: 2.2.0
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *2152251320
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: mocha
|
60
|
-
requirement: &
|
60
|
+
requirement: &2152250640 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ! '>='
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: '0'
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *2152250640
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: bson_ext
|
71
|
-
requirement: &
|
71
|
+
requirement: &2152249980 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ! '>='
|
@@ -76,7 +76,18 @@ dependencies:
|
|
76
76
|
version: '0'
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *2152249980
|
80
|
+
- !ruby/object:Gem::Dependency
|
81
|
+
name: database_cleaner
|
82
|
+
requirement: &2152249120 !ruby/object:Gem::Requirement
|
83
|
+
none: false
|
84
|
+
requirements:
|
85
|
+
- - =
|
86
|
+
- !ruby/object:Gem::Version
|
87
|
+
version: 0.8.0
|
88
|
+
type: :development
|
89
|
+
prerelease: false
|
90
|
+
version_requirements: *2152249120
|
80
91
|
description: Gatoroid is a way to store analytics using the poweful features of MongoDB
|
81
92
|
for scalability
|
82
93
|
email: kevinjhaight@gmail.com
|