Sha256: c01da59c8166cc308dc629857f5c2bd01f5a08c4fe5a094dda22240508418f96

Contents?: true

Size: 953 Bytes

Versions: 2

Compression:

Stored size: 953 Bytes

Contents

require 'active_model'

module Datacaster
  class Validator < Base
    @@validations = {}

    def self.create_active_model(validations)
      @@validations[validations] ||=
        Class.new do
          include ActiveModel::Validations

          attr_accessor :value

          def self.model_name
            ActiveModel::Name.new(self, nil, "ValidatorModel")
          end

          if validations.present?
            validates :value, validations
          end
        end.new
    end

    def initialize(validations, name)
      @name = name
      @validator = self.class.create_active_model(validations)
    end

    def cast(object)
      intermediary_result = super(object)
      object = intermediary_result.value

      @validator.value = object
      @validator.valid? ? Datacaster.ValidResult(object) : Datacaster.ErrorResult(@validator.errors[:value])
    end

    def inspect
      "#<Datacaster::#{@name}Validator>"
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
datacaster-2.0.2 lib/datacaster/validator.rb
datacaster-2.0.1 lib/datacaster/validator.rb