simple_time_series 0.0.9 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a1de65d10a8508cd676b70cf80ed57c89ec66d2f
|
4
|
+
data.tar.gz: 662431d9c143297aa5b992cde8331a6c39892035
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ed5334c0dc23e5ad262eac7bcedbceedaed3ecf0b7a2c89e86029fd5365e6bd9b4605053f1480e54b8748532dc039fea43e322ef324d7df22f3ee9366350e870
|
7
|
+
data.tar.gz: 8b705e90fb271cd18e7d36576ba52f04f9251602630aca9a2dc6bcf8f88b0bac12a16482341971abfceb2b6f6167c31a02f57c8ada9ac79f9aa5383d5669bfe5
|
@@ -1,5 +1,7 @@
|
|
1
1
|
class SimpleTimeSeries
|
2
2
|
|
3
|
+
DEBUG = false
|
4
|
+
|
3
5
|
attr_accessor :time_vars, :data_vars
|
4
6
|
|
5
7
|
def initialize(opts)
|
@@ -9,12 +11,9 @@ class SimpleTimeSeries
|
|
9
11
|
define_time_methods_and_set_values
|
10
12
|
end
|
11
13
|
|
12
|
-
def find(what, date, end_date=nil)
|
13
|
-
if
|
14
|
-
|
15
|
-
else
|
16
|
-
send (what + '_on').to_sym, date
|
17
|
-
end
|
14
|
+
def find(what, date, end_date=nil, opts={})
|
15
|
+
puts "Calling send(#{what}_on, #{date}, #{end_date}, #{opts})" if DEBUG
|
16
|
+
send((what + '_on').to_sym, date, end_date, opts)
|
18
17
|
end
|
19
18
|
|
20
19
|
def find_plus_label(what, date, end_date=nil)
|
@@ -26,19 +25,20 @@ class SimpleTimeSeries
|
|
26
25
|
err_msg += "Example: {:start => 'Tuesday', :end => '2014-01-06'}\n"
|
27
26
|
err_msg += "If you want to use all observations, you can pass a blank hash, like {}\n"
|
28
27
|
raise err_msg unless opts
|
29
|
-
|
28
|
+
data_arr = []
|
30
29
|
Array(data_var_names).each do |name|
|
31
30
|
if opts[:start] && opts[:end]
|
32
|
-
|
31
|
+
puts "Calling find(#{name}, #{opts[:start]}, #{opts[:end]}, #{opts})" if DEBUG
|
32
|
+
data_arr << find(name, opts[:start], opts[:end], opts)
|
33
33
|
else
|
34
|
-
|
34
|
+
data_arr << current(name, opts)
|
35
35
|
end
|
36
36
|
end
|
37
|
-
|
37
|
+
data_arr
|
38
38
|
end
|
39
39
|
|
40
|
-
def current(what)
|
41
|
-
send
|
40
|
+
def current(what, opts={})
|
41
|
+
send(what.to_sym, opts)
|
42
42
|
end
|
43
43
|
|
44
44
|
def index_of_date_value(date)
|
@@ -62,7 +62,6 @@ class SimpleTimeSeries
|
|
62
62
|
|
63
63
|
def new_data_var(var, vals)
|
64
64
|
define_getter_and_setter(var)
|
65
|
-
var_on = "#{var}_on"
|
66
65
|
self.class.class_eval do
|
67
66
|
define_method("#{var}_subset") do |first, last=first|
|
68
67
|
start_idx = index_of_date_value(first)
|
@@ -98,26 +97,27 @@ class SimpleTimeSeries
|
|
98
97
|
return answer.length == 1 ? answer[0] : answer
|
99
98
|
end
|
100
99
|
end
|
101
|
-
define_method(
|
100
|
+
define_method("#{var}_on") do |first, last=nil, opts={}|
|
102
101
|
time_vars.each do |tv_key, tv_val|
|
103
102
|
# tv_key is something like 'dows' or 'dates'
|
104
103
|
# tv_val is an array of associated values
|
105
104
|
start_idx = index_of_date_value(first) || 0
|
106
105
|
last_idx = index_of_date_value(last) || (first.nil? ? -1 : start_idx)
|
107
|
-
|
108
|
-
|
109
|
-
|
106
|
+
puts "Called with #{first}, #{last}, #{opts}" if DEBUG
|
107
|
+
puts "start_idx = #{start_idx}; last_idx = #{last_idx}" if DEBUG
|
108
|
+
if start_idx != last_idx
|
109
|
+
arr = eval(var)[start_idx..last_idx]
|
110
|
+
return (opts[:prepend_names] ? arr.unshift(var) : arr)
|
111
|
+
elsif start_idx
|
110
112
|
return eval(var)[start_idx]
|
113
|
+
else
|
114
|
+
raise "Can't find #{var}_on for #{first}"
|
111
115
|
end
|
112
116
|
end
|
113
|
-
raise "Can't find #{var_on} for #{first}"
|
114
117
|
end
|
115
118
|
end
|
116
119
|
instance_variable_set("@#{var}", vals) if vals
|
117
120
|
data_vars[var] = vals unless data_vars.has_key?(var)
|
118
|
-
#def eval(var).[] (first, last)
|
119
|
-
# send "#{var}_subset".to_sym, first, last
|
120
|
-
#end
|
121
121
|
end
|
122
122
|
|
123
123
|
private
|
@@ -137,7 +137,9 @@ class SimpleTimeSeries
|
|
137
137
|
def define_getter_and_setter(var)
|
138
138
|
ivar = "@#{var}"
|
139
139
|
self.class.class_eval do
|
140
|
-
define_method(var) {
|
140
|
+
define_method(var) do |opts={}|
|
141
|
+
instance_variable_get ivar
|
142
|
+
end
|
141
143
|
define_method "#{var}=" do |val|
|
142
144
|
instance_variable_set ivar, val
|
143
145
|
end
|
@@ -276,17 +276,49 @@ describe SimpleTimeSeries do
|
|
276
276
|
|
277
277
|
describe "#data_array" do
|
278
278
|
|
279
|
-
it "builds an array of arrays
|
279
|
+
it "builds an array of specified arrays" do
|
280
280
|
@my_data.data_array('tasks_done', {}).should == [ @my_data.current('tasks_done') ]
|
281
|
-
@my_data.data_array('tasks_done',
|
282
|
-
|
281
|
+
@my_data.data_array('tasks_done', {}).should == [ [2, 3, 0, 14, 3, 11, 0] ]
|
282
|
+
@my_data.data_array('dates', 'tasks_done', 'pizzas', {}).
|
283
|
+
should == [ @my_data.current('dates'),
|
284
|
+
@my_data.current('tasks_done'),
|
285
|
+
@my_data.current('pizzas') ]
|
283
286
|
@my_data.data_array('tasks_done', 'pizzas', {:start => 'Tuesday', :end => 'Thursday'}).
|
284
|
-
|
285
|
-
|
286
|
-
#@my_data.data_array(['tasks_done', 'pizzas']).should == [ @my_data.current('tasks_done'),
|
287
|
-
# @my_data.current('pizzas') ]
|
287
|
+
should == [ @my_data.find('tasks_done','Tuesday','Thursday'),
|
288
|
+
@my_data.find('pizzas', '2014-01-03', 'Jan 5, 2014') ]
|
288
289
|
end
|
289
290
|
|
291
|
+
it "builds an array of specified arrays with variable names prepended to each array" do
|
292
|
+
@my_data.data_array('tasks_done', {:prepend_names => true}).
|
293
|
+
should == [ @my_data.current('tasks_done').unshift('tasks_done') ]
|
294
|
+
@my_data.data_array('tasks_done', {:prepend_names => true}).
|
295
|
+
should == [ ['tasks_done', 2, 3, 0, 14, 3, 11, 0] ]
|
296
|
+
@my_data.data_array('dates', 'tasks_done', 'pizzas', {:prepend_names => true}).
|
297
|
+
should == [ @my_data.current('dates').unshift('dates'),
|
298
|
+
@my_data.current('tasks_done').unshift('tasks_done'),
|
299
|
+
@my_data.current('pizzas').unshift('pizzas') ]
|
300
|
+
end
|
301
|
+
|
302
|
+
it "builds an array of specified arrays subsetted correctly with variable names prepended to each array" do
|
303
|
+
da = @my_data.data_array('tasks_done', 'pizzas', {:start => 'Monday', :end => 'Friday',
|
304
|
+
:prepend_names => true})
|
305
|
+
da[0].should == ['tasks_done', 3, 0, 14, 3, 11]
|
306
|
+
da[1].should == ['pizzas', 0, 1, 0, 0.5, 0]
|
307
|
+
#should == [ ['tasks_done', 3, 0, 14, 3, 11], ['pizzas', 0, 1, 0, 0.5, 0] ]
|
308
|
+
#should == [ ['tasks_done', 3, 0, 14, 3, 11], ['pizzas', 0, 1, 0, 0.5, 0] ]
|
309
|
+
#should == [ @my_data.find('tasks_done','Tuesday','Thursday'),
|
310
|
+
# @my_data.find('pizzas', '2014-01-03', 'Jan 5, 2014') ]
|
311
|
+
end
|
312
|
+
|
313
|
+
#it "builds an array of specified arrays with variable names prepended to each array" do
|
314
|
+
# @my_data.data_array('tasks_done', {}).should == [ @my_data.current('tasks_done') ]
|
315
|
+
# @my_data.data_array('tasks_done', 'pizzas', {:prepend_names => true}).should == [ @my_data.current('tasks_done'),
|
316
|
+
# @my_data.current('pizzas') ]
|
317
|
+
# @my_data.data_array('tasks_done', 'pizzas', {:start => 'Tuesday', :end => 'Thursday'}).
|
318
|
+
# should == [ @my_data.find('tasks_done','Tuesday','Thursday'),
|
319
|
+
# @my_data.find('pizzas', '2014-01-03', 'Jan 5, 2014') ]
|
320
|
+
#end
|
321
|
+
|
290
322
|
end
|
291
323
|
|
292
324
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: simple_time_series
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- James Lavin
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-06-
|
11
|
+
date: 2014-06-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|