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 +2 -0
- data/VERSION +1 -1
- data/lib/trackoid/core_ext/time.rb +8 -0
- data/lib/trackoid/readers.rb +5 -2
- data/lib/trackoid/tracker.rb +43 -2
- data/trackoid.gemspec +2 -2
- metadata +3 -3
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.
|
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}"
|
data/lib/trackoid/readers.rb
CHANGED
@@ -28,8 +28,11 @@ module Mongoid #:nodoc:
|
|
28
28
|
end
|
29
29
|
|
30
30
|
def on(date)
|
31
|
-
|
32
|
-
|
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
|
data/lib/trackoid/tracker.rb
CHANGED
@@ -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
|
-
|
149
|
-
|
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.
|
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-
|
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
|
-
-
|
9
|
-
version: 0.3.
|
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-
|
17
|
+
date: 2011-05-01 00:00:00 +02:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|