class IceCube::Validations::DayOfWeek::Validation

Attributes

day[R]
occ[R]

Public Class Methods

new(day, occ) click to toggle source
# File lib/ice_cube/validations/day_of_week.rb, line 20
def initialize(day, occ)
  @day = day
  @occ = occ
end

Public Instance Methods

build_hash(builder) click to toggle source
# File lib/ice_cube/validations/day_of_week.rb, line 55
def build_hash(builder)
  builder.validations[:day_of_week] ||= {}
  arr = (builder.validations[:day_of_week][day] ||= [])
  arr << occ
end
build_ical(builder) click to toggle source
# File lib/ice_cube/validations/day_of_week.rb, line 61
def build_ical(builder)
  ical_day = IcalBuilder.fixnum_to_ical_day(day)
  # Delete any with this day and no occ first
  builder['BYDAY'].delete_if { |d| d == ical_day }
  builder['BYDAY'] << "#{occ}#{ical_day}"
end
build_s(builder) click to toggle source
# File lib/ice_cube/validations/day_of_week.rb, line 47
def build_s(builder)
  builder.piece(:day_of_week) << IceCube::I18n.t(
    'ice_cube.days_of_week',
    segments: StringBuilder.nice_number(occ),
    day: IceCube::I18n.t('date.day_names')[day]
  )
end
dst_adjust?() click to toggle source
# File lib/ice_cube/validations/day_of_week.rb, line 29
def dst_adjust?
  true
end
type() click to toggle source
# File lib/ice_cube/validations/day_of_week.rb, line 25
def type
  :day
end
validate(step_time, start_time) click to toggle source
# File lib/ice_cube/validations/day_of_week.rb, line 33
def validate(step_time, start_time)
  wday = step_time.wday
  offset = (day < wday) ? (7 - wday + day) : (day - wday)
  wrapper = TimeUtil::TimeWrapper.new(step_time)
  wrapper.add :day, offset
  loop do
    which_occ, num_occ = TimeUtil.which_occurrence_in_month(wrapper.to_time, day)
    this_occ = (occ < 0) ? (num_occ + occ + 1) : (occ)
    break offset if which_occ == this_occ
    wrapper.add :day, 7
    offset += 7
  end
end