class ActiveModel::Validations::DatetimeValidator
Public Instance Methods
date?(value)
click to toggle source
# File lib/validators/validates_datetime.rb, line 6 def date?(value) value.is_a?(Date) || value.is_a?(Time) end
validate_each(record, attribute, value)
click to toggle source
# File lib/validators/validates_datetime.rb, line 10 def validate_each(record, attribute, value) return if value.blank? && options[:allow_blank] return if value.nil? && options[:allow_nil] unless date?(value) record.errors.add( attribute, :invalid_date, message: options[:message], value: value ) end return unless date?(value) validate_after_option(record, attribute, value) validate_before_option(record, attribute, value) end
Private Instance Methods
date_for(record, value, option)
click to toggle source
# File lib/validators/validates_datetime.rb, line 29 def date_for(record, value, option) date = case option when :today Date.today when :now Time.now when Time, Date, DateTime, ActiveSupport::TimeWithZone option when Proc option.call(record) else record.__send__(option) if record.respond_to?(option) end case date when Time value = value.to_time when Date value = value.to_date end [date, value] end
validate_after_option(record, attribute, value)
click to toggle source
# File lib/validators/validates_datetime.rb, line 53 def validate_after_option(record, attribute, value) return unless options[:after] date, value = date_for(record, value, options[:after]) return if value.present? && date.present? && (value && date && value > date) record.errors.add( attribute, :invalid_date_after, message: options[:after_message], value: value, date: (date?(date) ? I18n.l(date) : date.inspect) ) end
validate_before_option(record, attribute, value)
click to toggle source
# File lib/validators/validates_datetime.rb, line 69 def validate_before_option(record, attribute, value) return unless options[:before] date, value = date_for(record, value, options[:before]) return if value.present? && date.present? && (value && date && value < date) record.errors.add( attribute, :invalid_date_before, message: options[:before_message], value: value, date: I18n.l(date) ) end