gatoroid 0.2.12 → 0.2.13

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -8,4 +8,5 @@ group :development do
8
8
  gem 'rspec', '>= 2.2.0'
9
9
  gem 'mocha'
10
10
  gem 'bson_ext'
11
+ gem 'database_cleaner', '0.8.0'
11
12
  end
@@ -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.12
1
+ 0.2.13
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "gatoroid"
8
- s.version = "0.2.12"
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-09-04"
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
 
@@ -25,9 +25,9 @@ module Mongoid #:nodoc:
25
25
  end
26
26
 
27
27
  # Get collections for
28
- def collection_for(date,grain,off_set,opts={})
28
+ def collection_for(date,grain,opts={})
29
29
  unless date.nil?
30
- return @object.collection.group(:keyf => create_fkey(grain,off_set),
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
 
@@ -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
- # Get Offset
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.select{|item| item['date'].to_i == start_date.to_i}.first.nil?
62
- data << {"date" => "#{start_date.to_i}", @for => 0}
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
- # Sort by date
76
- data = data.sort_by { |hsh| hsh["date"] }
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.first.utc_offset
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,grain,off_set,opts)
89
+ data = collection_for_group(date,HOUR,0,opts)
90
90
  return data
91
91
  end
92
92
 
@@ -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 0 for yesterday stats" do
95
- @obj.visits.yesterday(:siteid=>100).should == 0
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.last(7,:siteid=>100).should == 1
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.range(Time.now..Time.now + 1.day,Mongoid::Gator::Readers::DAY, :siteid=>100).should have(2).record
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.today(:siteid=>200).should == 3
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 on for today stats" do
187
- Test.visits.on(Time.now,:siteid=>200).should == 3
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.last(7,:siteid=>200).should ==3
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
@@ -21,7 +21,21 @@ end
21
21
 
22
22
  RSpec.configure do |config|
23
23
  config.mock_with :mocha
24
- config.before :suite do
25
- Mongoid.master.collections.reject { |c| c.name =~ /^system\./ }.each(&:drop)
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.12
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-09-04 00:00:00.000000000 Z
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: &2156253340 !ruby/object:Gem::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: *2156253340
24
+ version_requirements: *2152253900
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: rake
27
- requirement: &2156252860 !ruby/object:Gem::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: *2156252860
35
+ version_requirements: *2152253120
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: jeweler
38
- requirement: &2156252320 !ruby/object:Gem::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: *2156252320
46
+ version_requirements: *2152252140
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rspec
49
- requirement: &2156251740 !ruby/object:Gem::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: *2156251740
57
+ version_requirements: *2152251320
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: mocha
60
- requirement: &2156251220 !ruby/object:Gem::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: *2156251220
68
+ version_requirements: *2152250640
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: bson_ext
71
- requirement: &2156250600 !ruby/object:Gem::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: *2156250600
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