Class: Sequent::Core::Helpers::AssociationValidator
- Inherits:
-
ActiveModel::Validator
- Object
- ActiveModel::Validator
- Sequent::Core::Helpers::AssociationValidator
- Defined in:
- lib/sequent/core/helpers/association_validator.rb
Overview
Validator for associations. Typically used in Sequent::Core::Command, Sequent::Core::Event and Sequent::Core::ValueObjects.
When you define attrs that are also value object or array(..) then this class is automatically used.
Example:
class RegisterForTrainingCommand < Sequent::Core::Command
attrs trainee: Person
end
This will register :trainee with the AssociationValidator and is equivilant to
validates_with Sequent::Core::AssociationValidator, associations: [:trainee]
Instance Method Summary collapse
-
#initialize(options = {}) ⇒ AssociationValidator
constructor
A new instance of AssociationValidator.
- #validate(record) ⇒ Object
Constructor Details
#initialize(options = {}) ⇒ AssociationValidator
Returns a new instance of AssociationValidator.
26 27 28 29 |
# File 'lib/sequent/core/helpers/association_validator.rb', line 26 def initialize( = {}) super fail "Must provide ':associations' to validate" unless [:associations].present? end |
Instance Method Details
#validate(record) ⇒ Object
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/sequent/core/helpers/association_validator.rb', line 31 def validate(record) associations = [:associations] associations = [associations] unless associations.instance_of?(Array) associations.each do |association| value = record.instance_variable_get("@#{association}") if value && incorrect_type?(value, record, association) record.errors.add(association, "is not of type #{describe_type(record.class.types[association])}") elsif value.is_a?(Array) item_type = record.class.types.fetch(association).item_type record.errors.add(association, 'is invalid') unless validate_all(value, item_type).all? elsif value&.invalid? record.errors.add(association, 'is invalid') end end end |