class IsValidMultiparameterDateTimeValidator
Public Class Methods
invalid_format_error_message()
click to toggle source
# File lib/is_valid_multiparameter_date_time_validator.rb, line 35 def self.invalid_format_error_message date_time = Time.zone.parse('1/29/2000 5:15pm') date_string = date_time.strftime(MultiparameterDateTime.date_format) time_string = date_time.strftime(MultiparameterDateTime.time_format) "Please enter a valid date and time using the following formats: #{date_string}, #{time_string}" end
Public Instance Methods
date_invalid?(date_value)
click to toggle source
# File lib/is_valid_multiparameter_date_time_validator.rb, line 51 def date_invalid?(date_value) if date_value.present? date_invalid = date_value !~ MultiparameterDateTime::VALID_DATE_FORMAT end end
time_invalid?(time_value)
click to toggle source
# File lib/is_valid_multiparameter_date_time_validator.rb, line 43 def time_invalid?(time_value) if time_value.present? time_invalid_standard = time_value !~ MultiparameterDateTime::VALID_STANDARD_TIME_FORMAT time_invalid_military = time_value !~ MultiparameterDateTime::VALID_MILITARY_TIME_FORMAT time_invalid_standard && time_invalid_military end end
validate_each(record, attribute, value)
click to toggle source
# File lib/is_valid_multiparameter_date_time_validator.rb, line 4 def validate_each(record, attribute, value) date_part_key = :"#{attribute}_date_part" date_value = record.public_send(date_part_key) time_part_key = :"#{attribute}_time_part" time_value = record.public_send(time_part_key) return if !options[:required] && date_value.blank? && time_value.blank? if date_value.blank? && time_value.blank? message = "Please enter a date and time for the #{record.class.name.titleize.downcase}." record.errors.add(attribute, message) elsif date_invalid?(date_value) || time_invalid?(time_value) record.errors.add(attribute, self.class.invalid_format_error_message) elsif date_value.blank? message = record.errors.generate_message(date_part_key, :blank, default: 'Please enter a date.') record.errors.add(attribute, message) elsif time_value.blank? message = record.errors.generate_message(time_part_key, :blank, default: 'Please enter a time.') record.errors.add(attribute, message) else begin Date.parse(date_value) Time.zone.parse("#{date_value} #{time_value}") Time.zone.parse(time_value) rescue ArgumentError record.errors.add(attribute, self.class.invalid_format_error_message) end end end