time_distribution 2.1.3 → 2.2.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: ca61f02b3f75d9e133ad3d1b67f0772608d3b632
4
- data.tar.gz: de0caf7ebe59a0f171d6e320cde5a6ec2e9fd823
3
+ metadata.gz: 9692efc1b44adc211fba77adeccdafa2430c81d2
4
+ data.tar.gz: e7978438e95415dfe89328420cbfdfbd6acb7331
5
5
  SHA512:
6
- metadata.gz: ea6124b5235f268aa59db971b0562129d0a330f0e481af4f5fda3f1683ade077dc03ba8da9bb118c8fe0ed8457ecdbe27da9e62c1fd7d9102a8bb641c70d2297
7
- data.tar.gz: 0c1a08594abed6da6335186e0279a806eb2b186c50b4ab2a926af4dcfb1b762ff808704d9cbc6216f0b22895052e823d7993bb4c3384b2a4c978e2355df418df
6
+ metadata.gz: 80f72a82d439b9f0a2e964d22caf2478a8a5d72d4886f57a0958a238ab01159a3055c76163083892e85a448d1a2a619f9bee3e3023ef6bc86bdcabdc26b5aa70
7
+ data.tar.gz: 4d88e5afb1142fa65d999b990cc8a53bf43519e48a46a767b1432cb0df4c6b68956c377ee441f56ccbe86aa4c0be62640e2d651f395d0f348652ec433135ad74
@@ -4,6 +4,14 @@ module TimeDistribution
4
4
  class Task
5
5
  attr_reader :subject, :time_taken, :desc
6
6
 
7
+ def self.from_map(map_data)
8
+ self.new(
9
+ map_data['subject'].to_sym,
10
+ map_data['duration'],
11
+ map_data['description']
12
+ )
13
+ end
14
+
7
15
  # @param [#to_s] subject The subject on which the task was completed. E.g. A course or project.
8
16
  # @param [#to_s] time_taken The amount of time taken on the task (Compatible with +ChronicDuration+ parsing, or a range of times that conform to +Chronic+ parsing).
9
17
  # @param [#to_s] desc The task's description.
@@ -13,6 +21,14 @@ module TimeDistribution
13
21
  @desc = desc
14
22
  end
15
23
 
24
+ def ==(other)
25
+ (
26
+ other.subject == @subject &&
27
+ other.time_taken == @time_taken &&
28
+ other.desc == @desc
29
+ )
30
+ end
31
+
16
32
  def to_s() "#{to_headline}: #{to_desc}" end
17
33
 
18
34
  def to_desc() @desc.strip end
@@ -43,4 +59,4 @@ module TimeDistribution
43
59
  )
44
60
  end
45
61
  end
46
- end
62
+ end
@@ -1,3 +1,3 @@
1
1
  module TimeDistribution
2
- VERSION = "2.1.3"
2
+ VERSION = "2.2.0"
3
3
  end
@@ -2,16 +2,35 @@ require 'chronic'
2
2
  require 'ruby-duration'
3
3
 
4
4
  require 'time_distribution/task_list'
5
+ require 'time_distribution/task'
5
6
 
6
7
  module TimeDistribution
7
8
  class WorkDay
8
9
  attr_reader :date, :tasks
9
10
 
11
+ def self.from_map(map_data)
12
+ self.new(
13
+ map_data['date'],
14
+ *(map_data['tasks'].map { |t| Task.from_map t })
15
+ )
16
+ end
17
+
10
18
  # @param [#to_s] date Date of this work day in +Chronic+ compatible format.
11
19
  # @param [Array<Task>] tasks List of tasks done in this work day. Defaults to an empty list.
12
20
  def initialize(date, *tasks)
13
21
  @date = Chronic.parse(date)
14
- @tasks = TaskList.new(*tasks)
22
+ @tasks = if tasks.length == 1 && !tasks.first.is_a?(Task)
23
+ TaskList.new(*tasks)
24
+ else
25
+ TaskList.new(tasks)
26
+ end
27
+ end
28
+
29
+ def ==(other)
30
+ (
31
+ @date == other.date &&
32
+ @tasks == other.tasks
33
+ )
15
34
  end
16
35
 
17
36
  # @param [Task] task Adds +task+ to the list of tasks completed on this work day.
@@ -44,4 +63,4 @@ module TimeDistribution
44
63
  )
45
64
  end
46
65
  end
47
- end
66
+ end
@@ -12,6 +12,10 @@ module TimeDistribution
12
12
 
13
13
  MONTHS = [:january, :february, :march, :april, :may, :june, :july, :august, :september, :october, :november, :december]
14
14
 
15
+ def self.from_map(map_data)
16
+ self.new(*map_data.map { |t| WorkDay.from_map t })
17
+ end
18
+
15
19
  private
16
20
  def provide_methods_for_setting_work_days_in_months
17
21
  MONTHS.each do |m|
data/spec/task_spec.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  require_relative 'support/spec_helper'
2
+ require 'yaml'
2
3
 
3
4
  require 'time_distribution/task'
4
5
  require 'time_distribution/smart_duration'
@@ -6,6 +7,28 @@ require 'time_distribution/smart_duration'
6
7
  include TimeDistribution
7
8
 
8
9
  describe Task do
10
+ let(:yml_string_data) do
11
+ <<-END
12
+ subject: :time_distribution
13
+ duration: 3:38pm to 4pm
14
+ description: |
15
+ - Comment 1
16
+ - Comment 2
17
+ END
18
+ end
19
+
20
+
21
+ describe '#from_map' do
22
+ it 'works' do
23
+ map_data = YAML.load(yml_string_data)
24
+ patient = Task.from_map(map_data)
25
+
26
+ patient.subject.must_equal map_data['subject']
27
+ patient.time_taken.must_equal SmartDuration.parse(map_data['duration'])
28
+ patient.desc.must_equal map_data['description']
29
+ end
30
+ end
31
+
9
32
  describe '#new' do
10
33
  it 'works for three arguments' do
11
34
  x_subject = 'subject'
@@ -1,9 +1,58 @@
1
1
  require_relative 'support/spec_helper'
2
2
 
3
3
  require 'time_distribution/work_day_collection'
4
+ require 'time_distribution/work_day'
4
5
 
5
6
  include TimeDistribution
7
+
8
+
6
9
  describe WorkDayCollection do
10
+ let(:yml_string_data) do
11
+ <<-END
12
+ -
13
+ date: April 21, 2016
14
+ tasks:
15
+ -
16
+ subject: :time_distribution
17
+ duration: 6:38pm to 7pm
18
+ description: |
19
+ - Comment 1
20
+ - Comment 2
21
+ -
22
+ subject: :aaaaaa
23
+ duration: 4:38am to 6pm
24
+ description: |
25
+ - Ahdkjlan akjdlnkfn
26
+ -
27
+ date: April 20, 2016
28
+ tasks:
29
+ -
30
+ subject: :time_distribution
31
+ duration: 6:38pm to 7pm
32
+ description: |
33
+ - Comment 3
34
+ - Comment 4
35
+ -
36
+ subject: :bbbbb
37
+ duration: 4:38am to 6pm
38
+ description: |
39
+ - jkljkljlkj syowueiorue
40
+ END
41
+ end
42
+
43
+
44
+ describe '#from_map' do
45
+ let(:patient) do
46
+ map_data = YAML.load(yml_string_data)
47
+ _patient = WorkDayCollection.from_map map_data
48
+ _patient.must_equal map_data.map { |t| WorkDay.from_map t }
49
+ _patient
50
+ end
51
+ it 'works' do
52
+ patient
53
+ end
54
+ end
55
+
7
56
  describe '#new' do
8
57
  it 'with days only' do
9
58
  patient = WorkDayCollection.new('d1', 'd2')
@@ -295,4 +344,4 @@ END
295
344
  }
296
345
  )
297
346
  end
298
- end
347
+ end
@@ -1,52 +1,89 @@
1
1
  require_relative 'support/spec_helper'
2
+ require 'yaml'
2
3
 
3
4
  require 'time_distribution/work_day'
5
+ require 'time_distribution/task'
4
6
 
5
7
  include TimeDistribution
8
+
9
+
6
10
  describe WorkDay do
7
- before do
8
- t1 = MiniTest::Mock.new
9
- t2 = MiniTest::Mock.new
10
- @x_date = 'May 7, 2013'
11
- @x_tasks = [t1, t2]
12
- @patient = WorkDay.new @x_date, @x_tasks
13
-
14
- @patient.date.must_equal Chronic.parse(@x_date)
15
- @patient.tasks.must_equal @x_tasks
11
+ let(:yml_string_data) do
12
+ <<-END
13
+ date: April 21, 2016
14
+ tasks:
15
+ -
16
+ subject: :time_distribution
17
+ duration: 6:38pm to 7pm
18
+ description: |
19
+ - Comment 1
20
+ - Comment 2
21
+ -
22
+ subject: :aaaaaa
23
+ duration: 4:38am to 6pm
24
+ description: |
25
+ - Ahdkjlan akjdlnkfn
26
+ END
27
+ end
28
+
29
+
30
+ describe '#from_map' do
31
+ let(:patient) do
32
+ map_data = YAML.load(yml_string_data)
33
+ _patient = WorkDay.from_map map_data
34
+ _patient.date.must_equal Chronic.parse(map_data['date'])
35
+ _patient.tasks.must_equal map_data['tasks'].map { |t| Task.from_map t }
36
+ _patient
37
+ end
38
+ it 'works' do
39
+ patient
40
+ end
41
+ end
42
+
43
+
44
+ let(:x_tasks) { [MiniTest::Mock.new, MiniTest::Mock.new] }
45
+ let(:x_date) { 'May 7, 2013' }
46
+ let(:patient) do
47
+ _patient = WorkDay.new x_date, *x_tasks
48
+ _patient.date.must_equal Chronic.parse(x_date)
49
+ _patient.tasks.must_equal x_tasks
50
+ _patient
16
51
  end
52
+
53
+
17
54
  describe 'to_hours' do
18
55
  it 'works without argument' do
19
- @x_tasks[0].expect(:to_hours, 1.1)
20
- @x_tasks[1].expect(:to_hours, 2.6)
21
- @patient.to_hours.must_equal 1.1 + 2.6
56
+ x_tasks[0].expect(:to_hours, 1.1)
57
+ x_tasks[1].expect(:to_hours, 2.6)
58
+ patient.to_hours.must_equal 1.1 + 2.6
22
59
  end
23
60
  it 'works with arguments' do
24
- @x_tasks[0].expect(:to_hours, 1.1)
25
- @x_tasks[1].expect(:to_hours, 2.6)
26
- @x_tasks[0].expect(:subject, :relevant_task)
27
- @x_tasks[1].expect(:subject, :irrelevant_task)
28
- @patient.to_hours(:relevant_task).must_equal 1.1
29
-
30
- @x_tasks[0].expect(:to_hours, 1.1)
31
- @x_tasks[1].expect(:to_hours, 2.6)
32
- @x_tasks[0].expect(:subject, :relevant_task)
33
- @x_tasks[1].expect(:subject, :irrelevant_task)
34
- @patient.to_hours(:irrelevant_task).must_equal 2.6
35
-
36
- @x_tasks[0].expect(:to_hours, 1.1)
37
- @x_tasks[1].expect(:to_hours, 2.6)
38
- @x_tasks[0].expect(:subject, :relevant_task)
39
- @x_tasks[1].expect(:subject, :irrelevant_task)
40
- @patient.to_hours(:relevant_task, :irrelevant_task).must_equal 1.1 + 2.6
61
+ x_tasks[0].expect(:to_hours, 1.1)
62
+ x_tasks[1].expect(:to_hours, 2.6)
63
+ x_tasks[0].expect(:subject, :relevant_task)
64
+ x_tasks[1].expect(:subject, :irrelevant_task)
65
+ patient.to_hours(:relevant_task).must_equal 1.1
66
+
67
+ x_tasks[0].expect(:to_hours, 1.1)
68
+ x_tasks[1].expect(:to_hours, 2.6)
69
+ x_tasks[0].expect(:subject, :relevant_task)
70
+ x_tasks[1].expect(:subject, :irrelevant_task)
71
+ patient.to_hours(:irrelevant_task).must_equal 2.6
72
+
73
+ x_tasks[0].expect(:to_hours, 1.1)
74
+ x_tasks[1].expect(:to_hours, 2.6)
75
+ x_tasks[0].expect(:subject, :relevant_task)
76
+ x_tasks[1].expect(:subject, :irrelevant_task)
77
+ patient.to_hours(:relevant_task, :irrelevant_task).must_equal 1.1 + 2.6
41
78
  end
42
79
  end
43
80
  describe 'to_md' do
44
81
  it 'works' do
45
- @x_tasks[0].expect(:to_s, 'Task 1')
46
- @x_tasks[1].expect(:to_s, 'Task 2')
47
- @patient.to_md.must_equal (
82
+ x_tasks[0].expect(:to_s, 'Task 1')
83
+ x_tasks[1].expect(:to_s, 'Task 2')
84
+ patient.to_md.must_equal (
48
85
  <<-END
49
- #{@x_date}
86
+ #{x_date}
50
87
  ============================
51
88
  - Task 1
52
89
  - Task 2
@@ -57,8 +94,8 @@ END
57
94
  describe '#add_task!' do
58
95
  it 'works' do
59
96
  t3 = MiniTest::Mock.new
60
- @patient.add_task!(t3).must_equal @patient
61
- @patient.tasks.must_equal (@x_tasks << t3)
97
+ patient.add_task!(t3).must_equal patient
98
+ patient.tasks.must_equal (x_tasks << t3)
62
99
  end
63
100
  end
64
101
  describe 'time_worked' do
@@ -66,34 +103,34 @@ END
66
103
  it 'when all tasks have the same subject' do
67
104
  time_taken_for_each_task = 23
68
105
  x_subject = 'my subject'
69
- @x_tasks.each do |mock_task|
106
+ x_tasks.each do |mock_task|
70
107
  mock_task.expect(:subject, x_subject)
71
108
  mock_task.expect(:time_taken, time_taken_for_each_task)
72
109
  end
73
- @patient.time_worked.must_equal ({x_subject => (Duration.new(@x_tasks.length * time_taken_for_each_task)) })
110
+ patient.time_worked.must_equal ({x_subject => (Duration.new(x_tasks.length * time_taken_for_each_task)) })
74
111
  end
75
112
  it 'when more than one subject is present' do
76
113
  time_taken_for_each_task = 23
77
114
  subject_1 = 'subject 1'
78
- @x_tasks.each do |mock_task|
115
+ x_tasks.each do |mock_task|
79
116
  mock_task.expect(:subject, subject_1)
80
117
  mock_task.expect(:time_taken, time_taken_for_each_task)
81
118
  end
82
- num_subject_1_tasks = @x_tasks.length
119
+ num_subject_1_tasks = x_tasks.length
83
120
  t3 = MiniTest::Mock.new
84
121
  subject_2 = 'subject 2'
85
122
  t3.expect(:subject, subject_2)
86
123
  t3.expect(:time_taken, time_taken_for_each_task)
87
- @x_tasks << t3
124
+ x_tasks << t3
88
125
  t4 = MiniTest::Mock.new
89
126
  subject_3 = 'subject 3'
90
127
  t4.expect(:subject, subject_3)
91
128
  t4.expect(:time_taken, time_taken_for_each_task)
92
- @x_tasks << t4
129
+ x_tasks << t4
93
130
 
94
- @patient = WorkDay.new @x_date, @x_tasks
131
+ patient = WorkDay.new x_date, x_tasks
95
132
 
96
- @patient.time_worked.must_equal (
133
+ patient.time_worked.must_equal (
97
134
  {
98
135
  subject_1 => Duration.new(num_subject_1_tasks * time_taken_for_each_task),
99
136
  subject_2 => Duration.new(time_taken_for_each_task),
@@ -105,24 +142,24 @@ END
105
142
  it 'returns a hash of duration sums when given a list of subjects' do
106
143
  time_taken_for_each_task = 23
107
144
  subject_1 = 'subject 1'
108
- @x_tasks.each do |mock_task|
145
+ x_tasks.each do |mock_task|
109
146
  mock_task.expect(:subject, subject_1)
110
147
  mock_task.expect(:time_taken, time_taken_for_each_task)
111
148
  end
112
- num_subject_1_tasks = @x_tasks.length
149
+ num_subject_1_tasks = x_tasks.length
113
150
  t3 = MiniTest::Mock.new
114
151
  subject_2 = 'subject 2'
115
152
  t3.expect(:subject, subject_2)
116
153
  t3.expect(:time_taken, time_taken_for_each_task)
117
- @x_tasks << t3
154
+ x_tasks << t3
118
155
  t4 = MiniTest::Mock.new
119
156
  subject_3 = 'subject 3'
120
157
  t4.expect(:subject, subject_3)
121
- @x_tasks << t4
158
+ x_tasks << t4
122
159
 
123
- @patient = WorkDay.new @x_date, @x_tasks
160
+ patient = WorkDay.new x_date, x_tasks
124
161
 
125
- @patient.time_worked(subject_1, subject_2).must_equal (
162
+ patient.time_worked(subject_1, subject_2).must_equal (
126
163
  {
127
164
  subject_1 => Duration.new(num_subject_1_tasks * time_taken_for_each_task),
128
165
  subject_2 => Duration.new(time_taken_for_each_task)
@@ -133,27 +170,27 @@ END
133
170
  it 'as a scalar' do
134
171
  time_taken_for_each_task = 23
135
172
  subject_1 = 'subject 1'
136
- @x_tasks.each do |mock_task|
173
+ x_tasks.each do |mock_task|
137
174
  mock_task.expect(:subject, subject_1)
138
175
  mock_task.expect(:time_taken, time_taken_for_each_task)
139
176
  end
140
- num_subject_1_tasks = @x_tasks.length
177
+ num_subject_1_tasks = x_tasks.length
141
178
  t3 = MiniTest::Mock.new
142
179
  subject_2 = 'subject 2'
143
180
  t3.expect(:subject, subject_2)
144
181
  t3.expect(:time_taken, time_taken_for_each_task)
145
- @x_tasks << t3
182
+ x_tasks << t3
146
183
  t4 = MiniTest::Mock.new
147
184
  subject_3 = 'subject 3'
148
185
  t4.expect(:subject, subject_3)
149
- @x_tasks << t4
186
+ x_tasks << t4
150
187
 
151
- @patient = WorkDay.new @x_date, @x_tasks
188
+ patient = WorkDay.new x_date, x_tasks
152
189
 
153
- @patient.time_worked(subject_1).must_equal (
190
+ patient.time_worked(subject_1).must_equal (
154
191
  {subject_1 => Duration.new(num_subject_1_tasks * time_taken_for_each_task)}
155
192
  )
156
193
  end
157
194
  end
158
195
  end
159
- end
196
+ 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: 2.1.3
4
+ version: 2.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dustin
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-03-14 00:00:00.000000000 Z
11
+ date: 2016-04-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: chronic
@@ -169,7 +169,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
169
169
  version: '0'
170
170
  requirements: []
171
171
  rubyforge_project:
172
- rubygems_version: 2.2.2
172
+ rubygems_version: 2.5.1
173
173
  signing_key:
174
174
  specification_version: 4
175
175
  summary: Gem for creating time distribution management systems
@@ -180,4 +180,3 @@ test_files:
180
180
  - spec/time_spec.rb
181
181
  - spec/work_day_collection_spec.rb
182
182
  - spec/work_day_spec.rb
183
- has_rdoc: