trackoid 0.3.5 → 0.3.6

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/README.rdoc CHANGED
@@ -315,6 +315,8 @@ Trackoid will correctly translate dates for you (hopefully) if you pass a date t
315
315
 
316
316
  = Revision History
317
317
 
318
+ 0.3.6 - Optimization for 'on' reader for ranges. Many times fold quicker.
319
+
318
320
  0.3.5 - BUGFIX: ReaderExtender "+" acted like an accumulator. Problem more
319
321
  evident when using ActiveSupport "sum" for arrays.
320
322
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.3.5
1
+ 0.3.6
@@ -22,10 +22,18 @@ class Time
22
22
  self.dup.utc.to_i / ONEDAY
23
23
  end
24
24
 
25
+ def to_key_timestamp
26
+ to_i_timestamp.to_s
27
+ end
28
+
25
29
  def to_i_hour
26
30
  self.dup.utc.hour
27
31
  end
28
32
 
33
+ def to_key_hour
34
+ to_i_hour.to_s
35
+ end
36
+
29
37
  # Returns an integer to use as MongoDB key
30
38
  def to_key
31
39
  "#{to_i_timestamp}.#{to_i_hour}"
@@ -28,8 +28,11 @@ module Mongoid #:nodoc:
28
28
  end
29
29
 
30
30
  def on(date)
31
- return date.collect {|d| whole_data_for(d)} if date.is_a?(Range)
32
- whole_data_for(date)
31
+ if date.is_a?(Range)
32
+ whole_data_for_range(date)
33
+ else
34
+ whole_data_for(date)
35
+ end
33
36
  end
34
37
 
35
38
  def all_values
@@ -145,11 +145,50 @@ module Mongoid #:nodoc:
145
145
  def whole_data_for(date)
146
146
  unless date.nil?
147
147
  date = normalize_date(date)
148
- h = date.whole_day.hour_collect {|d| data_for(d)}
149
- ReaderExtender.new(h.sum, h)
148
+ if date.utc?
149
+ d = expand_hash @data[date.to_key_timestamp]
150
+ ReaderExtender.new(d.sum, d)
151
+ else
152
+ r = date.whole_day
153
+ d1 = expand_hash @data[r.first.to_key_timestamp]
154
+ d2 = expand_hash @data[r.last.to_key_timestamp]
155
+ t = d1[r.first.to_i_hour, 24] + d2[0, r.first.to_i_hour]
156
+ ReaderExtender.new(t.sum, t)
157
+ end
150
158
  end
151
159
  end
152
160
 
161
+ def whole_data_for_range(date)
162
+ date = normalize_date(date)
163
+ if date.first.utc?
164
+ keys = date.map(&:to_key_timestamp)
165
+ keys.inject([]) {|r,e|
166
+ d = expand_hash(@data[e])
167
+ r << ReaderExtender.new(d.sum, d)
168
+ }
169
+ else
170
+ first = date.first.whole_day.first.to_key_timestamp
171
+ last = date.last.whole_day.last.to_key_timestamp
172
+ pivot = date.first.whole_day.first.to_i_hour
173
+ acc = expand_hash(@data[first.to_s])
174
+
175
+ data = []
176
+ first.succ.upto(last) do |n|
177
+ d = expand_hash(@data[n])
178
+ t = acc[pivot, 24] + d[0, pivot]
179
+ acc = d
180
+ data << ReaderExtender.new(t.sum, t)
181
+ end
182
+ data
183
+ end
184
+ end
185
+
186
+ def expand_hash(h)
187
+ d = Array.new(24, 0)
188
+ h.inject(d) {|d,e| d[e.first.to_i] = e.last; d} if h
189
+ d
190
+ end
191
+
153
192
  def update_data(value, date)
154
193
  unless date.nil?
155
194
  return remove_data(date) unless value
@@ -188,6 +227,8 @@ module Mongoid #:nodoc:
188
227
  Time.parse(date)
189
228
  when Date
190
229
  date.to_time
230
+ when Range
231
+ normalize_date(date.first)..normalize_date(date.last)
191
232
  else
192
233
  date
193
234
  end
data/trackoid.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{trackoid}
8
- s.version = "0.3.5"
8
+ s.version = "0.3.6"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Jose Miguel Perez"]
12
- s.date = %q{2011-04-29}
12
+ s.date = %q{2011-05-01}
13
13
  s.description = %q{Trackoid uses an embeddable approach to track analytics data using the poweful features of MongoDB for scalability}
14
14
  s.email = %q{josemiguel@perezruiz.com}
15
15
  s.extra_rdoc_files = [
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 3
8
- - 5
9
- version: 0.3.5
8
+ - 6
9
+ version: 0.3.6
10
10
  platform: ruby
11
11
  authors:
12
12
  - Jose Miguel Perez
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2011-04-29 00:00:00 -07:00
17
+ date: 2011-05-01 00:00:00 +02:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency