class PeriodsValidator::Periods

Constants

MONTHS_QUARTERLY
MONTHS_SEMESTERLY
PERIODS
QUARTERLY
SEMESTERLY
YEARLY

Attributes

error[R]

Public Class Methods

new(args={}) click to toggle source
# File lib/periods_validator/periods.rb, line 12
def initialize(args={})
  @start_range = args.fetch(:start_range)
  @end_range = args.fetch(:end_range)
  @periods = args.fetch(:periods, [])
  @error = nil
  @months = 0
end

Public Instance Methods

valid?() click to toggle source
# File lib/periods_validator/periods.rb, line 20
def valid?
  if @periods.empty? || !(@periods - PERIODS).empty?
    @error = :invalid_define_period
    return false
  end

  if @start_range.nil? || @end_range.nil?
    @error = :invalid_period
    return false
  end

  @months = (@end_range.year * 12 + @end_range.month) - (@start_range.year * 12 +
                                                         @start_range.month)

  @periods.each do |period|
    return true if send("period_#{period}")
  end

  @error = :invalid_period
  false
end
Also aliased as: validate
validate()
Alias for: valid?

Protected Instance Methods

limits_date() click to toggle source
# File lib/periods_validator/periods.rb, line 46
def limits_date
  @start_range == @start_range.beginning_of_month && @end_range == @end_range.at_end_of_month
end
period_monthly() click to toggle source
# File lib/periods_validator/periods.rb, line 50
def period_monthly
  (@end_range - @start_range).to_i == @start_range.at_end_of_month.day - 1
end
period_quarterly() click to toggle source
# File lib/periods_validator/periods.rb, line 54
def period_quarterly
  limits_date && @months == QUARTERLY && MONTHS_QUARTERLY.include?(@end_range.month)
end
period_semesterly() click to toggle source
# File lib/periods_validator/periods.rb, line 58
def period_semesterly
  limits_date && @months == SEMESTERLY && MONTHS_SEMESTERLY.include?(@end_range.month)
end
period_yearly() click to toggle source
# File lib/periods_validator/periods.rb, line 62
def period_yearly
  limits_date && @months == YEARLY && @start_range.month == 1 && @end_range.month == 12
end