class ActivePeriod::Period
Public Class Methods
@author Lucas Billaudot <billau_l@modulotech.fr> @param range [Range] A valid range @param allow_beginless [Boolean] Is it allow to creat a beginless range @param allow_endless [Boolean] Is it allow to creat an endless range @return [self] A new instance of ActivePeriod::FreePeriod
@raise ArgumentError if the params range is not a Range
@raise ArgumentError if the params range is invalid
# File lib/active_period/period.rb, line 15 def initialize(range, allow_beginless: true, allow_endless: true) I18n.t(:base_class_is_abstract, scope: %i[active_period period]) if self.class == ActivePeriod::Period raise ::ArgumentError, I18n.t(:param_must_be_a_range, scope: %i[active_period period]) unless range.class.ancestors.include?(Range) from = time_parse(range.begin, I18n.t(:begin_date_is_invalid, scope: %i[active_period period])) raise ::ArgumentError, I18n.t(:begin_date_is_invalid, scope: %i[active_period period]) if !allow_beginless && from.nil? from = from.try(:beginning_of_day) || from to = time_parse(range.end, I18n.t(:end_date_is_invalid, scope: %i[active_period period])) raise ::ArgumentError, I18n.t(:end_date_is_invalid, scope: %i[active_period period]) if !allow_endless && to.nil? to = to.try(:end_of_day) || to # raise ::ArgumentError, I18n.t(:endless_excluded_end_is_forbiden, scope: %i[active_period period]) if to.nil? && range.exclude_end? # to = to.prev_day if range.exclude_end? if range.exclude_end? && from && to && from.to_date == to.to_date raise ::ArgumentError, I18n.t(:start_is_equal_to_end_excluded, scope: %i[active_period period]) end if from && to && from > to raise ::ArgumentError, I18n.t(:start_is_greater_than_end, scope: %i[active_period period]) end super(from, to, range.exclude_end?) end
Public Instance Methods
@raise NotImplementedError This method should be implemented in daughter class
# File lib/active_period/period.rb, line 69 def +(duration) raise NotImplementedError end
@raise NotImplementedError This method should be implemented in daughter class
# File lib/active_period/period.rb, line 64 def -(duration) raise NotImplementedError end
@param other [ActivePeriod::FreePeriod] Any kind of ActivePeriod::FreePeriod
object @return [Boolean] true if period are equals, false otherwise @raise ArgumentError if params other is not a ActivePeriod::FreePeriod
of some kind
# File lib/active_period/period.rb, line 76 def ==(other) if other.class.ancestors.include?(ActivePeriod::Period) from == other.from && self.calculated_end == other.calculated_end elsif other.is_a?(ActiveSupport::Duration) || other.is_a?(Numeric) super(other) else raise ArgumentError end end
# File lib/active_period/period.rb, line 127 def beginless? self.begin.nil? end
# File lib/active_period/period.rb, line 131 def boundless? beginless? && endless? end
# File lib/active_period/period.rb, line 115 def calculated_begin if beginless? -Date::Infinity.new else self.begin end end
@author Lucas Billaudot <billau_l@modulotech.fr> @return [DateTime] The real value of end acording to exclude_end
# File lib/active_period/period.rb, line 103 def calculated_end if endless? Date::Infinity.new else if exclude_end? self.end.prev_day else self.end end end end
# File lib/active_period/period.rb, line 123 def endless? self.end.nil? end
@raise NotImplementedError This method must be implemented in daughter class
# File lib/active_period/period.rb, line 97 def i18n raise NotImplementedError end
# File lib/active_period/period.rb, line 135 def infinite? beginless? || endless? end
@raise NotImplementedError This method cen be implemented in daughter class
# File lib/active_period/period.rb, line 48 def next raise NotImplementedError end
@raise NotImplementedError This method cen be implemented in daughter class
# File lib/active_period/period.rb, line 54 def prev raise NotImplementedError end
@raise NotImplementedError This method should be implemented in daughter class
# File lib/active_period/period.rb, line 87 def strftime raise NotImplementedError end
@raise NotImplementedError This method should be implemented in daughter class
# File lib/active_period/period.rb, line 59 def to_i raise NotImplementedError end
@raise NotImplementedError This method should be implemented in daughter class
# File lib/active_period/period.rb, line 92 def to_s raise NotImplementedError end
Private Instance Methods
# File lib/active_period/period.rb, line 141 def time_parse(time, msg) time = time.presence case time when NilClass, Date::Infinity, Float::INFINITY, -Float::INFINITY nil when String, Date Period.env_time.parse(time.to_s) when Numeric Time.at time when Time, ActiveSupport::TimeWithZone time else raise ::ArgumentError, msg end rescue StandardError raise ::ArgumentError, msg end