Sha256: ab5bb0472cf10a7f2dff00c5bb345a716bd098c08e1e87a957f67ebe9c6d0fa8

Contents?: true

Size: 1.71 KB

Versions: 6

Compression:

Stored size: 1.71 KB

Contents

class IsValidMultiparameterDateTimeValidator < ActiveModel::EachValidator
  def validate_each(record, attribute, value)
    date_value = record.public_send(:"#{attribute}_date_part")
    time_value = record.public_send(:"#{attribute}_time_part")

    return if date_value.blank? && time_value.blank?

    if date_invalid?(date_value) || time_invalid?(time_value)
      record.errors.add(attribute, self.class.invalid_format_error_message)
    elsif date_value.blank?
      record.errors.add(attribute, 'Please enter a date.')
    elsif time_value.blank?
      record.errors.add(attribute, 'Please enter a time.')
    else
      attribute_value = record.public_send(:"#{attribute}_time_part")
      begin
        Time.zone.parse("#{date_value} #{time_value}")
        Time.zone.parse(attribute_value)
      rescue ArgumentError
        record.errors.add(attribute, self.class.invalid_format_error_message)
      end
    end
  end

  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

  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

  def date_invalid?(date_value)
    if date_value.present?
      date_invalid = date_value !~ MultiparameterDateTime::VALID_DATE_FORMAT
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
multiparameter_date_time-0.3.2 lib/is_valid_multiparameter_date_time_validator.rb
multiparameter_date_time-0.3.1 lib/is_valid_multiparameter_date_time_validator.rb
multiparameter_date_time-0.3.0 lib/is_valid_multiparameter_date_time_validator.rb
multiparameter_date_time-0.2.0 lib/is_valid_multiparameter_date_time_validator.rb
multiparameter_date_time-0.1.1 lib/is_valid_multiparameter_date_time_validator.rb
multiparameter_date_time-0.1.0 lib/is_valid_multiparameter_date_time_validator.rb