workpattern 0.3.0 → 0.3.1

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.
@@ -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)