File: //usr/local/rvm/gems/ruby-2.4.10/gems/tzinfo-2.0.4/lib/tzinfo/transitions_timezone_period.rb
# encoding: UTF-8
# frozen_string_literal: true
module TZInfo
# Represents a period of time in a time zone where the same offset from UTC
# applies. The period of time is bounded at at least one end, either having a
# start transition, end transition or both start and end transitions.
class TransitionsTimezonePeriod < TimezonePeriod
# @return [TimezoneTransition] the transition that defines the start of this
# {TimezonePeriod} (`nil` if the start is unbounded).
attr_reader :start_transition
# @return [TimezoneTransition] the transition that defines the end of this
# {TimezonePeriod} (`nil` if the end is unbounded).
attr_reader :end_transition
# Initializes a {TransitionsTimezonePeriod}.
#
# At least one of `start_transition` and `end_transition` must be specified.
#
# @param start_transition [TimezoneTransition] the transition that defines
# the start of the period, or `nil` if the start is unbounded.
# @param end_transition [TimezoneTransition] the transition that defines the
# end of the period, or `nil` if the end is unbounded.
# @raise [ArgumentError] if both `start_transition` and `end_transition` are
# `nil`.
def initialize(start_transition, end_transition)
if start_transition
super(start_transition.offset)
elsif end_transition
super(end_transition.previous_offset)
else
raise ArgumentError, 'At least one of start_transition and end_transition must be specified'
end
@start_transition = start_transition
@end_transition = end_transition
end
# Determines if this {TransitionsTimezonePeriod} is equal to another
# instance.
#
# @param p [Object] the instance to test for equality.
# @return [Boolean] `true` if `p` is a {TransitionsTimezonePeriod} with the
# same {offset}, {start_transition} and {end_transition}, otherwise
# `false`.
def ==(p)
p.kind_of?(TransitionsTimezonePeriod) && start_transition == p.start_transition && end_transition == p.end_transition
end
alias eql? ==
# @return [Integer] a hash based on {start_transition} and {end_transition}.
def hash
[@start_transition, @end_transition].hash
end
# @return [String] the internal object state as a programmer-readable
# `String`.
def inspect
"#<#{self.class}: @start_transition=#{@start_transition.inspect}, @end_transition=#{@end_transition.inspect}>"
end
end
end