simple_time_series 0.0.2 → 0.0.3

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: a9ad59d5ec507c02b79dfac4e610a9e53713b251
4
- data.tar.gz: e8a81306099468b983d7218253109766b274e00d
3
+ metadata.gz: a99423c6c3e3ef3717c741f6c62a8f6b7d432140
4
+ data.tar.gz: 94125e0737e9353a24c0e81ce75cd9c226742bde
5
5
  SHA512:
6
- metadata.gz: f1f60e0b32bae7007e5ff17a186abfd5ac8c16822000049a44a34f1ee3a9b597c85e98a29e1327179c5b6ffedc51d333a5640aa9c47a2fe4e720024b90d30471
7
- data.tar.gz: 9af94d475ed26267745dab1150b2fcf63f0c0d9495d85e5f0acdfdb53900132259cb6d0be1687876b9f210dfc2221a49e85898e746d30bfb5cec13ca7f236c4c
6
+ metadata.gz: 87f4f7d17a23a0eb793483b4864913d7319ffdd4675706c2b9899d262b854977e63263cb422928f80e4ab865e97b072cb57f96b64c32a4d8e5204fe08f033e5c
7
+ data.tar.gz: 1b6cfeab601d9fb0e70e7a44ddba59c1a378ea76f5e09d845b3ae38799cb45a6ab0963665f62b86d69f8e79321dda06e20c4c30ae40faff6f0e810a64aaedeff
data/README.md CHANGED
@@ -94,6 +94,50 @@ A second example of #set:
94
94
  puts my_data.tasks_done_on('2014-01-07') # prints 77
95
95
  puts my_data.tasks_done_on('Jan 7, 2014') # prints 77
96
96
 
97
+ You can use #set to build up a data variable from an empty array. Begin by assigning an empty array to a data_var:
98
+
99
+ my_data2 = SimpleTimeSeries.new(:time_vars => {'dows' => dows,
100
+ 'dates' => dates,
101
+ 'full_dates' => full_dates},
102
+ :data_vars => {'empty' => []}
103
+
104
+ You can then set individual values using #set till you've filled in all values:
105
+
106
+ my_data2.set('empty', 'Jan 1, 2014', 1)
107
+ my_data2.set('empty', 'Monday', 2)
108
+ my_data2.set('empty', '2014-01-03', 3)
109
+ my_data2.set('empty', 'Jan 4, 2014', 4)
110
+ my_data2.set('empty', 'Thursday', 5)
111
+ my_data2.set('empty', '2014-01-06', 6)
112
+ my_data2.set('empty', 'Jan 7, 2014', 7)
113
+
114
+ my_data2.empty now equals [1, 2, 3, 4, 5, 6, 7]
115
+
116
+ You can also create new time variables and data variables after you have created your SimpleTimeSeries object.
117
+
118
+ Here's how you can create and use a new time variable:
119
+
120
+ my_data.new_time_var('short_dow',['Sun', 'Mon', 'Tues', 'Wed', 'Thurs', 'Fri', 'Sat'])
121
+
122
+ puts my_data.tasks_done_on('Fri') # prints 11
123
+ puts my_data.pizzas_on('Thurs') # prints 0.5
124
+
125
+ Here's how you can create and use a new data variable:
126
+
127
+ my_data.new_data_var('hours_of_tv',[7, 3, 3.5, 3, 4, 6.5, 11])
128
+
129
+ puts my_data.hours_of_tv # prints [7, 3, 3.5, 3, 4, 6.5, 11]
130
+ puts my_data.hours_of_tv_on('Friday') # prints 6.5
131
+ puts my_data.hours_of_tv_on('2014-01-01') # prints 7
132
+
133
+ You can create new time and data variables and use them together:
134
+
135
+ my_data.new_time_var('short_dow',['Sun', 'Mon', 'Tues', 'Wed', 'Thurs', 'Fri', 'Sat'])
136
+ my_data.new_data_var('hours_of_tv',[7, 3, 3.5, 3, 4, 6.5, 11])
137
+
138
+ puts my_data.hours_of_tv_on('Fri') # prints 6.5
139
+ puts my_data.hours_of_tv_on('Sun') # prints 7
140
+
97
141
  Currently, SimpleTimeSeries assumes all variable arrays have equal lengths and represent the same sequence of observations. Though the gem says "time series," it should work with any kind of sequential data.
98
142
 
99
143
  ## Disclaimer
@@ -29,30 +29,41 @@ class SimpleTimeSeries
29
29
  current(data_var)[arr_index] = value
30
30
  end
31
31
 
32
+
33
+ def new_time_var(var, vals)
34
+ define_getter_and_setter(var)
35
+ instance_variable_set("@#{var}", vals) if vals
36
+ time_vars[var] = vals unless time_vars.has_key?(var)
37
+ end
38
+
39
+ def new_data_var(var, vals)
40
+ define_getter_and_setter(var)
41
+ var_on = "#{var}_on"
42
+ self.class.class_eval do
43
+ define_method(var_on) do |date|
44
+ time_vars.each do |tv_key, tv_val|
45
+ # tv_key is something like 'dows' or 'dates'
46
+ # tv_val is an array of associated values
47
+ return eval(var)[tv_val.index(date)] if tv_val.include?(date)
48
+ end
49
+ raise "Can't find #{var_on} for #{date}"
50
+ end
51
+ end
52
+ instance_variable_set("@#{var}", vals) if vals
53
+ data_vars[var] = vals unless data_vars.has_key?(var)
54
+ end
55
+
32
56
  private
33
57
 
34
58
  def define_time_methods_and_set_values
35
59
  time_vars.each do |var, vals|
36
- define_getter_and_setter(var)
37
- instance_variable_set("@#{var}", vals) if vals
60
+ new_time_var(var, vals)
38
61
  end
39
62
  end
40
63
 
41
64
  def define_data_methods_and_set_values
42
65
  data_vars.each do |var, vals|
43
- define_getter_and_setter(var)
44
- var_on = "#{var}_on"
45
- self.class.class_eval do
46
- define_method(var_on) do |date|
47
- time_vars.each do |tv_key, tv_val|
48
- # tv_key is something like 'dows' or 'dates'
49
- # tv_val is an array of associated values
50
- return eval(var)[tv_val.index(date)] if tv_val.include?(date)
51
- end
52
- raise "Can't find #{var_on} for #{date}"
53
- end
54
- end
55
- instance_variable_set("@#{var}", vals) if vals
66
+ new_data_var(var, vals)
56
67
  end
57
68
  end
58
69
 
@@ -1,3 +1,3 @@
1
1
  class SimpleTimeSeries
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
@@ -11,28 +11,28 @@ describe SimpleTimeSeries do
11
11
  @tasks_done = [2, 3, 0, 14, 3, 11, 0]
12
12
  @my_data = SimpleTimeSeries.new(:data_vars =>
13
13
  {'pizzas' => @pizzas, 'miles' => @miles,
14
- 'tasks_done' => @tasks_done},
14
+ 'tasks_done' => @tasks_done, 'empty' => []},
15
15
  :time_vars =>
16
16
  {'dows' => @dows, 'dates' => @dates,
17
17
  'full_dates' => @full_dates})
18
18
  end
19
19
 
20
- it "should be creatable" do
20
+ it "is creatable" do
21
21
  @my_data.should be_a(SimpleTimeSeries)
22
22
  end
23
23
 
24
- it "should set #time_vars correctly" do
24
+ it "sets #time_vars correctly" do
25
25
  @my_data.time_vars["dates"].should == @dates
26
26
  @my_data.time_vars["dows"].should == @dows
27
27
  end
28
28
 
29
- it "should have the correct methods" do
29
+ it "has the correct methods" do
30
30
  [:time_vars, :time_vars=, :data_vars, :data_vars=, :find, :pizzas, :pizzas=, :pizzas_on, :miles, :miles=, :miles_on, :tasks_done, :tasks_done=, :tasks_done_on, :dows, :dows=, :dates, :dates=].each do |mthd|
31
31
  @my_data.methods.should include(mthd)
32
32
  end
33
33
  end
34
34
 
35
- it "should create accessor methods for looking up data values for any time observation" do
35
+ it "creates accessor methods for looking up data values for any time observation" do
36
36
  @my_data.pizzas_on('Tuesday').should == 1
37
37
  @my_data.pizzas_on('Thursday').should == 0.5
38
38
  @my_data.miles_on('Sunday').should == 2.2
@@ -40,7 +40,7 @@ describe SimpleTimeSeries do
40
40
  @my_data.tasks_done_on('2014-01-02').should == 3
41
41
  end
42
42
 
43
- it "should #find any data value for any time observation" do
43
+ it "creates a #find method for finding any data value for any time observation" do
44
44
  @my_data.find('pizzas', 'Tuesday').should == 1
45
45
  @my_data.find('pizzas', 'Thursday').should == 0.5
46
46
  @my_data.find('miles', 'Sunday').should == 2.2
@@ -48,7 +48,7 @@ describe SimpleTimeSeries do
48
48
  @my_data.find('tasks_done', '2014-01-02').should == 3
49
49
  end
50
50
 
51
- it "should create setter methods for updating a data series" do
51
+ it "creates setter methods for updating a data series" do
52
52
  @my_data.pizzas_on('Tuesday').should == 1
53
53
  @my_data.pizzas = [10, 11, 12, 13, 14, 15, 16]
54
54
  @my_data.pizzas_on('Tuesday').should == 12
@@ -59,7 +59,7 @@ describe SimpleTimeSeries do
59
59
 
60
60
  describe "#current" do
61
61
 
62
- it "should print the current array for any data variable" do
62
+ it "prints the current array for any data variable" do
63
63
  @my_data.current('pizzas').should == @pizzas
64
64
  end
65
65
 
@@ -67,7 +67,7 @@ describe SimpleTimeSeries do
67
67
 
68
68
  describe "#index_of_date_value" do
69
69
 
70
- it "should return the array index of any date value" do
70
+ it "returns the array index of any date value" do
71
71
  @my_data.index_of_date_value('Thursday').should == 4
72
72
  @my_data.index_of_date_value('2014-01-01').should == 0
73
73
  @my_data.index_of_date_value('Jan 7, 2014').should == 6
@@ -77,7 +77,7 @@ describe SimpleTimeSeries do
77
77
 
78
78
  describe "#set" do
79
79
 
80
- it "should allow updating a single data series value" do
80
+ it "updates a single data series value" do
81
81
  @my_data.set('pizzas', 'Tuesday', 44)
82
82
  @my_data.pizzas_on('Tuesday').should == 44
83
83
  @my_data.pizzas_on('2014-01-03').should == 44
@@ -88,6 +88,59 @@ describe SimpleTimeSeries do
88
88
  @my_data.tasks_done_on('Jan 7, 2014').should == 77
89
89
  end
90
90
 
91
+ it "lets you build up a data series datapoint by datapoint" do
92
+ @my_data.current('empty').should == []
93
+ @my_data.set('empty', 'Jan 1, 2014', 1)
94
+ @my_data.set('empty', 'Monday', 2)
95
+ @my_data.set('empty', '2014-01-03', 3)
96
+ @my_data.set('empty', 'Jan 4, 2014', 4)
97
+ @my_data.set('empty', 'Thursday', 5)
98
+ @my_data.set('empty', '2014-01-06', 6)
99
+ @my_data.set('empty', 'Jan 7, 2014', 7)
100
+ @my_data.current('empty').should == [1, 2, 3, 4, 5, 6, 7]
101
+ end
102
+
103
+ it "lets you build up a data series datapoint by datapoint in any order" do
104
+ @my_data.current('empty').should == []
105
+ @my_data.set('empty', '2014-01-06', 6)
106
+ @my_data.set('empty', 'Jan 4, 2014', 4)
107
+ @my_data.set('empty', 'Jan 1, 2014', 1)
108
+ @my_data.set('empty', '2014-01-03', 3)
109
+ @my_data.set('empty', 'Thursday', 5)
110
+ @my_data.set('empty', 'Jan 7, 2014', 7)
111
+ @my_data.set('empty', 'Monday', 2)
112
+ @my_data.current('empty').should == [1, 2, 3, 4, 5, 6, 7]
113
+ @my_data.empty.should == [1, 2, 3, 4, 5, 6, 7]
114
+ end
115
+
116
+ end
117
+
118
+ describe "#new_time_var" do
119
+
120
+ it "lets you create a new time variable after object instantiation" do
121
+ @my_data.new_time_var('short_dow',['Sun', 'Mon', 'Tues', 'Wed', 'Thurs', 'Fri', 'Sat'])
122
+ @my_data.tasks_done_on('Fri').should == 11
123
+ @my_data.pizzas_on('Thurs').should == 0.5
124
+ end
125
+
126
+ end
127
+
128
+ describe "#new_data_var" do
129
+
130
+ it "lets you create a new data variable after object instantiation" do
131
+ @my_data.new_data_var('hours_of_tv',[7, 3, 3.5, 3, 4, 6.5, 11])
132
+ @my_data.hours_of_tv.should == [7, 3, 3.5, 3, 4, 6.5, 11]
133
+ @my_data.hours_of_tv_on('Friday').should == 6.5
134
+ @my_data.hours_of_tv_on('2014-01-01').should == 7
135
+ end
136
+
137
+ it "lets you use a new data variable with a new time variable" do
138
+ @my_data.new_time_var('short_dow',['Sun', 'Mon', 'Tues', 'Wed', 'Thurs', 'Fri', 'Sat'])
139
+ @my_data.new_data_var('hours_of_tv',[7, 3, 3.5, 3, 4, 6.5, 11])
140
+ @my_data.hours_of_tv_on('Fri').should == 6.5
141
+ @my_data.hours_of_tv_on('Sun').should == 7
142
+ end
143
+
91
144
  end
92
145
 
93
146
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: simple_time_series
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Lavin