simple_time_series 0.1.6 → 0.1.7
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.
- 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
|