Module: HourOfDayValidation
- Included in:
- IceCube::Rule
- Defined in:
- lib/ice_cube/validations/hour_of_day.rb
Class Method Summary collapse
Instance Method Summary collapse
- #closest_hour_of_day(date) ⇒ Object
- #hour_of_day(*hours) ⇒ Object
- #validate_hour_of_day(date) ⇒ Object
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 |