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 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