zilverline/sequent

View on GitHub
lib/sequent/core/helpers/date_time_validator.rb

Summary

Maintainability
A
15 mins
Test Coverage
# frozen_string_literal: true

require 'active_model'

module Sequent
  module Core
    module Helpers
      # Validates DateTimes
      # Automatically included when using a
      #
      #   attrs value: DateTime
      class DateTimeValidator < ActiveModel::EachValidator
        def validate_each(subject, attribute, value)
          return if value.is_a?(DateTime)

          DateTime.deserialize_from_json(value)
        rescue StandardError
          subject.errors.add attribute, :invalid_date_time
        end
      end
    end
  end
end