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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c080fc58f25088d05f155ce39623ac9c2e3fe478
4
- data.tar.gz: 7725aa3312d2d3150d2c81cfc41f39887f512125
3
+ metadata.gz: dccb31c666eb18ba4851cada37bb34f75e7bf3f7
4
+ data.tar.gz: dd41ba2827bbc35cb11615438c281eeec6b177fc
5
5
  SHA512:
6
- metadata.gz: 2dca2300f821cc40577f766f0a6d857ac4aad9c1a5e645896fd2ff2f9f4a8ce9fcbe46d8101dc86acbe797f79096fa69e8f168f9e439b824e66126d7a04e6ac9
7
- data.tar.gz: 020146a4fbe9ed8008d39baecc586d54b49f22a0160b0a0ee0ac10d22a1388c2f242257e9468a673a5dac65c30b3c3212e80876003c0f912e0771c851f564ef1
6
+ metadata.gz: 64d466ee3beeaf7163d5dce34952d5ef69cce65f968aeb20e6ed57c3ef5676c3757b57763ecbc49c6578b674d942281afff1bcf2e3a48ad73b9018f1cc928eab
7
+ data.tar.gz: 80e798da6b384012b3c6f448ab9a19c4c6ef49bc692cf95fd890837d9837321d487d87ea4baeadd8c1f2fdb8e5d43e7c7e1fdef4431ed418931a7318819cf4b3
@@ -1,3 +1,3 @@
1
1
  module TimeDistribution
2
- VERSION = "1.0.0"
2
+ VERSION = "1.1.0"
3
3
  end
@@ -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
- @tasks.inject({}) do |times, t|
25
- times[t.subject] = Duration.new(0) unless times[t.subject]
26
- times[t.subject] += t.time_taken
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
@@ -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
- require 'turn'
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
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
- def mu_pp(obj)
25
- obj.awesome_inspect
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'
@@ -22,16 +22,94 @@ describe WorkDay do
22
22
  end
23
23
  end
24
24
  describe 'time_worked' do
25
- it 'works' do
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
- x_subject = 'my subject'
65
+ subject_1 = 'subject 1'
28
66
  @x_tasks.each do |mock_task|
29
- mock_task.expect(:subject, x_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
- @patient.time_worked.must_equal ({x_subject => Duration.new(@x_tasks.length * time_taken_for_each_task)})
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.0.0
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-07 00:00:00.000000000 Z
11
+ date: 2013-05-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: chronic