class IceCube::InputAlignment
Attributes
rule[R]
rule_part[R]
value[R]
Public Class Methods
new(rule, value, rule_part)
click to toggle source
# File lib/ice_cube/input_alignment.rb, line 4 def initialize(rule, value, rule_part) @rule = rule @value = value @rule_part = rule_part end
Public Instance Methods
verify(freq, options={}, &block)
click to toggle source
# File lib/ice_cube/input_alignment.rb, line 12 def verify(freq, options={}, &block) @rule.validations[:interval] or return case @rule when DailyRule verify_wday_alignment(freq, &block) when MonthlyRule verify_month_alignment(freq, &block) else verify_freq_alignment(freq, &block) end end
Private Instance Methods
fixed_validations()
click to toggle source
# File lib/ice_cube/input_alignment.rb, line 35 def fixed_validations @fixed_validations ||= @rule.validations.values.flatten.select { |v| interval_type = (v.type == :wday ? :day : v.type) v.class < Validations::FixedValue && interval_type == rule.base_interval_validation.type } end
interval_validation()
click to toggle source
# File lib/ice_cube/input_alignment.rb, line 27 def interval_validation @interval_validation ||= @rule.validations[:interval].first end
interval_value()
click to toggle source
# File lib/ice_cube/input_alignment.rb, line 31 def interval_value @interval_value ||= (rule_part == :interval) ? value : interval_validation.interval end
verify_freq_alignment(freq) { |argument_error| ... }
click to toggle source
# File lib/ice_cube/input_alignment.rb, line 43 def verify_freq_alignment(freq) interval_validation.type == freq or return (last_validation = fixed_validations.min_by(&:value)) or return alignment = (value - last_validation.value) % interval_validation.interval return if alignment.zero? validation_values = fixed_validations.map(&:value).join(', ') if rule_part == :interval message = "interval(#{value}) " \ "must be a multiple of " \ "intervals in #{last_validation.key}(#{validation_values})" else message = "intervals in #{last_validation.key}(#{validation_values}, #{value}) " \ "must be multiples of " \ "interval(#{interval_validation.interval})" end yield ArgumentError.new(message) end
verify_month_alignment(_freq) { |argument_error| ... }
click to toggle source
# File lib/ice_cube/input_alignment.rb, line 64 def verify_month_alignment(_freq) return if interval_value == 1 || (interval_value % 12).zero? return if fixed_validations.empty? message = "month_of_year can only be used with interval(1) or multiples of interval(12)" yield ArgumentError.new(message) end
verify_wday_alignment(freq) { |argument_error| ... }
click to toggle source
# File lib/ice_cube/input_alignment.rb, line 73 def verify_wday_alignment(freq) return if interval_value == 1 if freq == :wday return if (interval_value % 7).zero? return if Array(@rule.validations[:day]).empty? message = "day can only be used with multiples of interval(7)" else (fixed_validation = fixed_validations.first) or return message = "#{fixed_validation.key} can only be used with interval(1)" end yield ArgumentError.new(message) end