gatoroid 0.2.9 → 0.2.10

Sign up to get free protection for your applications and to get access to all the features.
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