Class: IceCube::Validations::DayOfWeek::Validation

Inherits:
Object
  • Object
show all
Defined in:
lib/ice_cube/validations/day_of_week.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(day, occ) ⇒ Validation

Returns a new instance of Validation.



17
18
19
20
# File 'lib/ice_cube/validations/day_of_week.rb', line 17

def initialize(day, occ)
  @day = day
  @occ = occ
end

Instance Attribute Details

#dayObject (readonly)

Returns the value of attribute day.



15
16
17
# File 'lib/ice_cube/validations/day_of_week.rb', line 15

def day
  @day
end

#occObject (readonly)

Returns the value of attribute occ.



15
16
17
# File 'lib/ice_cube/validations/day_of_week.rb', line 15

def occ
  @occ
end

Instance Method Details

#build_hash(builder) ⇒ Object



52
53
54
55
56
# File 'lib/ice_cube/validations/day_of_week.rb', line 52

def build_hash(builder)
  builder.validations[:day_of_week] ||= {}
  arr = (builder.validations[:day_of_week][day] ||= [])
  arr << occ
end

#build_ical(builder) ⇒ Object



58
59
60
61
62
63
# File 'lib/ice_cube/validations/day_of_week.rb', line 58

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) ⇒ Object



44
45
46
47
48
49
50
# File 'lib/ice_cube/validations/day_of_week.rb', line 44

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?Boolean

Returns:

  • (Boolean)


26
27
28
# File 'lib/ice_cube/validations/day_of_week.rb', line 26

def dst_adjust?
  true
end

#typeObject



22
23
24
# File 'lib/ice_cube/validations/day_of_week.rb', line 22

def type
  :day
end

#validate(step_time, start_time) ⇒ Object



30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/ice_cube/validations/day_of_week.rb', line 30

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