Class: Runby::RunbyTimeParser::TimeParts
- Inherits:
-
Object
- Object
- Runby::RunbyTimeParser::TimeParts
- Defined in:
- lib/runby_pace/runby_time_parser.rb
Overview
Encapsulates the parts of a time string
Instance Method Summary collapse
- #[](key) ⇒ Object
- #format ⇒ Object
-
#initialize(parts_array) ⇒ TimeParts
constructor
A new instance of TimeParts.
- #validate ⇒ Object
Constructor Details
#initialize(parts_array) ⇒ TimeParts
Returns a new instance of TimeParts.
45 46 47 48 49 50 51 |
# File 'lib/runby_pace/runby_time_parser.rb', line 45 def initialize(parts_array) @keys = { seconds: 0, minutes: 1, hours: 2 } @parts = Array.new(@keys.count, 0) Range.new(0, parts_array.count - 1).each { |i| @parts[i] = parts_array[i] } validate freeze end |
Instance Method Details
#[](key) ⇒ Object
53 54 55 56 |
# File 'lib/runby_pace/runby_time_parser.rb', line 53 def [](key) i = @keys[key] @parts[i].to_i end |
#format ⇒ Object
58 59 60 61 62 63 64 65 66 67 68 69 70 |
# File 'lib/runby_pace/runby_time_parser.rb', line 58 def format time_f = +'' @parts.reverse_each do |part| time_f << ':' << part.to_s.rjust(2, '0') end # Remove leading ':' time_f.slice!(0) # Remove leading '00:00...' time_f.sub!(/^(?:00:)+(\d\d:\d\d)/, '\1') if time_f.length > 5 # If the time looks like 00:48, only show 0:48 time_f.slice!(0) if time_f.slice(0) == '0' time_f end |
#validate ⇒ Object
72 73 74 75 76 77 |
# File 'lib/runby_pace/runby_time_parser.rb', line 72 def validate raise 'Hours must be less than 24' if self[:hours] > 23 raise 'Minutes must be less than 60 if hours are supplied' if self[:hours].positive? && self[:minutes] > 59 raise 'Minutes must be less than 99 if no hours are supplied' if self[:hours].zero? && self[:minutes] > 99 raise 'Seconds must be less than 60' if self[:seconds] > 59 end |