workpattern 0.3.0 → 0.3.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,13 +1,33 @@
1
1
  module Workpattern
2
- # Represents the 24 hours of a day using module <tt>hour</tt>
2
+
3
+ # @author Barrie Callender
4
+ # @!attribute values
5
+ # @return [Array] each hour of the day
6
+ # @!attribute hours
7
+ # @return [Integer] number of hours in the day
8
+ # @!attribute first_hour
9
+ # @return [Integer] first working hour in the day
10
+ # @!attribute first_min
11
+ # @return [Integer] first working minute in first working hour in the day
12
+ # @!attribute last_hour
13
+ # @return [Integer] last working hour in the day
14
+ # @!attribute last_min
15
+ # @return [Integer] last working minute in last working hour in the day
16
+ # @!attribute total
17
+ # @return [Integer] total number of minutes in the day
18
+ #
19
+ # Represents the 24 hours of a day.
20
+ #
21
+ # @since 0.2.0
22
+ # @todo implement a day with different number of hours in it to support daylight saving
3
23
  #
4
24
  class Day
5
25
  include Workpattern::Utility
6
26
  attr_accessor :values, :hours, :first_hour, :first_min, :last_hour, :last_min, :total
7
27
 
8
- # :call-seq: new(type=1) => Day
9
- # Creates a 24 hour day defaulting to a working day.
10
- # Pass 0 to create a non-working day.
28
+ # The new <tt>Day</tt> object can be created as either working or resting.
29
+ #
30
+ # @param [Integer] type is working (1) or resting (0)
11
31
  #
12
32
  def initialize(type=1)
13
33
  @hours=24
@@ -18,9 +38,10 @@ module Workpattern
18
38
  set_attributes
19
39
  end
20
40
 
21
- # :call-seq: duplicate => Day
22
41
  # Creates a duplicate of the current <tt>Day</tt> instance.
23
42
  #
43
+ # @return [Day]
44
+ #
24
45
  def duplicate
25
46
  duplicate_day = Day.new()
26
47
  duplicate_values=Array.new(@values.size)
@@ -38,21 +59,18 @@ module Workpattern
38
59
  return duplicate_day
39
60
  end
40
61
 
41
- # :call-seq: refresh
42
62
  # Recalculates characteristics for this day
43
63
  #
44
64
  def refresh
45
65
  set_attributes
46
66
  end
47
67
 
48
- # :call-seq: workpattern(start_time,finish_time,type)
49
68
  # Sets all minutes in a date range to be working or resting.
50
- # The <tt>start_time</tt> and <tt>finish_time</tt> need to have
51
- # <tt>#hour</tt> and <tt>#min</tt> methods to return the time
52
- # in hours and minutes respectively.
53
69
  #
54
- # Pass 1 as the <tt>type</tt> for working and 0 for resting.
55
- #
70
+ # @param [(#hour,#min)] start_time is the start of the range to set
71
+ # @param [(#hour, #min)] finish_time is the finish of the range to be set
72
+ # @param [Integer] type is either working (1) or resting (0)
73
+ #
56
74
  def workpattern(start_time,finish_time,type)
57
75
 
58
76
  if start_time.hour==finish_time.hour
@@ -71,15 +89,22 @@ module Workpattern
71
89
  set_attributes
72
90
  end
73
91
 
74
- # :call-seq: calc(time,duration) => time, duration
75
- #
76
92
  # Calculates the result of adding <tt>duration</tt> to
77
93
  # <tt>time</tt>. The <tt>duration</tt> can be negative in
78
94
  # which case it subtracts from <tt>time</tt>.
79
95
  #
80
96
  # An addition where there are less working minutes left in
81
97
  # the day than are being added will result in the time
82
- # returned having 60 as the value in <tt>min</tt>.
98
+ # returned being 00:00 on the following day.
99
+ #
100
+ # A subtraction where there are less working minutes left in
101
+ # the day than are being added will result in the time
102
+ # returned being the previous day with the <tt>midnight</tt> flag set to true.
103
+ #
104
+ # @param [DateTime] time when the calculation starts from
105
+ # @param [Integer] duration is the number of minutes to add or subtract if it is negative
106
+ # @param [Boolean] midnight is a flag used in subtraction to pretend the time is actually midnight
107
+ # @return [DateTime,Integer,Boolean] Calculated time along with any remaining duration and the midnight flag
83
108
  #
84
109
  def calc(time,duration,midnight=false)
85
110
 
@@ -93,17 +118,21 @@ module Workpattern
93
118
 
94
119
  end
95
120
 
96
- # :call-seq: working?(start) => Boolean
97
- # Returns true if the given minute is working and false if it isn't
121
+ # Returns true if the given minute is working and false if it is resting
122
+ #
123
+ # @param [(#hour, #min)] start is the time in the day to inspect
124
+ # @return [Boolean] true if the time is working and false if it is resting
98
125
  #
99
126
  def working?(start)
100
127
  return true if minutes(start.hour,start.min,start.hour,start.min)==1
101
128
  return false
102
129
  end
103
130
 
104
- # :call-seq: diff(start,finish) => Duration, Date
105
- # Returns the difference in minutes between two times. if the given
106
- # minute is working and false if it isn't
131
+ # Returns the difference in working minutes between two times.
132
+ #
133
+ # @param [(#hour, #min)] start start time in the range
134
+ # @param [(#hour, #min)] finish finish time in the range
135
+ # @return [Integer] number of working minutes
107
136
  #
108
137
  def diff(start,finish)
109
138
  start,finish=finish,start if ((start <=> finish))==1
@@ -120,9 +149,16 @@ module Workpattern
120
149
  return duration, start
121
150
  end
122
151
 
123
- # :call-seq: minutes(start_hour,start_min,finish_hour,finish_min) => duration
124
- # Returns the total number of minutes between and including two minutes.
125
- #
152
+ # Returns the total number of minutes between two times.
153
+ #
154
+ # @param [Integer] start_hour first hour in range
155
+ # @param [Integer] start_min first minute of first hour in range
156
+ # @param [Integer] finish_hour last hour in range
157
+ # @param [Integer] finish_min last minute of last hour in range
158
+ # @return [Integer] minutes between supplied hours and minutes
159
+ #
160
+ # @todo can this method and #diff method be combined?
161
+ #
126
162
  def minutes(start_hour,start_min,finish_hour,finish_min)
127
163
 
128
164
  if (start_hour > finish_hour) || ((finish_hour==start_hour) && (start_min > finish_min))
@@ -146,6 +182,8 @@ module Workpattern
146
182
 
147
183
  private
148
184
 
185
+ # Calculates the attributes that describe the day. Called after changes.
186
+ #
149
187
  def set_attributes
150
188
  @first_hour=nil
151
189
  @first_min=nil
@@ -161,6 +199,12 @@ module Workpattern
161
199
  }
162
200
  end
163
201
 
202
+ # Returns the first working minute as a <tt>DateTime</tt> or <tt>oo:oo</tt>
203
+ # when there is no working minutes in the day. Used by the <tt>#subtract</tt> method
204
+ #
205
+ # @param [DateTime] time day for which the first working time is sought.
206
+ # @return [DateTime] the first working time of the day
207
+ #
164
208
  def first_working_minute(time)
165
209
  if @first_hour.nil?
166
210
  return time - (HOUR*time.hour) - (MINUTE*time.min)
@@ -171,6 +215,13 @@ module Workpattern
171
215
  end
172
216
  end
173
217
 
218
+ # Handles the subtraction of a duration from a time in the day.
219
+ #
220
+ # @param [DateTime] time when the subtraction starts from
221
+ # @param [Integer] duration is the number of minutes to subtract from the <tt>time</tt>
222
+ # @param [Boolean] midnight is a flag used in subtraction to pretend the time is actually midnight
223
+ # @return [DateTime,Integer,Boolean] Calculated time along with any remaining duration and the midnight flag
224
+ #
174
225
  def subtract(time,duration,midnight=false)
175
226
  if (time.hour==0 && time.min==0)
176
227
  if midnight
@@ -213,10 +264,13 @@ module Workpattern
213
264
  return time,duration, false
214
265
  end
215
266
 
216
- #
217
- # Returns the result of adding #duration to the specified time
267
+ # Returns the result of adding <tt>duration</tt> to the given <tt>time</tt>
218
268
  # When there are not enough minutes in the day it returns the date
219
- # for the start of the following
269
+ # for the start of the following day.
270
+ #
271
+ # @param [DateTime] time when the calculation starts from
272
+ # @param [Integer] duration is the number of minutes to add
273
+ # @return [DateTime,Integer] Calculated time along with any remaining duration
220
274
  #
221
275
  def add(time,duration)
222
276
  available_minutes=minutes(time.hour,time.min,@hours-1,59)
@@ -245,16 +299,26 @@ module Workpattern
245
299
  return result_date,duration, false
246
300
  end
247
301
 
302
+ # Returns the start of the next hour.
303
+ #
304
+ # The next hour could be the start of the following day.
305
+ #
306
+ # @param [DateTime] start is the <tt>DateTime</tt> for which the following hour is required.
307
+ # @return [DateTime] the start of the next hour following the <tt>DateTime</tt> supplied
308
+ #
248
309
  def next_hour(start)
249
310
  return start+HOUR-(start.min*MINUTE)
250
311
  end
251
312
 
313
+ # Returns the number of working minutes left in the current hour
314
+ #
315
+ # @param [DateTime] start is the <tt>DateTime</tt> for which the remaining working minutes
316
+ # in the hour are required
317
+ # @return [Integer] number of remaining working minutes
318
+ #
252
319
  def minutes_left_in_hour(start)
253
320
  return @values[start.hour].diff(start.min,60)
254
321
  end
255
322
 
256
- def minutes_left_in_day(start)
257
- start.hour
258
- end
259
323
  end
260
324
  end
@@ -1,60 +1,76 @@
1
1
  module Workpattern
2
2
 
3
- # Represents the 60 minutes of an hour using a <tt>Fixnum</tt> or <tt>Bignum</tt>
3
+ # Represents the 60 minutes of an hour using an <tt>Integer</tt>
4
+ #
5
+ # @since 0.2.0
4
6
  #
5
7
  module Hour
6
8
 
7
- # :call-seq: total => Integer
8
9
  # Returns the total working minutes in the hour
9
- #
10
+ #
11
+ # @return [Integer] working minutes in the hour
12
+ #
10
13
  def total
11
14
  return minutes(0,59)
12
15
  end
13
16
 
14
- # :call-seq: workpattern(start,finish,type) => Fixnum
15
17
  # Sets the minutes to either working (type=1) or resting (type=0)
18
+ #
19
+ # @param [Integer] start minute at start of range
20
+ # @param [Integer] finish minute at end of range
21
+ # @param [Integer] type defines whether working (1) or resting (0)
16
22
  #
17
23
  def workpattern(start,finish,type)
18
24
  return working(start,finish) if type==1
19
25
  return resting(start,finish) if type==0
20
26
  end
21
27
 
22
- # :call-seq: first => Integer
23
- # Returns the first working minute in the hour or 60 if there are none
28
+ # Returns the first working minute in the hour or 60 if there are no working minutes
29
+ #
30
+ # @return [Integer] first working minute or 60 if none found
24
31
  #
25
32
  def first
26
33
  0.upto(59) {|minute| return minute if self.minutes(minute,minute)==1}
27
34
  return nil
28
35
  end
29
36
 
30
- # :call-seq: last => Integer
31
- # Returns the last working minute in the hour or -1 if there are none
37
+ # Returns the last working minute in the hour or nil if there are no working minutes
38
+ #
39
+ # @return [Integer] last working minute or nil if none found
32
40
  #
33
41
  def last
34
42
  59.downto(0) {|minute| return minute if self.minutes(minute,minute)==1}
35
43
  return nil
36
44
  end
37
45
 
38
- # :call-seq: working?(start) => Boolean
39
46
  # Returns true if the given minute is working and false if it isn't
47
+ #
48
+ # @param [Integer] start is the minute being tested
49
+ # @return [Boolean] true if minute is working, otherwise false
40
50
  #
41
51
  def working?(start)
42
52
  return true if minutes(start,start)==1
43
53
  return false
44
54
  end
45
55
 
46
- # :call-seq: minutes(start,finish) => Integer
47
56
  # Returns the total number of minutes between and including two minutes
48
57
  #
58
+ # @param [Integer] start first minute in range
59
+ # @param [Integer] finish last minute in range
60
+ # @return [Integer] number of minutes from <tt>start</tt> to <tt>finish</tt> inclusive
61
+ #
49
62
  def minutes(start,finish)
50
63
  start,finish=finish,start if start > finish
51
64
  return (self & mask(start,finish)).to_s(2).count('1')
52
65
  end
53
66
 
54
- # :call-seq: calc(datetime,duration) => DateTime, Integer
55
- # Returns the DateTime and remainding minutes when adding or subtracting duration
56
- # to/from a minute in an hour.
57
- # Subtraction with a remainder returns the time of the current date as 00:00.
67
+ # Returns the DateTime and remainding minutes when adding a duration to a minute in the hour.
68
+ # A negative duration will subtract the minutes.
69
+ #
70
+ # @param [DateTime] time is the full date but only the minute element is used
71
+ # @param [Integer] duration is the number of minutes to add and can be negative (subtraction)
72
+ # @param [Boolean] next_hour used in subtraction to specify the starting point as midnight (00:00 the next day)
73
+ # @return [DateTime,Integer,Boolean] The <tt>DateTime</tt> calculated along with remaining minutes and a flag indicating if starting point is next hour
58
74
  #
59
75
  def calc(time,duration,next_hour=false)
60
76
 
@@ -67,8 +83,10 @@ module Workpattern
67
83
  end
68
84
  end
69
85
 
70
- # :call-seq: diff(start,finish) => Integer
71
- # returns the number of minutes between two minutes
86
+ # Returns the number of minutes between two minutes
87
+ # @param [Integer] start first minute in range
88
+ # @param [Integer] finish last minute in range
89
+ # @return [Integer] number of working minutes in the range
72
90
  #
73
91
  def diff(start,finish)
74
92
  start,finish=finish,start if start > finish
@@ -78,22 +96,39 @@ module Workpattern
78
96
 
79
97
  private
80
98
 
81
- # sets working pattern
99
+ # Sets a working pattern
100
+ #
101
+ # @param [Integer] start is first minute in the range
102
+ # @param [Integer] finish is last minute in the range
103
+ #
82
104
  def working(start,finish)
83
105
  return self | mask(start,finish)
84
106
  end
85
107
 
86
- # sets resting pattern
108
+ # sets a resting pattern
109
+ #
110
+ # @param [Integer] start is first minute in the range
111
+ # @param [Integer] finish is last minute in the range
112
+ #
87
113
  def resting(start,finish)
88
114
  return self & ((2**60-1)-mask(start,finish))
89
115
  end
90
116
 
91
- # creates a mask over the specified bits
117
+ # Creates a bit mask of 1's over the specified range
118
+ #
119
+ # @param [Integer] start is first minute in the range
120
+ # @param [Integer] finish is the last minute in the range
121
+ #
92
122
  def mask(start,finish)
93
123
  return ((2**(finish+1)-1)-(2**start-1))
94
124
  end
95
125
 
96
- # adds a duration to a time
126
+ # Handles the addition of minutes to a time
127
+ #
128
+ # @param [DateTime] time is the full date but only the minute element is used
129
+ # @param [Integer] duration is the number of minutes to add and can be negative (subtraction)
130
+ # @return [DateTime, Integer] The resulting DateTime and any remaining minutes
131
+ #
97
132
  def add(time,duration)
98
133
  start = time.min
99
134
  available_minutes=minutes(start,59)
@@ -121,7 +156,12 @@ module Workpattern
121
156
  return result_date, result_remainder
122
157
  end
123
158
 
124
- # subtracts a duration from a time
159
+ # Handles the subtraction of minutes from a time.
160
+ # @param [DateTime] time is the full date but only the minute element is used
161
+ # @param [Integer] duration is the number of minutes to add and can be negative (subtraction)
162
+ # @param [Boolean] next_hour indicates if the 59th second is the first one to be included
163
+ # @return [DateTime, Integer] The resulting DateTime and any remaining minutes
164
+ #
125
165
  def subtract(time,duration,next_hour)
126
166
  if next_hour
127
167
  if working?(59)
@@ -157,10 +197,9 @@ module Workpattern
157
197
  end
158
198
  end
159
199
 
160
- class Fixnum
200
+ # Hours are represented by a bitwise <tt>Integer</tt> class so the code is mixed in to that class
201
+ # @ since 0.3.0
202
+ #
203
+ class Integer
161
204
  include Workpattern::Hour
162
205
  end
163
- class Bignum
164
- include Workpattern::Hour
165
- end
166
-
@@ -1,11 +1,29 @@
1
1
  module Workpattern
2
-
2
+
3
+ # Mixins expected to be used in more than one class
4
+ #
5
+ # @since 0.2.0
6
+ #
3
7
  module Utility
4
-
8
+
9
+ # Returns the supplied <tt>DateTime</tt> at the very start of the day.
10
+ #
11
+ # @param [DateTime] adate is the <tt>DateTime</tt> to be changed
12
+ # @return [DateTime]
13
+ #
14
+ # @todo Consider mixin for DateTime class
15
+ #
5
16
  def midnight_before(adate)
6
17
  return adate -(HOUR * adate.hour) - (MINUTE * adate.min)
7
18
  end
8
19
 
20
+ # Returns the supplied <tt>DateTime</tt> at the very start of the next day.
21
+ #
22
+ # @param [DateTime] adate is the <tt>DateTime</tt> to be changed
23
+ # @return [DateTime]
24
+ #
25
+ # @todo Consider mixin for DateTime class
26
+ #
9
27
  def midnight_after(adate)
10
28
  return midnight_before(adate.next_day)
11
29
  end
@@ -1,3 +1,5 @@
1
1
  module Workpattern
2
- VERSION = '0.3.0'
2
+ # Version Number for Workpattern gem
3
+ # @since 0.0.1
4
+ VERSION = '0.3.1'
3
5
  end
@@ -4,26 +4,29 @@ module Workpattern
4
4
  # @!attribute values
5
5
  # @return [Array] each day of the week
6
6
  # @!attribute days
7
- # @return [Fixnum] number of days in the week
7
+ # @return [Integer] number of days in the week
8
8
  # @!attribute start
9
9
  # @return [DateTime] first date in the range
10
10
  # @!attribute finish
11
11
  # @return [DateTime] last date in the range
12
12
  # @!attribute week_total
13
- # @return [Fixnum] total number of minutes in a week
13
+ # @return [Integer] total number of minutes in a week
14
14
  # @!attribute total
15
- # @return [Fixnum] total number of minutes in the range
15
+ # @return [Integer] total number of minutes in the range
16
16
  #
17
17
  # Represents working and resting periods for each day in a week for a specified date range.
18
18
  #
19
+ # @since 0.2.0
20
+ #
19
21
  class Week
20
22
 
21
23
  attr_accessor :values, :days, :start, :finish, :week_total, :total
22
24
 
23
- # Initialises an instance of class Week
25
+ # The new <tt>Week</tt> object can be created as either working or resting.
26
+ #
24
27
  # @param [DateTime] start first date in the range
25
28
  # @param [DateTime] finish last date in the range
26
- # @param [Fixnum] type working (1) or resting (0)
29
+ # @param [Integer] type working (1) or resting (0)
27
30
  # @return [Week] newly initialised Week object
28
31
  #
29
32
  def initialize(start,finish,type=1)
@@ -36,8 +39,9 @@ module Workpattern
36
39
  set_attributes
37
40
  end
38
41
 
39
- # Duplicates the current Week object
40
- # @return [Week] a duplicated instance of the current Week object
42
+ # Duplicates the current <tt>Week</tt> object
43
+ #
44
+ # @return [Week] a duplicated instance of the current <tt>Week</tt> object
41
45
  #
42
46
  def duplicate()
43
47
  duplicate_week=Week.new(@start,@finish)
@@ -55,15 +59,18 @@ module Workpattern
55
59
  return duplicate_week
56
60
  end
57
61
 
58
- # Recalculates the attributes that defines a Week object.
59
- # This was made public for #duplicate to work
62
+ # Recalculates the attributes that define a <tt>Week</tt> object.
63
+ # This was made public for <tt>#duplicate</tt> to work
60
64
  #
61
65
  def refresh
62
66
  set_attributes
63
67
  end
64
68
 
65
69
  # Changes the date range.
66
- # This method calls #refresh to update the attributes.
70
+ # This method calls <tt>#refresh</tt> to update the attributes.
71
+ #
72
+ # @param [DateTime] start is the new starting date for the <tt>Week</tt>
73
+ # @param [DateTime] finish is the new finish date for the <tt>Week</tt>
67
74
  #
68
75
  def adjust(start,finish)
69
76
  @start=DateTime.new(start.year,start.month,start.day)
@@ -73,18 +80,21 @@ module Workpattern
73
80
 
74
81
  # Sets a range of minutes in a week to be working or resting. The parameters supplied
75
82
  # to this method determine exactly what should be changed
76
- # @param [Hash] days identifies the days to be included in the range
83
+ #
84
+ # @param [Hash(DAYNAMES)] days identifies the days to be included in the range
77
85
  # @param [DateTime] from_time where the time portion is used to specify the first minute to be set
78
86
  # @param [DateTime] to_time where the time portion is used to specify the last minute to be set
79
- # @param [Fixnum] type where a 1 sets it to working and a 0 to resting
87
+ # @param [Integer] type where a 1 sets it to working and a 0 to resting
88
+ #
80
89
  def workpattern(days,from_time,to_time,type)
81
90
  DAYNAMES[days].each {|day| @values[day].workpattern(from_time,to_time,type)}
82
91
  refresh
83
92
  end
84
93
 
85
94
  # Calculates a new date by adding or subtracting a duration in minutes.
95
+ #
86
96
  # @param [DateTime] start original date
87
- # @param [Fixnum] duration minutes to add or subtract
97
+ # @param [Integer] duration minutes to add or subtract
88
98
  # @param [Boolean] midnight flag used for subtraction that indicates the start date is midnight
89
99
  #
90
100
  def calc(start,duration, midnight=false)
@@ -94,13 +104,14 @@ module Workpattern
94
104
  return subtract(start,duration, midnight) if duration <0
95
105
  end
96
106
 
97
- # Comparison Returns an integer (-1, 0, or +1) if week is less than, equal to, or greater than other_week
107
+ # Comparison Returns an integer (-1, 0, or +1) if week is less than, equal to, or greater than other_week
108
+ #
98
109
  # @param [Week] other_week object to compare to
99
110
  # @return [Integer] -1,0 or +1 if week is less than, equal to or greater than other_week
100
- def <=>(obj)
101
- if @start < obj.start
111
+ def <=>(other_week)
112
+ if @start < other_week.start
102
113
  return -1
103
- elsif @start == obj.start
114
+ elsif @start == other_week.start
104
115
  return 0
105
116
  else
106
117
  return 1
@@ -108,6 +119,7 @@ module Workpattern
108
119
  end
109
120
 
110
121
  # Returns true if the supplied DateTime is working and false if resting
122
+ #
111
123
  # @param [DateTime] start DateTime to be tested
112
124
  # @return [Boolean] true if the minute is working otherwise false if it is a resting minute
113
125
  #
@@ -116,10 +128,10 @@ module Workpattern
116
128
  end
117
129
 
118
130
  # Returns the difference in minutes between two DateTime values.
131
+ #
119
132
  # @param [DateTime] start starting DateTime
120
133
  # @param [DateTime] finish ending DateTime
121
- # @return [Fixnum] number of minutes
122
- # @return [DateTime] start date for rest of calculation. The calculation is complete when this is the same as the finish date
134
+ # @return [Integer, DateTime] number of minutes and start date for rest of calculation.
123
135
  #
124
136
  def diff(start,finish)
125
137
  start,finish=finish,start if ((start <=> finish))==1
@@ -159,9 +171,10 @@ module Workpattern
159
171
  end
160
172
 
161
173
  # Calculates the total number of minutes between two dates
174
+ #
162
175
  # @param [DateTime] start is the first date in the range
163
176
  # @param [DateTime] finish is the last date in the range
164
- # @return [Fixnum] total number of minutes between supplied dates
177
+ # @return [Integer] total number of minutes between supplied dates
165
178
  #
166
179
  def total_hours(start,finish)
167
180
  total=0
@@ -171,13 +184,13 @@ module Workpattern
171
184
  return total
172
185
  end
173
186
 
174
- # Adds a duration in minutes to a date
187
+ # Adds a duration in minutes to a date.
188
+ #
189
+ # The Boolean returned is always false.
190
+ #
175
191
  # @param [DateTime] start original date
176
- # @param [Fixnum] duration minutes to add
177
- # @param [Boolean] midnight flag used for subtraction that indicates the start date is midnight
178
- # @return [DateTime] the calculated date
179
- # @return [Fixnum] the number of minutes still to be added
180
- # @return [Boolean] Always false, this is the flag used for subtraction
192
+ # @param [Integer] duration minutes to add
193
+ # @return [DateTime, Integer, Boolean] the calculated date, remaining minutes and flag used for subtraction
181
194
  #
182
195
  def add(start,duration)
183
196
  # aim to calculate to the end of the day
@@ -220,12 +233,12 @@ module Workpattern
220
233
  end
221
234
 
222
235
  # Subtracts a duration in minutes from a date
236
+ #
223
237
  # @param [DateTime] start original date
224
- # @param [Fixnum] duration minutes to subtract - always a negative
238
+ # @param [Integer] duration minutes to subtract - always a negative
225
239
  # @param [Boolean] midnight flag indicates the start date is midnight when true
226
- # @return [DateTime] the calculated date
227
- # @return [Fixnum] the number of minutes still to be subtracted
228
- # @return [Boolean] When set to true indicates the time is midnight on the given date
240
+ # @return [DateTime, Integer, Boolean] the calculated date, remaining number of minutes and
241
+ # true if the time is midnight on the date
229
242
  #
230
243
  def subtract(start,duration,midnight=false)
231
244
 
@@ -286,10 +299,11 @@ module Workpattern
286
299
 
287
300
  # Supports calculating from midnight by updating the given duration depending on whether the
288
301
  # last minute in the day is resting or working. It then sets the time to this minute.
302
+ #
289
303
  # @param [DateTime] start is the date whose midnight is to be used as the start date
290
- # @param [Fixnum] duration is the number of minutes to subtract
291
- # @return [DateTime] the date with a time of 23:59
292
- # @return [Fixnum] the duration adjusted according to whether 23:59 is resting or not
304
+ # @param [Integer] duration is the number of minutes to subtract
305
+ # @return [DateTime, Integer] the date with a time of 23:59 and remaining duration
306
+ # adjusted according to whether 23:59 is resting or not
293
307
  #
294
308
  def minute_b4_midnight(start,duration)
295
309
  start -= start.hour * HOUR
@@ -300,6 +314,7 @@ module Workpattern
300
314
  end
301
315
 
302
316
  # Calculates the date and time after the last working minute of the current date
317
+ #
303
318
  # @param [DateTime] start is the current date
304
319
  # @return [DateTime] the new date
305
320
  #
@@ -314,11 +329,11 @@ module Workpattern
314
329
  end
315
330
 
316
331
  # Calculates the difference between two dates that exist in this Week object.
332
+ #
317
333
  # @param [DateTime] start first date
318
334
  # @param [DateTime] finish last date
319
335
  # @param [DateTime] finish_on the range to be used in this Week object.
320
- # @return [DateTime] new date for rest of calculation otherwise same as finish if completed calculation
321
- # @return [Fixnum] total number of minutes calculated thus far.
336
+ # @return [DateTime, Integer] new date for rest of calculation and total number of minutes calculated thus far.
322
337
  #
323
338
  def diff_detail(start,finish,finish_on)
324
339
  duration, start=@values[start.wday].diff(start,finish)