class ActivePeriod::Period

Public Class Methods

new(range, allow_beginless: true, allow_endless: true) click to toggle source

@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

Calls superclass method
# 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

+(duration) click to toggle source

@raise NotImplementedError This method should be implemented in daughter class

# File lib/active_period/period.rb, line 69
def +(duration)
  raise NotImplementedError
end
-(duration) click to toggle source

@raise NotImplementedError This method should be implemented in daughter class

# File lib/active_period/period.rb, line 64
def -(duration)
  raise NotImplementedError
end
==(other) click to toggle source

@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

Calls superclass method
# 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
beginless?() click to toggle source
# File lib/active_period/period.rb, line 127
def beginless?
  self.begin.nil?
end
boundless?() click to toggle source
# File lib/active_period/period.rb, line 131
def boundless?
  beginless? && endless?
end
calculated_begin() click to toggle source
# File lib/active_period/period.rb, line 115
def calculated_begin
  if beginless?
    -Date::Infinity.new
  else
    self.begin
  end
end
calculated_end() click to toggle source

@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
endless?() click to toggle source
# File lib/active_period/period.rb, line 123
def endless?
  self.end.nil?
end
i18n() click to toggle source

@raise NotImplementedError This method must be implemented in daughter class

# File lib/active_period/period.rb, line 97
def i18n
  raise NotImplementedError
end
infinite?() click to toggle source
# File lib/active_period/period.rb, line 135
def infinite?
  beginless? || endless?
end
next() click to toggle source

@raise NotImplementedError This method cen be implemented in daughter class

# File lib/active_period/period.rb, line 48
def next
  raise NotImplementedError
end
Also aliased as: succ
prev() click to toggle source

@raise NotImplementedError This method cen be implemented in daughter class

# File lib/active_period/period.rb, line 54
def prev
  raise NotImplementedError
end
strftime() click to toggle source

@raise NotImplementedError This method should be implemented in daughter class

# File lib/active_period/period.rb, line 87
def strftime
  raise NotImplementedError
end
succ()
Alias for: next
to_i() click to toggle source

@raise NotImplementedError This method should be implemented in daughter class

# File lib/active_period/period.rb, line 59
def to_i
  raise NotImplementedError
end
to_s() click to toggle source

@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

time_parse(time, msg) click to toggle source
# 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