Class: Datacaster::Validator

Inherits:
Base
  • Object
show all
Defined in:
lib/datacaster/validator.rb

Constant Summary collapse

@@validations =
{}

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Mixin

#&, #*, #call, #call_with_runtime, #cast_errors, #i18n_key, #i18n_map_keys, #i18n_scope, #i18n_vars, #then, #with_context, #with_object_context, #with_runtime, #|

Constructor Details

#initialize(validations) ⇒ Validator

Returns a new instance of Validator.


22
23
24
25
26
27
28
29
# File 'lib/datacaster/validator.rb', line 22

def initialize(validations)
  require 'active_model'

  if Config.i18n_module == SubstituteI18n
    raise NotImplementedError, "Using ActiveModel validations requires ruby-i18n or another i18n gem instead of datacaster's built-in", caller
  end
  @validator = self.class.create_active_model(validations)
end

Class Method Details

.create_active_model(validations) ⇒ Object


5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# File 'lib/datacaster/validator.rb', line 5

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

Instance Method Details

#cast(object, runtime:) ⇒ Object


31
32
33
34
# File 'lib/datacaster/validator.rb', line 31

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

#inspectObject


36
37
38
# File 'lib/datacaster/validator.rb', line 36

def inspect
  "#<Datacaster::Validator>"
end