module IceCube::Validations::HourOfDay
def hour_of_day(*hours)
def hour_of_day(*hours) hours.flatten.each do |hour| unless hour.is_a?(Integer) raise ArgumentError, "expecting Integer value for hour, got #{hour.inspect}" end verify_alignment(hour, :hour, :hour_of_day) { |error| raise error } validations_for(:hour_of_day) << Validation.new(hour) end clobber_base_validations(:hour) self end
def realign(opening_time, start_time)
def realign(opening_time, start_time) return super unless validations[:hour_of_day] freq = base_interval_validation.interval first_hour = Array(validations[:hour_of_day]).min_by(&:value) time = TimeUtil::TimeWrapper.new(start_time, true) if freq > 1 && base_interval_validation.type == :hour offset = first_hour.validate(opening_time, start_time) time.add(:hour, offset - freq) else time.hour = first_hour.value end super(opening_time, time.to_time) end