Class: IceCube::SecondOfMinuteValidation

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

Constant Summary

Constants inherited from Validation

Validation::NUMBER_SUFFIX

Instance Method Summary collapse

Methods inherited from Validation

#adjust, #nice_numbers, #sentence

Constructor Details

#initialize(rule) ⇒ SecondOfMinuteValidation

Returns a new instance of SecondOfMinuteValidation.



5
6
7
# File 'lib/ice_cube/validations/second_of_minute.rb', line 5

def initialize(rule)
  @seconds_of_minute = rule.validations[:second_of_minute]
end

Instance Method Details

#closest(date) ⇒ Object



14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/ice_cube/validations/second_of_minute.rb', line 14

def closest(date)
  return nil if !@seconds_of_minute || @seconds_of_minute.empty?
  # turn seconds into seconds of minute
  # second >= 60 should fall into the next minute
  seconds = @seconds_of_minute.map do |s|
    s > date.sec ? s - date.sec : 60 - date.sec + s
  end
  seconds.compact!
  # go to the closest distance away
  closest_second = seconds.min
  goal = date + closest_second
  adjust(goal, date)
end

#to_icalObject



32
33
34
# File 'lib/ice_cube/validations/second_of_minute.rb', line 32

def to_ical
  'BYSECOND=' << @seconds_of_minute.join(',') unless @seconds_of_minute.empty?
end

#to_sObject



28
29
30
# File 'lib/ice_cube/validations/second_of_minute.rb', line 28

def to_s
  'on the ' << nice_numbers(@seconds_of_minute) << (@seconds_of_minute.size == 1 ? ' second' : ' seconds') << ' of the minute' unless @seconds_of_minute.empty?
end

#validate(date) ⇒ Object



9
10
11
12
# File 'lib/ice_cube/validations/second_of_minute.rb', line 9

def validate(date)
  return true if !@seconds_of_minute || @seconds_of_minute.empty?
  @seconds_of_minute.include?(date.sec)
end