Module: HourOfDayValidation

Included in:
IceCube::Rule
Defined in:
lib/ice_cube/validations/hour_of_day.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(base) ⇒ Object



3
4
5
# File 'lib/ice_cube/validations/hour_of_day.rb', line 3

def self.included(base)
  base::SuggestionTypes << :hour_of_day
end

Instance Method Details

#closest_hour_of_day(date) ⇒ Object



21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/ice_cube/validations/hour_of_day.rb', line 21

def closest_hour_of_day(date)
  return nil if !@validations[:hour_of_day] || @validations[:hour_of_day].empty?
  # turn hours into hour of day
  # hour >= 24 should fall into the next day
  hours = @validations[:hour_of_day].map do |h|
    h > date.hour ? h - date.hour : 24 - date.hour + h
  end
  hours.compact!
  # go to the closest distance away, the start of that hour
  closest_hour = hours.min
  goal = date + IceCube::ONE_HOUR * closest_hour
  adjust(goal, date)
end

#hour_of_day(*hours) ⇒ Object



7
8
9
10
11
12
13
14
# File 'lib/ice_cube/validations/hour_of_day.rb', line 7

def hour_of_day(*hours)
  @validations[:hour_of_day] ||= []
  hours.each do |hour| 
    raise ArgumentError.new('Argument must be a valid hour') unless hour < 24 && hour >= 0
    @validations[:hour_of_day] << hour
  end
  self
end

#validate_hour_of_day(date) ⇒ Object



16
17
18
19
# File 'lib/ice_cube/validations/hour_of_day.rb', line 16

def validate_hour_of_day(date)
  return true if !@validations[:hour_of_day] || @validations[:hour_of_day].empty?
  @validations[:hour_of_day].include?(date.hour)
end