simple_time_series 0.1.6 → 0.1.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +24 -2
- data/lib/simple_time_series/simple_time_series.rb +10 -1
- data/lib/simple_time_series/version.rb +1 -1
- data/spec/lib/simple_time_series_spec.rb +14 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ea71f33d9379194751d0185a8c80785f6f107e75
|
4
|
+
data.tar.gz: 4c0cfefa649209183c53a447e4a1421c77ce3429
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 91c7b8b6e4d342656d125b94270b9365c2a6bab5c5e79ae9c8963d015dcd2e49212e26a6db242fa800fe5c434197c5c768d7d08e9dbbdd9c88d4b33d6ab5d16b
|
7
|
+
data.tar.gz: 7dc09d39e91eb4e636bd70690164f10357ab5ec2d30916e63e6a2ea20dffe4802c19ebb3af20a9f19b446d6f9561ed183420adbbd83da4f4d4bea3ca9916bb86
|
data/README.md
CHANGED
@@ -42,14 +42,36 @@ This is sufficient to package up your data into a SimpleTimeSeries object:
|
|
42
42
|
'miles' => miles,
|
43
43
|
'tasks_done' => tasks_done})
|
44
44
|
|
45
|
-
If
|
45
|
+
If a data array contains strings that should be converted to numeric values, you can call #to_num on the data array and its values will be converted to integers (where possible) or floats:
|
46
46
|
|
47
47
|
donuts = ["6", "0", "2", "4.5", "1.5", "0", "9"]
|
48
48
|
new_data = SimpleTimeSeries.new(:time_vars => {'dates' => dates},
|
49
49
|
:data_vars => {'donuts' => donuts.to_num})
|
50
50
|
new_data.current('donuts') #returns [6, 0, 2, 4.5, 1.5, 0, 9]
|
51
51
|
|
52
|
-
You can
|
52
|
+
You can, optionally, pass a hash of :attribs into SimpleTimeSeries.new with additional attributes for each of your time_vars and data_vars. You can call these attributes anything you want and then query their values later. For example, we can associate each data_var with a :full_name, :color, and :position (but you can call your variables almost anything you want):
|
53
|
+
|
54
|
+
my_data = SimpleTimeSeries.new(:time_vars => {'dows' => dows,
|
55
|
+
'dates' => dates,
|
56
|
+
'full_dates' => full_dates},
|
57
|
+
:data_vars => {'pizzas' => pizzas,
|
58
|
+
'miles' => miles,
|
59
|
+
'tasks_done' => tasks_done},
|
60
|
+
:attribs => {'pizzas' => {:full_name => 'Pizzas Eaten', :color => 'red', :position => 2},
|
61
|
+
'miles' => {:full_name => 'Miles Run', :color => 'green', :position => 3},
|
62
|
+
'tasks_done' => {:full_name => 'Tasks Completed', :color => 'yellow', :position => 1}
|
63
|
+
} )
|
64
|
+
|
65
|
+
After doing so, you can then grab these values:
|
66
|
+
|
67
|
+
my_data.full_name('pizzas') # returns 'Pizzas Eaten'
|
68
|
+
my_data.full_name('miles') # returns 'Miles Run'
|
69
|
+
my_data.color('miles') # returns 'green'
|
70
|
+
my_data.color('tasks_done') # returns 'yellow'
|
71
|
+
my_data.position('pizzas') # returns 2
|
72
|
+
my_data.position('miles') # returns 3
|
73
|
+
|
74
|
+
You can easily access the value of any data variable for any value of one of your time variables via xxx_on methods created for each of your data_vars (here called 'pizzas_on,' 'miles_on' and 'tasks_done_on'):
|
53
75
|
|
54
76
|
puts "Pizzas eaten on Tuesday: #{my_data.pizzas_on('Tuesday')}" # prints 1
|
55
77
|
puts "Pizzas eaten on 2014-01-03: #{my_data.pizzas_on('2014-01-03')}" # prints 1
|
@@ -2,15 +2,24 @@ class SimpleTimeSeries
|
|
2
2
|
|
3
3
|
DEBUG = false
|
4
4
|
|
5
|
-
attr_accessor :time_vars, :data_vars
|
5
|
+
attr_accessor :time_vars, :data_vars, :attribs
|
6
6
|
|
7
7
|
def initialize(opts)
|
8
8
|
@time_vars = opts[:time_vars]
|
9
9
|
@data_vars = opts[:data_vars]
|
10
|
+
@attribs = opts[:attribs]
|
10
11
|
define_data_methods_and_set_values
|
11
12
|
define_time_methods_and_set_values
|
12
13
|
end
|
13
14
|
|
15
|
+
def method_missing(meth, *args, &block)
|
16
|
+
begin
|
17
|
+
attribs[args[0]][meth]
|
18
|
+
rescue
|
19
|
+
super
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
14
23
|
def find(what, date, end_date=nil, opts={})
|
15
24
|
puts "Calling send(#{what}_on, #{date}, #{end_date}, #{opts})" if DEBUG
|
16
25
|
send((what + '_on').to_sym, date, end_date, opts)
|
@@ -14,7 +14,20 @@ describe SimpleTimeSeries do
|
|
14
14
|
'tasks_done' => @tasks_done, 'empty' => []},
|
15
15
|
:time_vars =>
|
16
16
|
{'dows' => @dows, 'dates' => @dates,
|
17
|
-
'full_dates' => @full_dates}
|
17
|
+
'full_dates' => @full_dates},
|
18
|
+
:attribs => {'pizzas' => {:full_name => 'Pizzas Eaten', :color => 'red', :position => 2},
|
19
|
+
'miles' => {:full_name => 'Miles Run', :color => 'green', :position => 3},
|
20
|
+
'tasks_done' => {:full_name => 'Tasks Completed', :color => 'yellow', :position => 1}
|
21
|
+
} )
|
22
|
+
end
|
23
|
+
|
24
|
+
it "finds values in :attribs" do
|
25
|
+
@my_data.full_name('pizzas').should == 'Pizzas Eaten'
|
26
|
+
@my_data.full_name('miles').should == 'Miles Run'
|
27
|
+
@my_data.color('miles').should == 'green'
|
28
|
+
@my_data.color('tasks_done').should == 'yellow'
|
29
|
+
@my_data.position('pizzas').should == 2
|
30
|
+
@my_data.position('miles').should == 3
|
18
31
|
end
|
19
32
|
|
20
33
|
it "is creatable" do
|