time_distribution 1.0.0 → 1.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: 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