Class: IceCube::Occurrence
- Inherits:
-
SimpleDelegator
- Object
- SimpleDelegator
- IceCube::Occurrence
- Includes:
- Comparable
- Defined in:
- lib/ice_cube/occurrence.rb
Overview
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
Instance Attribute Summary collapse
-
#end_time ⇒ Object
(also: #last)
readonly
Returns the value of attribute end_time.
-
#start_time ⇒ Object
(also: #first)
readonly
Returns the value of attribute start_time.
Class Method Summary collapse
-
.name ⇒ Object
Report class name as ‘Time’ to thwart type checking.
Instance Method Summary collapse
- #<=>(other) ⇒ Object
- #comparable_time ⇒ Object
- #cover?(other) ⇒ Boolean (also: #include?)
- #duration ⇒ Object
-
#initialize(start_time, end_time = nil) ⇒ Occurrence
constructor
A new instance of Occurrence.
- #intersects?(other) ⇒ Boolean
- #is_a?(klass) ⇒ Boolean (also: #kind_of?)
- #overnight? ⇒ Boolean
- #to_i ⇒ Object
- #to_range ⇒ Object
-
#to_s(format = nil) ⇒ Object
Shows both the start and end time if there is a duration.
- #to_time ⇒ Object
Constructor Details
#initialize(start_time, end_time = nil) ⇒ Occurrence
Returns a new instance of Occurrence.
32 33 34 35 36 |
# File 'lib/ice_cube/occurrence.rb', line 32 def initialize(start_time, end_time = nil) @start_time = start_time @end_time = end_time || start_time __setobj__ @start_time end |
Instance Attribute Details
#end_time ⇒ Object (readonly) Also known as: last
Returns the value of attribute end_time.
28 29 30 |
# File 'lib/ice_cube/occurrence.rb', line 28 def end_time @end_time end |
#start_time ⇒ Object (readonly) Also known as: first
Returns the value of attribute start_time.
28 29 30 |
# File 'lib/ice_cube/occurrence.rb', line 28 def start_time @start_time end |
Class Method Details
.name ⇒ Object
Report class name as ‘Time’ to thwart type checking.
24 25 26 |
# File 'lib/ice_cube/occurrence.rb', line 24 def self.name "Time" end |
Instance Method Details
#<=>(other) ⇒ Object
42 43 44 |
# File 'lib/ice_cube/occurrence.rb', line 42 def <=>(other) @start_time <=> other end |
#comparable_time ⇒ Object
67 68 69 |
# File 'lib/ice_cube/occurrence.rb', line 67 def comparable_time start_time end |
#cover?(other) ⇒ Boolean Also known as: include?
62 63 64 |
# File 'lib/ice_cube/occurrence.rb', line 62 def cover?(other) to_range.cover?(other) end |
#duration ⇒ Object
71 72 73 |
# File 'lib/ice_cube/occurrence.rb', line 71 def duration end_time - start_time end |
#intersects?(other) ⇒ Boolean
51 52 53 54 55 56 57 58 59 60 |
# File 'lib/ice_cube/occurrence.rb', line 51 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) ⇒ Boolean Also known as: kind_of?
46 47 48 |
# File 'lib/ice_cube/occurrence.rb', line 46 def is_a?(klass) klass == ::Time || super end |
#overnight? ⇒ Boolean
96 97 98 99 100 |
# File 'lib/ice_cube/occurrence.rb', line 96 def overnight? offset = start_time + 3600 * 24 midnight = Time.new(offset.year, offset.month, offset.day) midnight < end_time end |
#to_i ⇒ Object
38 39 40 |
# File 'lib/ice_cube/occurrence.rb', line 38 def to_i @start_time.to_i end |
#to_range ⇒ Object
75 76 77 |
# File 'lib/ice_cube/occurrence.rb', line 75 def to_range start_time..end_time end |
#to_s(format = nil) ⇒ Object
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.
87 88 89 90 91 92 93 94 |
# File 'lib/ice_cube/occurrence.rb', line 87 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 ⇒ Object
79 80 81 |
# File 'lib/ice_cube/occurrence.rb', line 79 def to_time start_time end |