workpattern 0.4.0 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,7 @@
1
1
  ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- YmYzOTdhYWIzZTYwZjZmODY3NzBmYmQ5ZWY3MTI0MDcyNWUzNThhYw==
5
- data.tar.gz: !binary |-
6
- MjZmZTg4OTViNzJjY2I0NGI1OTNlZjQ2NzYwZGNmZTg1ZDE4Y2JjZA==
2
+ SHA1:
3
+ metadata.gz: 8e19f40a13975d2a07d505bce513b1d48dc25ca6
4
+ data.tar.gz: 8a974a014e365222029c333b8fee0835e91bd125
7
5
  SHA512:
8
- metadata.gz: !binary |-
9
- ZTIzNDljMTg5NTJmMzgyMGEwZTE2ZmM3OTUzNjVhNzRjYzIzMDAxYTE3ZWY1
10
- YTJkYTRkZWQ5YjVmZTQ3N2E4YWVhZGNiZTFmNmQ2YzI1Yjc5MjY5MzU1YWRk
11
- NTNmMDFjODY5ZTNkZDliZjBiYzY5ZDljMzkwYWY1NzA3ZjYyNDk=
12
- data.tar.gz: !binary |-
13
- OWY5ZmM4Yzc0MmViNmY5YmZmMTE2YzFhMTVmMTA5Y2M5MzRmMmE0ZWM0YWVh
14
- MzY3YWFkNjNlYTBkN2JjZjdmYjM3MTRhMDA4NTQ2YjQ1NGZkYmU3ZmQzMDE2
15
- NjZlZDI5MzVjZjExNTY4YjVlZjMyMTA4ZjQxMDg0YmY2ZjE1NDI=
6
+ metadata.gz: 8bc16dcdae0b21a90952c15fde3bdcc51a7ad0dea8d28afa9e26f3afb78e76b16738690227a668e01878eb56009460f9b82f698f72ed5198d6a6156cfc375818
7
+ data.tar.gz: 757f7bc54c5247c09ca12533ed349a1aef37d47056ac4e12d98820a4ea7a94958f6d5c4256fb935278c4152159a100f10aa7a4cba54c4468ab89ea4625e73b69
data/.gitignore CHANGED
@@ -14,4 +14,7 @@ rdoc
14
14
  spec/reports
15
15
  test/tmp
16
16
  test/version_tmp
17
- tmp
17
+ tmp
18
+ \#*
19
+ .#*
20
+ *.swp
@@ -2,7 +2,13 @@ language: ruby
2
2
  rvm:
3
3
  - 1.9.3
4
4
  - jruby-19mode # JRuby in 1.9 mode
5
- - 2.0.0
6
5
  - 2.1.0
6
+ - 2.1.9
7
+ - 2.2.0
8
+ - 2.2.5
9
+ - 2.3.0
10
+ - 2.3.1
7
11
  - jruby-head
8
- - ruby-head
12
+ before_install:
13
+ - gem install bundler
14
+ - gem update bundler
data/CHANGELOG CHANGED
@@ -1,3 +1,22 @@
1
+ ## Workpattern v0.5.0 ( Oct 19, 2016) ##
2
+
3
+ * Workpattern now handles Timezones. It changes the date into UTC, does the calculation and then changes it back * Barrie Callender
4
+ * Removed Day class and associated tests as it is no longer used * Barrie Callender
5
+ * Reviewed the README and removed a lot of cruft and also updated it a little to demonstrate features * Barrie Callender
6
+ * Hid documentation unless it was part of the public api * Barrie Callender
7
+ * Used Rubocop to help me be more consistent. I ignored some of the offences to do with long lines/methods and classes * Barrie Callender
8
+ * Code makes use of Time objects where it use to use DateTime. Time comes with a Timezone * Barrie Callender
9
+ * Rewrote/refactored methods in the Week class - which needs refactoring into new classes * Barrie Callender
10
+ * Removed rubyforge_project from workpattern.gemspec * Barrie Callender
11
+ * Added homepage & required_ruby_version to workpattern.gemspec * Barrie Callender
12
+ * Added versions to test in Travis CI to include 1.9.3, 2.0.0, 2.1.0, 2.1.9, 2.2.0, 2.2.5, 2.3.0 & 2.3.1 * Barrie Callender
13
+ * Dealt with Travis CI issue with version of bundler * Barrie Callender
14
+ * Removed config directory & contents * Barrie Callender
15
+ * Changed Description * barrie Callender
16
+ * Specified minitest ~> 5.4.3 due to an issue I no longer recall * Barrie Callender
17
+ * Hid all the documentation apart from public api * Barrie Callender
18
+ * improved the README.md (IMHO) * Barrie Callender
19
+
1
20
  ## Workpattern v0.4.0 ( May 23, 2014) ##
2
21
 
3
22
  * Updated Week class to use bits and removed Day and Hour class as a consequence * Barrie Callender *
data/Gemfile CHANGED
File without changes
data/README.md CHANGED
@@ -1,102 +1,103 @@
1
1
  # Workpattern [![Build Status](https://secure.travis-ci.org/callenb/workpattern.png)](https://secure.travis-ci.org/callenb/workpattern.png)
2
2
 
3
- ## What?
3
+ Calculates dates and durations whilst taking into account working and non-working times. It creates calendars similar to what you can find in project scheduling software like Microsoft project and Primavera P6.
4
4
 
5
- Simple addition and subtraction of minutes on dates taking account of real-life working and resting periods.
5
+ Please use [Github Issues] to report bugs. If you have a question about the library, please use the `workpattern` tag on [Stack Overflow]. This tag is monitored by contributors.
6
6
 
7
- ## So What?
7
+ [Github Issues]: http://github.com/callenb/workpattern/issues
8
+ [Stack Overflow]: http://stackoverflow.com/questions/tagged/workpattern
8
9
 
9
- The core Ruby classes that represent date and time allow calculations by adding a duration such as days or
10
- minutes to a date and returning the new `Date` or `DateTime` as the result. Although there
11
- are 60 seconds in every minute and 60 minutes in every hour, there aren't always 24 hours in every day, and
12
- if there was, we still wouldn't be working during all of them. We would be doing other things like eating,
13
- sleeping, travelling and having a bit of leisure time. Workpattern refers to this time as Resting time.
14
- It refers to the time when we're busy doing stuff as Working time.
10
+ ## Getting Started
15
11
 
16
- When it comes to scheduling work, whether part of a project, teachers in a classroom or even bed availability
17
- in a hospital, the working day can have anything from 0 hours to the full 24 hours. Most office based work
18
- is something like 7.5 or 8 hours a day except weekends, public holidays and vacations when no work takes
19
- place.
12
+ Workpattern is a library with no monkey-patching and is tested against Ruby `>= 1.9.2`.
20
13
 
21
- The `Workpattern` library was born to allow date related calculations to take into account real life
22
- working and resting times. It gets told about working and resting periods and can then perform calculations
23
- on a given date. It can add and subtract a number of minutes, calculate the working minutes between two dates
24
- and say whether a specific minute is working or resting.
14
+ You can install it using:
15
+ ```sh
16
+ gem install workpattern
17
+ ```
25
18
 
26
- This gem has the potential to serve as the engine for scheduling algorithms that are the core of products such as Microsoft Project and Oracle Primavera P6 as well as other applications that need to know when they can perform work and when they can’t.
19
+ Or you can add it to your Gemfile with:
27
20
 
28
- ## Install
21
+ ```sh
22
+ gem "workpattern"
23
+ ```
29
24
 
30
- `sudo gem install workpattern`
25
+ Then run the bundle command to install it.
31
26
 
32
- ## Getting Started
27
+ ## Use
33
28
 
34
- The first step is to create a `Workpattern` to hold all the working and resting times. I'll start in 2011 and let it run for 10 years.
29
+ ## Configure and Calculate
30
+
31
+ First create a `Workpattern` to hold all the working and resting times.
35
32
 
36
33
  ``` ruby
37
- mywp=Workpattern.new('My Workpattern',2011,10)
34
+ mywp=Workpattern.new 'My Workpattern',2011,10
38
35
  ```
36
+ That line created a `Workpattern` called `My Workpattern` starting on 1-Jan-2011 and continuing for `10` years until `2020`.
39
37
 
40
- My `Workpattern` will be created as a 24 hour a day full working time. Now it has to be told about the resting periods. First the weekends.
38
+ `mywp` is created with a 24 hour a day working time. Next step is to tell it to ignore weekends by making every Saturday and Sunday non-working.
41
39
 
42
40
  ``` ruby
43
- mywp.resting(:days => :weekend)
41
+ mywp.resting :days => :weekend
44
42
  ```
45
43
 
46
- then the days in the week have specific working and resting times using the *Workpattern.clock* method, although anything that responds to `#hour` and `#min` methods will do ...
44
+ The `Workpattern.clock` method can be used to specify the non-working times for each weekday. Any class that responds to `#hour` and `#min` methods such as `Time` or `DateTime` can be used instead of `Workpattern.clock`.
47
45
 
48
46
  ``` ruby
49
- mywp.resting(:days =>:weekday, :from_time=>Workpattern.clock(0,0),:to_time=>Workpattern.clock(8,59))
50
- mywp.resting(:days =>:weekday, :from_time=>Workpattern.clock(12,0),:to_time=>Workpattern.clock(12,59))
51
- mywp.resting(:days =>:weekday, :from_time=>Workpattern.clock(18,0),:to_time=>Workpattern.clock(23,59))
47
+ mywp.resting :days =>:weekday, :from_time=>Workpattern.clock(0,0),:to_time=>Workpattern.clock(8,59)
48
+ mywp.resting :days =>:weekday, :from_time=>Workpattern.clock(12,0),:to_time=>Workpattern.clock(12,59)
49
+ mywp.resting :days =>:weekday, :from_time=>Workpattern.clock(18,0),:to_time=>Workpattern.clock(23,59)
52
50
  ```
51
+ As well as `:weekend` and `:weekday` it is possible to use `:mon`, `:tue`, `:wed`, `:thu`, `:fri`, `:sat`, `:sun` or `all`.
53
52
 
54
- Now we have the working and resting periods setup we can just add 32 hours as minutes (1920) to our date.
53
+ With `mywp` setup, the `#calc` method is used to add 32 hours which must be supplied as the number of whole minutes (1920) to a date.
55
54
 
56
55
  ``` ruby
57
- mydate=DateTime.civil(2011,9,1,9,0)
58
- result_date = mywp.calc(mydate,1920) # => 6/9/11@18:00
56
+ my_date=Time.gm 2011,9,1,9,0
57
+ result_date = mywp.calc my_date,1920 # => 6/9/11@18:00
59
58
  ```
60
59
 
61
- ## Development
60
+ The result takes into account the non-working or resting times.
61
+
62
+ Subtracting a date is just as easy by using a negative number of minutes in `#calc`.
62
63
 
63
- * Source hosted on [GitHub](http://github.com/callenb/workpattern).
64
- * Direct questions and discussions to the [mailing list](http://groups.google.com/group/workpattern).
65
- * Report issues on [GitHub Issues](http://github.com/callenb/workpattern/issues).
66
- * Pull requests are very welcome, however I have never participated in Open Source so will be a bit slow as I am learning. Please be patient with me. Please include spec and/or feature coverage for every patch, and create a topic branch for every separate change you make.
67
- * Advice, such as pointing out how I should really code in Ruby will be gratefully received.
64
+ Finding the duration between two dates is also easy using the `#diff` method.
68
65
 
69
- ## Things To Do
66
+ ``` ruby
67
+ diff_result = mywp.diff my_date, result_date # => 1920
68
+ ```
70
69
 
71
- In its current form this library is being made available to see if there is any interest in using
72
- it. At the moment it can perform the following:
70
+ Vacations can be added to the `Workpattern` using the `#resting` method:
73
71
 
74
- * define the working and resting minutes for any 24 hour day
75
- * given a date it can return the resulting date after adding or subtracting a number of minutes
76
- * calculate the number of working minutes between two dates
77
- * report whether a specific minute in time is working or resting
72
+ ``` ruby
73
+ mywp.resting :days => :all, :start => DateTime.civil(2011,5,1), :finish => DateTime.civil(2011,5,7)
74
+ ```
75
+ Find out if a specific date and time is working or not.
78
76
 
79
- This is what I consider to be the basics, but there are a number of functional and non-functial areas I
80
- would like to address in a future version.
77
+ ``` ruby
78
+ mydate = DateTime.civil 2011,5,2,9,10
79
+ mywp.resting? mydate # => true
80
+ mywp.working? mydate # => false
81
+ ```
81
82
 
82
- ## Functional
83
+ ### Manage
83
84
 
84
- * Merge two Workpatterns together to create a new one allowing either resting or working to take precedence
85
- * Given a date, find the next working or resting minute either before or after it.
86
- * Handle both 23 and 25 hour days that occur when the clocks change.
87
- * Extract patterns from the workpattern so they can be persisted in a database.
88
- * Decide how to handle different Timezones apart from UTC.
85
+ ``` ruby
86
+ # Fetch a specific Workpattern
87
+ Workpattern.get "My Workpattern"
89
88
 
90
- ## Non-Functional
89
+ # Delete a specific Workpattern
90
+ Workpattern.delete "My Workpattern"
91
91
 
92
- * Improve the documentation and introduce real world use as an example
93
- * Improve my ability to write Ruby code
92
+ # Delete all Workpatterns
93
+ Workpattern.clear
94
+ ```
94
95
 
95
96
  ## License
96
97
 
97
98
  (The MIT License)
98
99
 
99
- Copyright (c) 2012
100
+ Copyright (c) 2012 - 2016
100
101
 
101
102
  Permission is hereby granted, free of charge, to any person obtaining
102
103
  a copy of this software and associated documentation files (the
data/Rakefile CHANGED
File without changes
@@ -3,107 +3,117 @@
3
3
  #
4
4
  # email: barrie@callenb.org
5
5
  #++
6
- $:.unshift(File.dirname(__FILE__)) unless
7
- $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
6
+ $LOAD_PATH.unshift(File.dirname(__FILE__)) unless
7
+ $LOAD_PATH.include?(File.dirname(__FILE__)) || $LOAD_PATH.include?(File.expand_path(File.dirname(__FILE__)))
8
8
 
9
9
  require 'rubygems'
10
10
  require 'date'
11
11
  require 'workpattern/utility/base.rb'
12
12
  require 'workpattern/clock'
13
+ #require 'workpattern/day'
13
14
  require 'workpattern/week'
14
15
  require 'workpattern/workpattern'
15
16
 
16
17
  #
17
18
  # workpattern.rb - date calculation library that takes into account patterns of
18
- # working and resting time and is aimed at supporting scheduling applications such
19
- # as critical path analysis.
19
+ # working and resting time and is aimed at supporting scheduling applications
20
+ # such as critical path analysis.
20
21
  #
21
22
  # Author: Barrie Callender 2011
22
23
  #
23
24
  # Documentation: Barrie Callender <barrie@callenb.org>
24
25
  #
25
26
  module Workpattern
26
-
27
27
  # Represents a full working hour
28
28
  # @since 0.2.0
29
- WORKING_HOUR = 2**60-1
30
-
29
+ WORKING_HOUR = 2**60 - 1
30
+
31
31
  # Represents a full resting hour
32
- # @since 0.2.0
32
+ # @since 0.2.0
33
33
  RESTING_HOUR = 0
34
-
34
+
35
35
  # The default workpattern name
36
- # @since 0.2.0
37
- DEFAULT_WORKPATTERN_NAME = 'default'
38
-
36
+ # @since 0.2.0
37
+ DEFAULT_WORKPATTERN_NAME = 'default'.freeze
38
+
39
39
  # The default base year
40
40
  # @since 0.2.0
41
41
  DEFAULT_BASE_YEAR = 2000
42
-
42
+
43
43
  # The default span in years
44
44
  # @since 0.2.0
45
45
  DEFAULT_SPAN = 100
46
-
47
- # Hour in terms of days
48
- # @since 0.2.0
49
- HOUR = Rational(1,24)
50
-
51
- # Minute in terms of days
52
- # @since 0.2.0
53
- MINUTE = Rational(1,1440)
54
-
46
+
47
+ # Minute in terms of seconds
48
+ #
49
+ MINUTE = 60
50
+
51
+ # Hour interms od seconds
52
+ #
53
+ HOUR = MINUTE * 60
54
+
55
+ # Day in terms of seconds
56
+ #
57
+ DAY = HOUR * 24
58
+
55
59
  # Earliest or first time in the day
56
60
  # @since 0.0.1
57
- FIRST_TIME_IN_DAY=Clock.new(0,0)
58
-
61
+ FIRST_TIME_IN_DAY = Clock.new(0, 0)
62
+
59
63
  # Latest or last time in the day
60
64
  # @since 0.0.1
61
- LAST_TIME_IN_DAY=Clock.new(23,59)
62
-
65
+ LAST_TIME_IN_DAY = Clock.new(23, 59)
66
+
63
67
  # Specifies a working pattern
64
68
  # @since 0.0.1
65
69
  WORK = 1
66
-
70
+
67
71
  # Specifies a resting pattern
68
72
  # @since 0.0.1
69
73
  REST = 0
70
-
71
- # Represents the days of the week to be used in applying working and resting patterns.
72
- # Values exist for each day of the week as well as for the weekend (Saturday and Sunday),
74
+
75
+ # Represents the days of the week to be used in applying working
76
+ # and resting patterns.
77
+ # Values exist for each day of the week as well as for the weekend
78
+ # (Saturday and Sunday),
73
79
  # the week (Monday to Friday) and all days in the week.
74
80
  #
75
81
  # @since 0.0.1
76
- DAYNAMES={:sun => [0],:mon => [1], :tue => [2], :wed => [3], :thu => [4], :fri => [5], :sat => [6],
77
- :weekday => [1,2,3,4,5],
78
- :weekend => [0,6],
79
- :all => [0,1,2,3,4,5,6]}
80
-
81
- # Covenience method to obtain a new <tt>Workpattern</tt>
82
+ daynames = { sun: [0], mon: [1], tue: [2], wed: [3],
83
+ thu: [4], fri: [5], sat: [6],
84
+ weekday: [1, 2, 3, 4, 5],
85
+ weekend: [0, 6],
86
+ all: [0, 1, 2, 3, 4, 5, 6] }
87
+ DAYNAMES = daynames.freeze
88
+ # Covenience method to obtain a new <tt>Workpattern</tt>
82
89
  #
83
90
  # A negative <tt>span</tt> counts back from the <tt>base</tt> year
84
91
  #
85
92
  # @param [String] name Every workpattern has a unique name.
86
93
  # @param [Integer] base Workpattern starts on the 1st January of this year.
87
- # @param [Integer] span Workpattern spans this number of years ending on 31st December.
94
+ # @param [Integer] number of years ending on 31st December.
88
95
  # @return [Workpattern]
89
- # @raise [NameError] when trying to create a Workpattern with a name that already exists
96
+ # @raise [NameError] creating a Workpattern with a name that already exists
90
97
  # @since 0.2.0
91
98
  #
92
- def self.new(name=DEFAULT_WORKPATTERN_NAME, base=DEFAULT_BASE_YEAR, span=DEFAULT_SPAN)
93
- return Workpattern.new(name, base,span)
99
+ def self.new(name = DEFAULT_WORKPATTERN_NAME,
100
+ base = DEFAULT_BASE_YEAR,
101
+ span = DEFAULT_SPAN)
102
+ Workpattern.new(name, base, span)
94
103
  end
95
-
96
- # Covenience method to obtain an Array of all the known <tt>Workpattern</tt> objects
104
+
105
+ # Covenience method to obtain an Array of all the known <tt>Workpattern</tt>
106
+ # objects
97
107
  #
98
108
  # @return [Array] all <tt>Workpattern</tt> objects
99
109
  #
100
110
  # @since 0.2.0
101
111
  #
102
- def self.to_a()
103
- return Workpattern.to_a
112
+ def self.to_a
113
+ Workpattern.to_a
104
114
  end
105
115
 
106
- # Covenience method to obtain an existing <tt>Workpattern</tt>
116
+ # Covenience method to obtain an existing <tt>Workpattern</tt>
107
117
  #
108
118
  # @param [String] name The name of the Workpattern to retrieve.
109
119
  # @return [Workpattern]
@@ -111,9 +121,9 @@ module Workpattern
111
121
  # @since 0.2.0
112
122
  #
113
123
  def self.get(name)
114
- return Workpattern.get(name)
124
+ Workpattern.get(name)
115
125
  end
116
-
126
+
117
127
  # Convenience method to delete the named <tt>Workpattern</tt>
118
128
  #
119
129
  # @param [String] name The name of the Workpattern to be deleted.
@@ -123,18 +133,18 @@ module Workpattern
123
133
  def self.delete(name)
124
134
  Workpattern.delete(name)
125
135
  end
126
-
136
+
127
137
  # Convenience method to delete all Workpatterns.
128
- #
138
+ #
129
139
  # @since 0.2.0
130
140
  #
131
141
  def self.clear
132
142
  Workpattern.clear
133
143
  end
134
-
135
- # Convenience method to create a Clock object. This can be used for specifying times
136
- # if you don't want to create a <tt>DateTime</tt> object
137
- #
144
+
145
+ # Convenience method to create a Clock object. This can be used for
146
+ # specifying times if you don't want to create a <tt>DateTime</tt> object
147
+ #
138
148
  # @param [Integer] hour the number of hours.
139
149
  # @param [Integer] min the number of minutes
140
150
  # @return [Clock]
@@ -142,7 +152,7 @@ module Workpattern
142
152
  #
143
153
  # @since 0.2.0
144
154
  #
145
- def self.clock(hour,min)
146
- return Clock.new(hour,min)
155
+ def self.clock(hour, min)
156
+ Clock.new(hour, min)
147
157
  end
148
158
  end
@@ -7,7 +7,7 @@ module Workpattern
7
7
  # myClock.hour #=> 3
8
8
  # myClock.min #=> 32
9
9
  # myClock.time #=> Time.new(1963,6,10,3,32)
10
- # myClock.to_s #=> 3:32 212
10
+ # myClock.to_s #=> 3:32 212
11
11
  #
12
12
  # aClock=Clock.new(27,80)
13
13
  # aClock.minutes #=> 1700
@@ -19,64 +19,61 @@ module Workpattern
19
19
  # @since 0.2.0
20
20
  #
21
21
  class Clock
22
-
23
- # Initialises an instance of <tt>Clock</tt> using the hours and minutes supplied
24
- # or 0 if they are absent. Although there are 24 hours in a day
22
+ # Initialises an instance of <tt>Clock</tt> using the hours and minutes
23
+ # supplied or 0 if they are absent. Although there are 24 hours in a day
25
24
  # (0-23) and 60 minutes in an hour (0-59), <tt>Clock</tt> calculates
26
25
  # the full hours and remaining minutes of whatever is supplied.
27
26
  #
28
27
  # @param [Integer] hour number of hours
29
28
  # @param [Integer] min number of minutes
30
29
  #
31
- def initialize(hour=0,min=0)
32
- @hour = total_minutes(hour,min).div(60)
33
- @min = total_minutes(hour,min) % 60
30
+ def initialize(hour = 0, min = 0)
31
+ @hour = total_minutes(hour, min).div(60)
32
+ @min = total_minutes(hour, min) % 60
34
33
  end
35
-
34
+
36
35
  # Returns the total number of minutes
37
36
  #
38
37
  # @return [Integer] total minutes represented by the Clock object
39
38
  #
40
39
  def minutes
41
- return total_minutes(@hour,@min)
40
+ total_minutes(@hour, @min)
42
41
  end
43
-
42
+
44
43
  # Returns the hour of the clock (0-23)
45
44
  #
46
45
  # @return [Integer] hour of Clock from 0 to 23.
47
46
  #
48
47
  def hour
49
- return @hour % 24
48
+ @hour % 24
50
49
  end
51
-
50
+
52
51
  # Returns the minute of the clock (0-59)
53
52
  #
54
53
  # @return [Integer] minute of Clock from 0 to 59
55
54
  #
56
55
  def min
57
- return @min % 60
56
+ @min % 60
58
57
  end
59
-
58
+
60
59
  # Returns a <tt>Time</tt> object with the correct
61
60
  # <tt>hour</tt> and <tt>min</tt> values. The date
62
61
  # is 10th June 1963.
63
62
  #
64
63
  # @return [DateTime] The time using the date of 10th June 1963 (My Birthday)
65
64
  def time
66
- return DateTime.new(1963,6,10,hour,min)
65
+ DateTime.new(1963, 6, 10, hour, min)
67
66
  end
68
-
69
67
 
70
68
  # @return [String] representation of <tt>Clock</tt> value as 'hh:mn minutes'
71
- def to_s
69
+ def to_s
72
70
  hour.to_s.concat(':').concat(min.to_s).concat(' ').concat(minutes.to_s)
73
71
  end
74
-
72
+
75
73
  private
76
74
 
77
75
  def total_minutes(hours, mins)
78
- return (hours*60) + mins
76
+ (hours * 60) + mins
79
77
  end
80
-
81
78
  end
82
79
  end