time_distribution 1.0.0 → 1.1.0
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/lib/time_distribution/version.rb +1 -1
- data/lib/time_distribution/work_day.rb +18 -4
- data/spec/support/spec_helper.rb +22 -20
- data/spec/work_day_spec.rb +84 -6
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dccb31c666eb18ba4851cada37bb34f75e7bf3f7
|
4
|
+
data.tar.gz: dd41ba2827bbc35cb11615438c281eeec6b177fc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 64d466ee3beeaf7163d5dce34952d5ef69cce65f968aeb20e6ed57c3ef5676c3757b57763ecbc49c6578b674d942281afff1bcf2e3a48ad73b9018f1cc928eab
|
7
|
+
data.tar.gz: 80e798da6b384012b3c6f448ab9a19c4c6ef49bc692cf95fd890837d9837321d487d87ea4baeadd8c1f2fdb8e5d43e7c7e1fdef4431ed418931a7318819cf4b3
|
@@ -19,13 +19,27 @@ module TimeDistribution
|
|
19
19
|
self
|
20
20
|
end
|
21
21
|
|
22
|
-
def time_worked
|
22
|
+
def time_worked(*subjects)
|
23
|
+
subjects.flatten!
|
23
24
|
times = {}
|
24
|
-
|
25
|
-
|
26
|
-
|
25
|
+
unless subjects.empty? || subjects.kind_of?(Set)
|
26
|
+
subjects = Set.new(subjects) # To take advantage of Set's faster include? check
|
27
|
+
end
|
28
|
+
|
29
|
+
times_to_return = @tasks.inject({}) do |times, t|
|
30
|
+
t_subject = t.subject
|
31
|
+
next times unless subjects.empty? || subjects.include?(t_subject)
|
32
|
+
|
33
|
+
times[t_subject] = Duration.new(0) unless times[t_subject]
|
34
|
+
times[t_subject] += t.time_taken
|
27
35
|
times
|
28
36
|
end
|
37
|
+
|
38
|
+
if times_to_return.length == 1
|
39
|
+
times_to_return.values.first
|
40
|
+
else
|
41
|
+
times_to_return
|
42
|
+
end
|
29
43
|
end
|
30
44
|
end
|
31
45
|
end
|
data/spec/support/spec_helper.rb
CHANGED
@@ -2,30 +2,32 @@ require 'simplecov'
|
|
2
2
|
SimpleCov.start
|
3
3
|
|
4
4
|
require 'minitest/spec'
|
5
|
-
require 'minitest/pride'
|
6
5
|
require 'minitest/mock'
|
7
6
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
7
|
+
begin
|
8
|
+
require 'turn/autorun'
|
9
|
+
Turn.config do |c|
|
10
|
+
# use one of output formats:
|
11
|
+
# :outline - turn's original case/test outline mode [default]
|
12
|
+
# :progress - indicates progress with progress bar
|
13
|
+
# :dotted - test/unit's traditional dot-progress mode
|
14
|
+
# :pretty - new pretty reporter
|
15
|
+
# :marshal - dump output as YAML (normal run mode only)
|
16
|
+
# :cue - interactive testing
|
17
|
+
c.format = :dotted
|
18
|
+
# use humanized test names (works only with :outline format)
|
19
|
+
c.natural = true
|
20
|
+
end
|
21
21
|
|
22
|
-
require 'awesome_print'
|
23
|
-
module Minitest::Assertions
|
24
|
-
|
25
|
-
|
22
|
+
require 'awesome_print'
|
23
|
+
module Minitest::Assertions
|
24
|
+
def mu_pp(obj)
|
25
|
+
obj.awesome_inspect
|
26
|
+
end
|
26
27
|
end
|
27
|
-
end
|
28
28
|
|
29
|
-
require 'pry-rescue/minitest'
|
29
|
+
require 'pry-rescue/minitest'
|
30
|
+
rescue LoadError
|
31
|
+
end
|
30
32
|
|
31
33
|
require 'ruby-duration'
|
data/spec/work_day_spec.rb
CHANGED
@@ -22,16 +22,94 @@ describe WorkDay do
|
|
22
22
|
end
|
23
23
|
end
|
24
24
|
describe 'time_worked' do
|
25
|
-
|
25
|
+
describe 'returns a hash of duration sums without arguments' do
|
26
|
+
it 'when all tasks have the same subject' do
|
27
|
+
time_taken_for_each_task = 23
|
28
|
+
x_subject = 'my subject'
|
29
|
+
@x_tasks.each do |mock_task|
|
30
|
+
mock_task.expect(:subject, x_subject)
|
31
|
+
mock_task.expect(:time_taken, time_taken_for_each_task)
|
32
|
+
end
|
33
|
+
@patient.time_worked.must_equal (Duration.new(@x_tasks.length * time_taken_for_each_task))
|
34
|
+
end
|
35
|
+
it 'when more than one subject is present' do
|
36
|
+
time_taken_for_each_task = 23
|
37
|
+
subject_1 = 'subject 1'
|
38
|
+
@x_tasks.each do |mock_task|
|
39
|
+
mock_task.expect(:subject, subject_1)
|
40
|
+
mock_task.expect(:time_taken, time_taken_for_each_task)
|
41
|
+
end
|
42
|
+
num_subject_1_tasks = @x_tasks.length
|
43
|
+
t3 = MiniTest::Mock.new
|
44
|
+
subject_2 = 'subject 2'
|
45
|
+
t3.expect(:subject, subject_2)
|
46
|
+
t3.expect(:time_taken, time_taken_for_each_task)
|
47
|
+
@x_tasks << t3
|
48
|
+
t4 = MiniTest::Mock.new
|
49
|
+
subject_3 = 'subject 3'
|
50
|
+
t4.expect(:subject, subject_3)
|
51
|
+
t4.expect(:time_taken, time_taken_for_each_task)
|
52
|
+
@x_tasks << t4
|
53
|
+
|
54
|
+
@patient.time_worked.must_equal (
|
55
|
+
{
|
56
|
+
subject_1 => Duration.new(num_subject_1_tasks * time_taken_for_each_task),
|
57
|
+
subject_2 => Duration.new(time_taken_for_each_task),
|
58
|
+
subject_3 => Duration.new(time_taken_for_each_task)
|
59
|
+
}
|
60
|
+
)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
it 'returns a hash of duration sums when given a list of subjects' do
|
26
64
|
time_taken_for_each_task = 23
|
27
|
-
|
65
|
+
subject_1 = 'subject 1'
|
28
66
|
@x_tasks.each do |mock_task|
|
29
|
-
mock_task.expect(:subject,
|
30
|
-
mock_task.expect(:subject, x_subject)
|
31
|
-
mock_task.expect(:subject, x_subject)
|
67
|
+
mock_task.expect(:subject, subject_1)
|
32
68
|
mock_task.expect(:time_taken, time_taken_for_each_task)
|
33
69
|
end
|
34
|
-
|
70
|
+
num_subject_1_tasks = @x_tasks.length
|
71
|
+
t3 = MiniTest::Mock.new
|
72
|
+
subject_2 = 'subject 2'
|
73
|
+
t3.expect(:subject, subject_2)
|
74
|
+
t3.expect(:time_taken, time_taken_for_each_task)
|
75
|
+
@x_tasks << t3
|
76
|
+
t4 = MiniTest::Mock.new
|
77
|
+
subject_3 = 'subject 3'
|
78
|
+
t4.expect(:subject, subject_3)
|
79
|
+
@x_tasks << t4
|
80
|
+
|
81
|
+
@patient.time_worked([subject_1, subject_2]).must_equal (
|
82
|
+
{
|
83
|
+
subject_1 => Duration.new(num_subject_1_tasks * time_taken_for_each_task),
|
84
|
+
subject_2 => Duration.new(time_taken_for_each_task)
|
85
|
+
}
|
86
|
+
)
|
87
|
+
end
|
88
|
+
describe 'returns a single sum given a subject' do
|
89
|
+
it 'as a scalar' do
|
90
|
+
time_taken_for_each_task = 23
|
91
|
+
subject_1 = 'subject 1'
|
92
|
+
@x_tasks.each do |mock_task|
|
93
|
+
mock_task.expect(:subject, subject_1)
|
94
|
+
mock_task.expect(:time_taken, time_taken_for_each_task)
|
95
|
+
end
|
96
|
+
num_subject_1_tasks = @x_tasks.length
|
97
|
+
t3 = MiniTest::Mock.new
|
98
|
+
subject_2 = 'subject 2'
|
99
|
+
t3.expect(:subject, subject_2)
|
100
|
+
t3.expect(:time_taken, time_taken_for_each_task)
|
101
|
+
@x_tasks << t3
|
102
|
+
t4 = MiniTest::Mock.new
|
103
|
+
subject_3 = 'subject 3'
|
104
|
+
t4.expect(:subject, subject_3)
|
105
|
+
@x_tasks << t4
|
106
|
+
|
107
|
+
@patient.time_worked(subject_1).must_equal (
|
108
|
+
Duration.new(num_subject_1_tasks * time_taken_for_each_task)
|
109
|
+
)
|
110
|
+
end
|
111
|
+
it 'as a single element list' do
|
112
|
+
end
|
35
113
|
end
|
36
114
|
end
|
37
115
|
end
|
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: 1.
|
4
|
+
version: 1.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: 2013-05-
|
11
|
+
date: 2013-05-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: chronic
|