time_distribution 2.0.2 → 2.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: 906063f479403bf2f723d670086c78e6707666d7
4
- data.tar.gz: 185834218fe90c896548fb965e070b768704d74a
3
+ metadata.gz: 8a71a5c2af5b49832a2045860f26499d7f4dffe7
4
+ data.tar.gz: 000bb37d8f5d219162d92e79b3ca7a7b708166ef
5
5
  SHA512:
6
- metadata.gz: e558b20fb24adb178b18c33690c640e77ec8925374a55d0a1088dee5eaa29d027ba08f199c9613bf53f60897f205d15efbd9cef9584e6fda8befba34abd7a3a2
7
- data.tar.gz: ea5f6468b2995476bf196dbf0f16305a8651c4c704a25edef0161976354d83870635858979f281b79c71dd832444125201b2e71a25900cf8e0d7a656b224d943
6
+ metadata.gz: 1bffa9227b70531563e5a90a34a1c7b39f445061a379d252e4ef5975d42f31e4ae504dd6b925a31a0842d0a6c87b8eee3d98c8729192982a8bbb835971659ff3
7
+ data.tar.gz: 3833eeb5d729993caef2518de9785b04a1e47b43e0c67af8aae9933c4447e6a6a5cd2a73ff40a14ffc4e46f28924d771f7cbf07a703e654f16c84db696ce11ce
@@ -30,7 +30,17 @@ module TimeDistribution
30
30
  end
31
31
 
32
32
  def to_ssv
33
- format("%-25s%10s", @subject, to_hours_s)
33
+ format(
34
+ "%-30s%10s",
35
+ (
36
+ if block_given?
37
+ yield(@subject)
38
+ else
39
+ @subject
40
+ end
41
+ ),
42
+ to_hours_s
43
+ )
34
44
  end
35
45
  end
36
46
  end
@@ -1,3 +1,3 @@
1
1
  module TimeDistribution
2
- VERSION = "2.0.2"
2
+ VERSION = "2.1.0"
3
3
  end
@@ -34,8 +34,13 @@ module TimeDistribution
34
34
 
35
35
  def to_ssv
36
36
  (
37
- "# #{@date.strftime('%b %-d, %Y')}\n" +
38
- @tasks.to_ssv
37
+ "# #{@date.strftime('%b %-d, %Y')}\n" + (
38
+ if block_given?
39
+ @tasks.to_ssv { |key| yield(key) }
40
+ else
41
+ @tasks.to_ssv
42
+ end
43
+ )
39
44
  )
40
45
  end
41
46
  end
@@ -66,7 +66,91 @@ module TimeDistribution
66
66
  end
67
67
 
68
68
  def to_ssv
69
- inject('') { |s, d| s += "#{d.to_ssv}" }
69
+ inject('') do |s, d|
70
+ s += if block_given?
71
+ "#{d.to_ssv { |key| yield(key) }}"
72
+ else
73
+ "#{d.to_ssv}"
74
+ end
75
+ end
76
+ end
77
+
78
+ def time_worked_to_ssv
79
+ string = ''
80
+ time_worked.each do |k,j|
81
+ string += format(
82
+ "%-30s%10s\n",
83
+ (
84
+ if block_given?
85
+ yield(k)
86
+ else
87
+ k
88
+ end
89
+ ),
90
+ format("%0.2f", j.total / 3600.0)
91
+ )
92
+ end
93
+ string
94
+ end
95
+
96
+ def work_days_by_weeks
97
+ (0..length / 7).inject([]) do |array, week|
98
+ week_start = 7*week
99
+ week_end = week_start+6
100
+ days = self[week_start..week_end]
101
+ next array if days.empty?
102
+
103
+ array << WorkDayCollection.new(*days)
104
+ yield array.last if block_given?
105
+ array
106
+ end
107
+ end
108
+
109
+ def hours_per_day_by_weeks(*task_types)
110
+ array = []
111
+ work_days_by_weeks do |week|
112
+ array << (
113
+ week.map do |day|
114
+ day.to_hours(*task_types)
115
+ end
116
+ )
117
+ yield array.last if block_given?
118
+ end
119
+ array
120
+ end
121
+
122
+ def hours_per_week(*task_types)
123
+ hours = []
124
+ hours_per_day_by_weeks(*task_types) do |week|
125
+ hours << week.inject(:+)
126
+ end
127
+ hours
128
+ end
129
+
130
+ def subjects
131
+ map { |day| day.tasks.map { |task| task.subject } }.flatten.sort.uniq
132
+ end
133
+
134
+ def hours_per_week_ssv(*task_types)
135
+ string = ''
136
+ hours = []
137
+ week = 1
138
+ work_days_by_weeks do |week_collection|
139
+ string += (
140
+ "# #{week_collection.first.date.strftime('%b %-d, %Y')}\n" +
141
+ "# #{week_collection.subjects.join(', ')}\n"
142
+ )
143
+ week_hours = week_collection.map do |day|
144
+ day.to_hours(*task_types)
145
+ end
146
+ hours << week_hours.inject(:+)
147
+ string += (
148
+ "# " + week_hours.join(', ') + "\n" +
149
+ format("%-10d%0.2f\n", week + 1, hours.last)
150
+ )
151
+ week += 1
152
+ end
153
+ string += format("%-10s%0.2f\n", 'Avg', hours.inject(:+) / hours.length)
70
154
  end
71
155
  end
72
156
  end
@@ -146,19 +146,78 @@ END
146
146
  patient.to_ssv.must_equal (
147
147
  <<-END
148
148
  # Mar 14, 2015
149
- taxes 2.60
150
- taxes 1.50
149
+ taxes 2.60
150
+ taxes 1.50
151
151
  # Mar 13, 2015
152
- cmput659 6.92
153
- cprg 1.00
154
- masters_research 1.00
155
- cmput659 0.25
156
- cmput659 1.70
152
+ cmput659 6.92
153
+ cprg 1.00
154
+ masters_research 1.00
155
+ cmput659 0.25
156
+ cmput659 1.70
157
157
  END
158
158
  )
159
159
  end
160
160
  end
161
161
 
162
+ describe '#time_worked_to_ssv' do
163
+ it 'works' do
164
+ patient = new_full_patient
165
+ patient.time_worked_to_ssv do |subject|
166
+ subject.to_s.split('_').collect(&:capitalize).join
167
+ end.must_equal (
168
+ <<-END
169
+ Taxes 4.10
170
+ Cmput659 8.87
171
+ Cprg 1.00
172
+ MastersResearch 1.00
173
+ END
174
+ )
175
+ end
176
+ end
177
+
178
+ describe '#work_days_by_weeks' do
179
+ it 'works' do
180
+ patient = new_full_patient
181
+ patient.work_days_by_weeks.flatten.must_equal patient
182
+ end
183
+ end
184
+
185
+ describe '#hours_per_day_by_weeks' do
186
+ it 'works' do
187
+ patient = new_full_patient
188
+ patient.hours_per_day_by_weeks.must_equal [[4.1, 10.866666666666667]]
189
+ end
190
+ end
191
+
192
+ describe '#hours_per_week' do
193
+ it 'works' do
194
+ patient = new_full_patient
195
+ patient.hours_per_week.must_equal [4.1 + 10.866666666666667]
196
+ end
197
+ end
198
+
199
+ describe '#subjects' do
200
+ it 'works' do
201
+ patient = new_full_patient
202
+ patient.subjects.must_equal [:taxes, :cmput659, :cprg, :masters_research].sort
203
+ end
204
+ end
205
+
206
+ describe '#hours_per_week_ssv' do
207
+ it 'works' do
208
+ patient = new_full_patient
209
+ patient.hours_per_week_ssv.must_equal (
210
+ <<-END
211
+ # Mar 14, 2015
212
+ # cmput659, cprg, masters_research, taxes
213
+ # 4.1, 10.866666666666667
214
+ 2 14.97
215
+ Avg 14.97
216
+ END
217
+ )
218
+ end
219
+ end
220
+
162
221
  def new_full_patient
163
222
  WorkDayCollection.new(
164
223
  WorkDay.new(
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: time_distribution
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.2
4
+ version: 2.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dustin
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-03-15 00:00:00.000000000 Z
11
+ date: 2015-03-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: chronic