gatoroid 0.2.2 → 0.2.3

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.2
1
+ 0.2.3
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.2"
8
+ s.version = "0.2.3"
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-07"
12
+ s.date = "2012-06-08"
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
@@ -25,9 +25,9 @@ module Mongoid #:nodoc:
25
25
  end
26
26
 
27
27
  # Get collections for
28
- def collection_for(date,grain, opts={})
28
+ def collection_for(date,grain,off_set,opts={})
29
29
  unless date.nil?
30
- return @object.collection.group(:keyf => create_fkey(grain),
30
+ return @object.collection.group(:keyf => create_fkey(grain,off_set),
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})
@@ -45,23 +45,36 @@ module Mongoid #:nodoc:
45
45
  end
46
46
  case level
47
47
  when HOUR
48
- return sdate.change(:sec=>0), edate.change(:sec=>0)
48
+ return sdate.change(:sec=>0), edate.change(:sec=>0) + 1.hour
49
49
  when DAY
50
- return sdate.change(:hour=>0).change(:sec=>0), edate.change(:hour=>24).change(:sec=>0)
50
+ return sdate.change(:hour=>0).change(:sec=>0), edate.change(:hour=>0).change(:sec=>0) + 1.day
51
51
  when MONTH
52
52
  return sdate.change(:day=>1).change(:hour=>0).change(:sec=>0), edate.change(:day=>1).change(:hour=>0).change(:sec=>0) + 1.month
53
53
  end
54
54
  end
55
55
 
56
56
  # Create fkey
57
- def create_fkey(grain)
57
+ def create_fkey(grain,off_set)
58
58
  case grain
59
59
  when HOUR
60
60
  fkey = Javascript.aggregate_hour
61
61
  when MONTH
62
- fkey = Javascript.aggregate_month
62
+ fkey = "function(doc) {
63
+ off_set = #{off_set} * 1000;
64
+ dd = new Date((doc.date + #{off_set})* 1000);
65
+ utc_date = parseInt((Date.parse((dd.getUTCMonth() + 1) + '/' + '01' + '/' + dd.getUTCFullYear()) / 1000)/86400)*86400;
66
+ out = (utc_date - #{off_set});
67
+ return {date: out.toFixed(0)};
68
+ }"
69
+
63
70
  else # DEFAULT TO DAY
64
- fkey = Javascript.aggregate_day
71
+ fkey = "function(doc) {
72
+ off_set = #{off_set} * 1000;
73
+ dd = new Date((doc.date + #{off_set})* 1000);
74
+ utc_date = parseInt((Date.parse((dd.getUTCMonth() + 1) + '/' + dd.getUTCDate() + '/' + dd.getUTCFullYear()) / 1000)/86400)*86400;
75
+ out = (utc_date - #{off_set});
76
+ return {date: out.toFixed(0)};
77
+ }"
65
78
  end
66
79
  return fkey
67
80
  end
@@ -201,4 +214,4 @@ module Mongoid #:nodoc:
201
214
 
202
215
  end
203
216
  end
204
- end
217
+ end
@@ -1,17 +1,17 @@
1
1
  aggregate_hour:
2
- "function(doc) {
3
- d = new Date(doc.date* 1000);
4
- return {date: (Date.parse((d.getMonth() + 1) + '/' + d.getDate() + '/' + d.getFullYear() + ' ' + d.getHours() + ':00:00') / 1000).toFixed(0)};
2
+ "function(doc) {
3
+ d = new Date(doc.date* 1000);
4
+ return {date: (Date.parse((d.getMonth() + 1) + '/' + d.getDate() + '/' + d.getFullYear() + ' ' + d.getHours() + ':00:00') / 1000).toFixed(0)};
5
5
  }"
6
-
6
+
7
7
  aggregate_day:
8
- "function(doc) {
9
- d = new Date(doc.date* 1000);
10
- return {date: (Date.parse((d.getMonth() + 1) + '/' + d.getDate() + '/' + d.getFullYear()) / 1000).toFixed(0)};
8
+ "function(doc) {
9
+ d = new Date(doc.date* 1000);
10
+ return {date: (Date.parse((d.getMonth() + 1) + '/' + d.getDate() + '/' + d.getFullYear() + ' 00::00') / 1000).toFixed(0)};
11
11
  }"
12
-
12
+
13
13
  aggregate_month:
14
- "function(doc) {
15
- d = new Date(doc.date* 1000);
16
- return {date: (Date.parse((d.getMonth() + 1) + '/1/' + d.getFullYear()) / 1000).toFixed(0)};
17
- }"
14
+ "function(doc) {
15
+ d = new Date(doc.date* 1000);
16
+ return {date: (Date.parse((d.getMonth() + 1) + '/1/' + d.getFullYear()) / 1000).toFixed(0)};
17
+ }
data/lib/gator/readers.rb CHANGED
@@ -7,15 +7,15 @@ module Mongoid #:nodoc:
7
7
  DAY = "DAY"
8
8
  MONTH = "MONTH"
9
9
  DEFAULT_GRAIN = DAY
10
-
10
+
11
11
  # Today - Gets total for today on DAY level
12
12
  def today(opts={})
13
- total_for(Time.now, DEFAULT_GRAIN, opts).to_i
13
+ total_for(Time.zone.now, DEFAULT_GRAIN, opts).to_i
14
14
  end
15
-
15
+
16
16
  # Yesterday - Gets total for tomorrow on DAY level
17
17
  def yesterday(opts={})
18
- total_for(Time.now - 1.day, DEFAULT_GRAIN,opts).to_i
18
+ total_for(Time.zone.now - 1.day, DEFAULT_GRAIN,opts).to_i
19
19
  end
20
20
 
21
21
  # On - Gets total for a specified day on DAY level
@@ -25,31 +25,40 @@ module Mongoid #:nodoc:
25
25
 
26
26
  # Range - retuns a collection for a specified range on specified level
27
27
  def range(date, grain=DEFAULT_GRAIN, opts={})
28
- data = collection_for(date,grain,opts)
28
+ # Get Offset
29
+ if date.is_a?(Range)
30
+ off_set = date.first.utc_offset
31
+ else
32
+ off_set = date.utc_offset
33
+ end
34
+
35
+
36
+ data = collection_for(date,grain,off_set,opts)
37
+
29
38
  # Add Zero values for dates missing
30
39
  # May want to look into a way to get mongo to do this
31
40
  if date.is_a?(Range)
32
41
  start_date = date.first
33
42
  end_date = date.last
34
-
43
+
35
44
  case grain
36
45
  when HOUR
37
- start_date = start_date.change(:sec=>0)
38
- end_date = end_date.change(:sec=>0)
46
+ start_date.change(:sec=>0)
47
+ end_date.change(:sec=>0)
39
48
  when DAY
40
- start_date = start_date.change(:hour=>0).change(:sec=>0)
41
- end_date = end_date.change(:hour=>0).change(:sec=>0)
49
+ start_date.change(:hour=>0).change(:sec=>0)
50
+ end_date.change(:hour=>0).change(:sec=>0)
42
51
  when MONTH
43
- start_date = start_date.change(:day=>1).change(:hour=>0).change(:sec=>0)
44
- end_date = start_date.change(:day=>1).change(:hour=>0).change(:sec=>0)
52
+ start_date.change(:day=>1).change(:hour=>0).change(:sec=>0)
53
+ end_date.change(:day=>1).change(:hour=>0).change(:sec=>0)
45
54
  end
46
-
47
-
55
+
48
56
  while start_date <= end_date
49
57
  if data.select{|item| item['date'].to_i == start_date.to_i}.first.nil?
50
- data << {"date" => "#{start_date.to_i}", @for => 0}
51
- end
52
- case grain
58
+ data << {"date" => "#{start_date.to_i}", @for => 0}
59
+ end
60
+
61
+ case grain
53
62
  when HOUR
54
63
  start_date = start_date + 1.hour
55
64
  when DAY
@@ -57,13 +66,12 @@ module Mongoid #:nodoc:
57
66
  when MONTH
58
67
  start_date = start_date + 1.month
59
68
  end
60
- end
61
- end
62
- # Sort by date
63
- data = data.sort_by { |hsh| hsh["date"] }
64
- return data
69
+ end
70
+ end
71
+ # Sort by date
72
+ data = data.sort_by { |hsh| hsh["date"] }
73
+ return data
65
74
  end
66
-
67
75
  end
68
76
  end
69
77
  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.2
4
+ version: 0.2.3
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-07 00:00:00.000000000 Z
12
+ date: 2012-06-08 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: mongoid
16
- requirement: &2156253380 !ruby/object:Gem::Requirement
16
+ requirement: &2156222560 !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: *2156253380
24
+ version_requirements: *2156222560
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: rake
27
- requirement: &2156252880 !ruby/object:Gem::Requirement
27
+ requirement: &2156222060 !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: *2156252880
35
+ version_requirements: *2156222060
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: jeweler
38
- requirement: &2156252340 !ruby/object:Gem::Requirement
38
+ requirement: &2156221520 !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: *2156252340
46
+ version_requirements: *2156221520
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rspec
49
- requirement: &2156251760 !ruby/object:Gem::Requirement
49
+ requirement: &2156220960 !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: *2156251760
57
+ version_requirements: *2156220960
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: mocha
60
- requirement: &2156251240 !ruby/object:Gem::Requirement
60
+ requirement: &2156220440 !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: *2156251240
68
+ version_requirements: *2156220440
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: bson_ext
71
- requirement: &2156250620 !ruby/object:Gem::Requirement
71
+ requirement: &2156219800 !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: *2156250620
79
+ version_requirements: *2156219800
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