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 +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
|