trackoid 0.3.5 → 0.3.6

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