Class: TimeOfDay
Instance Attribute Summary collapse
-
#hour ⇒ Object
0 - 23.
-
#minute ⇒ Object
0 - 59.
-
#second ⇒ Object
0 - 59.
Class Method Summary collapse
Instance Method Summary collapse
- #+(other) ⇒ Object
- #-(other) ⇒ Object
- #<=>(other) ⇒ Object
- #acts_like_time? ⇒ Boolean
- #encode_with(coder) ⇒ Object
-
#eql?(other) ⇒ Boolean
Referring to the same H/M/S makes objects equal.
-
#hash ⇒ Object
Referring to the same H/M/S makes objects equal.
- #in_time_zone ⇒ Object
- #init_with(coder) ⇒ Object
-
#initialize(hour, minute = 0, second = 0) ⇒ TimeOfDay
constructor
A new instance of TimeOfDay.
- #inspect ⇒ Object
- #on(date) ⇒ Object
- #strftime(format) ⇒ Object
- #to_a ⇒ Object
- #to_json ⇒ Object
- #to_s(with_seconds = true) ⇒ Object
- #to_time ⇒ Object
- #utc? ⇒ Boolean
Constructor Details
#initialize(hour, minute = 0, second = 0) ⇒ TimeOfDay
Returns a new instance of TimeOfDay.
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
# File 'lib/time_of_day.rb', line 12 def initialize(hour, minute = 0, second = 0) if hour == 24 unless minute == 0 && second == 0 raise "Invalid TimeOfDay. #{hour}:#{minute}:#{second} given, but highest allowed value is 24:00:00" end else raise "Invalid hour: #{hour}" unless hour >= 0 && hour <= 23 end raise "Invalid minute: #{minute}" unless minute >= 0 && minute <= 59 raise "Invalid second: #{second}" unless second >= 0 && second <= 59 @hour = hour @minute = minute @second = second end |
Instance Attribute Details
#hour ⇒ Object
0 - 23
8 9 10 |
# File 'lib/time_of_day.rb', line 8 def hour @hour end |
#minute ⇒ Object
0 - 59
9 10 11 |
# File 'lib/time_of_day.rb', line 9 def minute @minute end |
#second ⇒ Object
0 - 59
10 11 12 |
# File 'lib/time_of_day.rb', line 10 def second @second end |
Class Method Details
._parse(string) ⇒ Object
51 52 53 54 55 56 |
# File 'lib/time_of_day.rb', line 51 def self._parse(string) parts = parse_parts(string) return unless parts new(*parts) end |
.now ⇒ Object
38 39 40 |
# File 'lib/time_of_day.rb', line 38 def self.now Time.now.time_of_day # rubocop: disable Rails/TimeZone end |
.parse(string) ⇒ Object
42 43 44 45 46 47 48 49 |
# File 'lib/time_of_day.rb', line 42 def self.parse(string) return nil if string.blank? tod = _parse(string) raise ArgumentError, "Illegal time format: '#{string}'" unless tod tod end |
.parse_parts(string) ⇒ Object
58 59 60 61 62 63 |
# File 'lib/time_of_day.rb', line 58 def self.parse_parts(string) return nil if string.blank? return unless /^(?<hours>\d{1,2}):?(?<minutes>\d{2})?(?::(?<seconds>\d{1,2}))?$/ =~ string.strip [hours.to_i, minutes.to_i, seconds.to_i] end |
Instance Method Details
#+(other) ⇒ Object
81 82 83 84 85 86 87 |
# File 'lib/time_of_day.rb', line 81 def +(other) raise "Illegal argument: #{other.inspect}" unless other.is_a? Numeric t = Time.local(0, 1, 1, hour, minute, second) # rubocop: disable Rails/TimeZone t += other self.class.new(t.hour, t.min, t.sec) end |
#-(other) ⇒ Object
89 90 91 92 93 94 95 96 97 98 99 100 |
# File 'lib/time_of_day.rb', line 89 def -(other) case other when TimeOfDay t1 = Time.local(0, 1, 1, hour, minute, second) # rubocop: disable Rails/TimeZone t2 = Time.local(0, 1, 1, other.hour, other.minute, other.second) # rubocop: disable Rails/TimeZone (t1 - t2).seconds when Numeric self.+(-other) else raise "Illegal argument: #{other.inspect}" end end |
#<=>(other) ⇒ Object
102 103 104 105 106 107 108 109 110 111 112 113 114 |
# File 'lib/time_of_day.rb', line 102 def <=>(other) return -1 unless other other_tod = if other.is_a?(TimeOfDay) other elsif other.respond_to?(:time_of_day) other.time_of_day else other end to_a <=> [other_tod.hour, other_tod.minute, other_tod.second] end |
#acts_like_time? ⇒ Boolean
65 66 67 |
# File 'lib/time_of_day.rb', line 65 def acts_like_time? true end |
#encode_with(coder) ⇒ Object
33 34 35 36 |
# File 'lib/time_of_day.rb', line 33 def encode_with(coder) coder.tag = 'tag:yaml.org,2002:time' coder.scalar = to_s end |
#eql?(other) ⇒ Boolean
Referring to the same H/M/S makes objects equal.
123 124 125 |
# File 'lib/time_of_day.rb', line 123 def eql?(other) hash == other.hash end |
#hash ⇒ Object
Referring to the same H/M/S makes objects equal. and we only want one hash key.
118 119 120 |
# File 'lib/time_of_day.rb', line 118 def hash @hour.hash ^ @minute.hash ^ @second.hash end |
#in_time_zone ⇒ Object
69 70 71 |
# File 'lib/time_of_day.rb', line 69 def in_time_zone(*) self end |
#init_with(coder) ⇒ Object
28 29 30 31 |
# File 'lib/time_of_day.rb', line 28 def init_with(coder) parts = self.class.parse_parts(coder.scalar) initialize(*parts) end |
#inspect ⇒ Object
141 142 143 |
# File 'lib/time_of_day.rb', line 141 def inspect "#<#{self.class} hour=#{@hour}, minute=#{@minute}, second=#{@second}>" end |
#on(date) ⇒ Object
77 78 79 |
# File 'lib/time_of_day.rb', line 77 def on(date) Time.local(date.year, date.month, date.day, hour, minute, second) # rubocop: disable Rails/TimeZone end |
#strftime(format) ⇒ Object
127 128 129 |
# File 'lib/time_of_day.rb', line 127 def strftime(format) on(Date.today).strftime(format) end |
#to_a ⇒ Object
145 146 147 |
# File 'lib/time_of_day.rb', line 145 def to_a [@hour, @minute, @second] end |
#to_json ⇒ Object
149 150 151 |
# File 'lib/time_of_day.rb', line 149 def to_json(*) %("#{self}") end |
#to_s(with_seconds = true) ⇒ Object
131 132 133 134 135 136 137 138 139 |
# File 'lib/time_of_day.rb', line 131 def to_s(with_seconds = true) if with_seconds '%02d:%02d:%02d' % to_a else '%02d:%02d' % [@hour, @minute] end rescue "#{@hour.inspect}:#{@minute.inspect}:#{@second.inspect}" end |
#to_time ⇒ Object
73 74 75 |
# File 'lib/time_of_day.rb', line 73 def to_time on Date.today end |
#utc? ⇒ Boolean
153 154 155 |
# File 'lib/time_of_day.rb', line 153 def utc? true end |