class Duration
Attributes
hours[RW]
minutes[RW]
Public Class Methods
from_minutes(mins)
click to toggle source
# File lib/duration.rb, line 77 def self.from_minutes(mins) newMinutes = mins % 60 newHours = mins / 60 Duration.new(newHours, newMinutes) end
new(hours=0, minutes=0)
click to toggle source
# File lib/duration.rb, line 6 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
try_convert(str)
click to toggle source
# File lib/duration.rb, line 29 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 if str.include?("-") times = str.split("-") times.map! { |t| t + (t.include?(":") ? "" : ":00") } begin startTime = Time.parse(times[0]) endTime = Time.parse(times[1]) rescue return end minutesBetween = Integer((endTime - startTime) / 60, exception: false) return unless minutesBetween != nil parsedHours = minutesBetween / 60 parsedMinutes = minutesBetween % 60 newDuration = Duration.new(parsedHours, parsedMinutes) if newDuration.valid? then newDuration else nil end else parts=str.split(":") return unless parts.length == 2 parsedHours = Integer(parts[0], exception: false) parsedMinutes = Integer(parts[1], exception: false) return if parsedMinutes == nil parsedHours = 0 if parsedHours == nil parsedHours = parsedHours + (parsedMinutes / 60) parsedMinutes = parsedMinutes % 60 newDuration = Duration.new(parsedHours, parsedMinutes) if newDuration.valid? then newDuration else nil end end end
Public Instance Methods
+(duration)
click to toggle source
# File lib/duration.rb, line 19 def +(duration) newMinutes = (@minutes + duration.minutes) % 60 newHours = @hours + duration.hours + (@minutes + duration.minutes) / 60 Duration.new(newHours, newMinutes) end
to_s()
click to toggle source
# File lib/duration.rb, line 83 def to_s formattedHours = @hours.to_s.rjust(2, "0") formattedMinutes = @minutes.to_s.rjust(2, "0") return "#{formattedHours}:#{formattedMinutes}" end
total_minutes()
click to toggle source
# File lib/duration.rb, line 25 def total_minutes() return @hours * 60 + @minutes end
valid?()
click to toggle source
# File lib/duration.rb, line 15 def valid? @hours >= 0 && @minutes >= 0 && @minutes <= 59 end