gatoroid 0.2.9 → 0.2.10

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/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.9
1
+ 0.2.10
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.9"
8
+ s.version = "0.2.10"
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-06-30"
12
+ s.date = "2012-08-06"
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 = [
data/lib/gator/gatorer.rb CHANGED
@@ -34,6 +34,16 @@ module Mongoid #:nodoc:
34
34
  end
35
35
  end
36
36
 
37
+ # Get collections for group
38
+ def collection_for_group(date,off_set,opts={})
39
+ unless date.nil?
40
+ return @object.collection.group(:key => create_group_key_hash,
41
+ :reduce => "function(obj,prev){for (var key in obj.#{@for}) {prev.#{@for} += obj.#{@for}}}",
42
+ :cond=>create_query_hash(date,"HOUR",opts),
43
+ :initial => {@for => 0})
44
+ end
45
+ end
46
+
37
47
  # Convert date levels
38
48
  def convert_date_by_level(date,level)
39
49
  if date.is_a?(Range)
@@ -175,7 +185,6 @@ module Mongoid #:nodoc:
175
185
  @object.gator_keys.each do | gk |
176
186
  keys << gk
177
187
  end
178
- keys << :date
179
188
  return keys
180
189
  end
181
190
 
@@ -183,14 +192,17 @@ module Mongoid #:nodoc:
183
192
  def create_query_hash(date = Time.now, grain, opts)
184
193
  key_hash = Hash.new { |hash, key| hash[key] = [] }
185
194
  # Set Keys
186
- @object.gator_keys.each do | gk |
187
- raise Errors::ModelNotSaved, "Missing key value #{gk}" if opts[gk].nil?
188
- if opts[gk].kind_of?(Array)
189
- key_hash[gk] = {"$in" => opts[gk]}
190
- else
191
- key_hash[gk] = opts[gk]
195
+ if !opts.empty?
196
+ @object.gator_keys.each do | gk |
197
+ raise Errors::ModelNotSaved, "Missing key value #{gk}" if opts[gk].nil?
198
+ if opts[gk].kind_of?(Array)
199
+ key_hash[gk] = {"$in" => opts[gk]}
200
+ else
201
+ key_hash[gk] = opts[gk]
202
+ end
192
203
  end
193
204
  end
205
+
194
206
  sdate,edate = convert_date_by_level(date,grain) # Set Dates
195
207
  key_hash[:date] = {"$gte" => normalize_date(sdate), "$lt" => normalize_date(edate)}
196
208
  return key_hash
data/lib/gator/readers.rb CHANGED
@@ -76,6 +76,20 @@ module Mongoid #:nodoc:
76
76
  data = data.sort_by { |hsh| hsh["date"] }
77
77
  return data
78
78
  end
79
+
80
+
81
+ # Group_by - retuns a collection for a specific key
82
+ def group_by(date, opts={})
83
+ # Get Offset
84
+ if date.is_a?(Range)
85
+ off_set = date.first.utc_offset
86
+ else
87
+ off_set = date.utc_offset
88
+ end
89
+ data = collection_for_group(date,off_set,opts)
90
+ return data
91
+ end
92
+
79
93
  end
80
94
  end
81
95
  end
@@ -120,6 +120,12 @@ describe Mongoid::Gator do
120
120
  @obj.visits.today(:siteid=>100).should == 0
121
121
  end
122
122
 
123
+ it "should have 1 record using range method for today and yesterday at day grain", :test => true do
124
+ lambda { @obj.visits.add(1,:siteid=>100) }.should_not raise_error Mongoid::Errors::ModelNotSaved
125
+ lambda { @obj.visits.add(1,:siteid=>200) }.should_not raise_error Mongoid::Errors::ModelNotSaved
126
+ lambda { @obj.visits.add(1,:siteid=>200) }.should_not raise_error Mongoid::Errors::ModelNotSaved
127
+ @obj.visits.group_by(Time.now..Time.now + 1.day).should have(2).record
128
+ end
123
129
  end
124
130
 
125
131
 
@@ -201,6 +207,14 @@ describe Mongoid::Gator do
201
207
  Test.visits.reset(:date => Time.now, :siteid=>200).should_not raise_error Mongoid::Errors::ModelNotSaved
202
208
  Test.visits.today(:siteid=>200).should == 0
203
209
  end
210
+
211
+ it "should have 1 record using range method for today and yesterday at day grain", :test => true do
212
+ lambda { Test.visits.add(1,:siteid=>100) }.should_not raise_error Mongoid::Errors::ModelNotSaved
213
+ lambda { Test.visits.add(1,:siteid=>200) }.should_not raise_error Mongoid::Errors::ModelNotSaved
214
+ lambda { Test.visits.add(1,:siteid=>200) }.should_not raise_error Mongoid::Errors::ModelNotSaved
215
+ Test.visits.group_by(Time.now..Time.now + 1.day).should have(2).record
216
+ end
217
+
204
218
  end
205
219
 
206
220
  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.9
4
+ version: 0.2.10
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-06-30 00:00:00.000000000 Z
12
+ date: 2012-08-06 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: mongoid
16
- requirement: &2160144840 !ruby/object:Gem::Requirement
16
+ requirement: &2156253380 !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: *2160144840
24
+ version_requirements: *2156253380
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: rake
27
- requirement: &2160144220 !ruby/object:Gem::Requirement
27
+ requirement: &2156252880 !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: *2160144220
35
+ version_requirements: *2156252880
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: jeweler
38
- requirement: &2160143620 !ruby/object:Gem::Requirement
38
+ requirement: &2156252340 !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: *2160143620
46
+ version_requirements: *2156252340
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rspec
49
- requirement: &2160143040 !ruby/object:Gem::Requirement
49
+ requirement: &2156251760 !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: *2160143040
57
+ version_requirements: *2156251760
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: mocha
60
- requirement: &2160142400 !ruby/object:Gem::Requirement
60
+ requirement: &2156251240 !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: *2160142400
68
+ version_requirements: *2156251240
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: bson_ext
71
- requirement: &2160141860 !ruby/object:Gem::Requirement
71
+ requirement: &2156250620 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ! '>='
@@ -76,7 +76,7 @@ dependencies:
76
76
  version: '0'
77
77
  type: :development
78
78
  prerelease: false
79
- version_requirements: *2160141860
79
+ version_requirements: *2156250620
80
80
  description: Gatoroid is a way to store analytics using the poweful features of MongoDB
81
81
  for scalability
82
82
  email: kevinjhaight@gmail.com