class IceCube::Occurrence
Wraps start_time
and end_time
in a single concept concerning the duration. This delegates to the enclosed start_time
so it behaves like a normal Time in almost all situations, however:
Without ActiveSupport, it’s necessary to cast the occurrence using #to_time
before doing arithmetic, else Time will try to subtract it using #to_i
and return a new time instead.
Time.now - Occurrence.new(start_time) # => 1970-01-01 01:00:00 Time.now - Occurrence.new(start_time).to_time # => 3600
When ActiveSupport::Time core extensions are loaded, it’s possible to subtract an Occurrence
object directly from a Time to get the difference:
Time.now - Occurrence.new(start_time) # => 3600
Attributes
end_time[R]
first[R]
last[R]
start_time[R]
Public Class Methods
name()
click to toggle source
Report class name as ‘Time’ to thwart type checking.
# File lib/ice_cube/occurrence.rb, line 25 def self.name 'Time' end
new(start_time, end_time=nil)
click to toggle source
# File lib/ice_cube/occurrence.rb, line 33 def initialize(start_time, end_time=nil) @start_time = start_time @end_time = end_time || start_time __setobj__ @start_time end
Public Instance Methods
<=>(other)
click to toggle source
# File lib/ice_cube/occurrence.rb, line 43 def <=>(other) @start_time <=> other end
comparable_time()
click to toggle source
# File lib/ice_cube/occurrence.rb, line 68 def comparable_time start_time end
cover?(other)
click to toggle source
# File lib/ice_cube/occurrence.rb, line 63 def cover?(other) to_range.cover?(other) end
Also aliased as: include?
duration()
click to toggle source
# File lib/ice_cube/occurrence.rb, line 72 def duration end_time - start_time end
intersects?(other)
click to toggle source
# File lib/ice_cube/occurrence.rb, line 52 def intersects?(other) return cover?(other) unless other.is_a?(Occurrence) || other.is_a?(Range) this_start = first + 1 this_end = last # exclude end boundary other_start = other.first + 1 other_end = other.last + 1 !(this_end < other_start || this_start > other_end) end
is_a?(klass)
click to toggle source
Calls superclass method
# File lib/ice_cube/occurrence.rb, line 47 def is_a?(klass) klass == ::Time || super end
Also aliased as: kind_of?
overnight?()
click to toggle source
# File lib/ice_cube/occurrence.rb, line 97 def overnight? offset = start_time + 3600 * 24 midnight = Time.new(offset.year, offset.month, offset.day) midnight < end_time end
to_i()
click to toggle source
# File lib/ice_cube/occurrence.rb, line 39 def to_i @start_time.to_i end
to_range()
click to toggle source
# File lib/ice_cube/occurrence.rb, line 76 def to_range start_time..end_time end
to_s(format=nil)
click to toggle source
Shows both the start and end time if there is a duration. Optional format argument (e.g. :long, :short) supports Rails time formats and is only used when ActiveSupport is available.
# File lib/ice_cube/occurrence.rb, line 88 def to_s(format=nil) if format && to_time.public_method(:to_s).arity != 0 t0, t1 = start_time.to_s(format), end_time.to_s(format) else t0, t1 = start_time.to_s, end_time.to_s end duration > 0 ? "#{t0} - #{t1}" : t0 end
to_time()
click to toggle source
# File lib/ice_cube/occurrence.rb, line 80 def to_time start_time end