Class: Duration
- Inherits:
-
Object
- Object
- Duration
- Defined in:
- lib/duration.rb
Instance Attribute Summary collapse
-
#hours ⇒ Object
Returns the value of attribute hours.
-
#minutes ⇒ Object
Returns the value of attribute minutes.
Class Method Summary collapse
Instance Method Summary collapse
- #+(duration) ⇒ Object
-
#initialize(hours = 0, minutes = 0) ⇒ Duration
constructor
A new instance of Duration.
- #to_s ⇒ Object
- #valid? ⇒ Boolean
Constructor Details
#initialize(hours = 0, minutes = 0) ⇒ Duration
4 5 6 7 8 9 10 11 |
# File 'lib/duration.rb', line 4 def initialize(hours=0, minutes=0) unless hours.is_a?(Integer) && minutes.is_a?(Integer) raise TypeError.new("Duration expects integer parameters.") end @hours=hours @minutes=minutes end |
Instance Attribute Details
#hours ⇒ Object
Returns the value of attribute hours.
2 3 4 |
# File 'lib/duration.rb', line 2 def hours @hours end |
#minutes ⇒ Object
Returns the value of attribute minutes.
2 3 4 |
# File 'lib/duration.rb', line 2 def minutes @minutes end |
Class Method Details
.try_convert(str) ⇒ Object
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
# File 'lib/duration.rb', line 23 def self.try_convert(str) floatValue = Float(str, exception: false) if floatValue parsedMinutes = floatValue * 60 parsedHours = (parsedMinutes / 60).floor parsedMinutes = parsedMinutes % 60 newDuration = Duration.new(parsedHours, parsedMinutes.round) return newDuration if newDuration.valid? end parts=str.split(":") return unless parts.length == 2 parsedHours = Integer(parts[0], exception: false) parsedMinutes = Integer(parts[1], exception: false) parsedHours = parsedHours + (parsedMinutes / 60) if parsedHours != nil && parsedMinutes != nil parsedHours = (parsedMinutes / 60) if parsedHours == nil && parsedMinutes != nil return unless parsedHours != nil && parsedMinutes != nil parsedMinutes = parsedMinutes % 60 newDuration = Duration.new(parsedHours, parsedMinutes) if newDuration.valid? then newDuration else nil end end |
Instance Method Details
#+(duration) ⇒ Object
17 18 19 20 21 |
# File 'lib/duration.rb', line 17 def +(duration) newMinutes = (@minutes + duration.minutes) % 60 newHours = @hours + duration.hours + (@minutes + duration.minutes) / 60 Duration.new(newHours, newMinutes) end |
#to_s ⇒ Object
51 52 53 54 55 |
# File 'lib/duration.rb', line 51 def to_s formattedHours = @hours.to_s.rjust(2, "0") formattedMinutes = @minutes.to_s.rjust(2, "0") return "#{formattedHours}:#{formattedMinutes}" end |
#valid? ⇒ Boolean
13 14 15 |
# File 'lib/duration.rb', line 13 def valid? @hours >= 0 && @minutes >= 0 && @minutes <= 59 end |