Module: ROM::Model::Validator
- Defined in:
- lib/rom/model/validator.rb,
lib/rom/model/validator/uniqueness_validator.rb
Overview
Mixin for ROM-compliant validator objects
Defined Under Namespace
Modules: ClassMethods Classes: UniquenessValidator
Instance Attribute Summary collapse
- #attr_names ⇒ Object readonly private
- #attributes ⇒ Model::Attributes readonly private
Class Method Summary collapse
-
.included(base) ⇒ Object
private
Inclusion hook that extends a class with required interfaces.
Instance Method Summary collapse
-
#call ⇒ Model::Attributes
Trigger validations and return attributes on success.
- #initialize(attributes) ⇒ Object private
- #to_model ⇒ Model::Attributes
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(name, *args, &block) ⇒ Object (private)
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
This is needed for ActiveModel::Validations to work properly as it expects the object to provide attribute values. Meh.
96 97 98 99 100 101 102 |
# File 'lib/rom/model/validator.rb', line 96 def method_missing(name, *args, &block) if attr_names.include?(name) attributes[name] else super end end |
Instance Attribute Details
#attr_names ⇒ Object (readonly)
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
61 62 63 |
# File 'lib/rom/model/validator.rb', line 61 def attr_names @attr_names end |
#attributes ⇒ Model::Attributes (readonly)
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
58 59 60 |
# File 'lib/rom/model/validator.rb', line 58 def attributes @attributes end |
Class Method Details
.included(base) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Inclusion hook that extends a class with required interfaces
41 42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/rom/model/validator.rb', line 41 def self.included(base) base.class_eval do extend ClassMethods extend ROM::ClassMacros include ActiveModel::Validations include Equalizer.new(:attributes, :errors) base.defines :embedded_validators ({}) end end |
Instance Method Details
#call ⇒ Model::Attributes
Trigger validations and return attributes on success
85 86 87 88 |
# File 'lib/rom/model/validator.rb', line 85 def call raise ValidationError, errors unless valid? attributes end |
#initialize(attributes) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
66 67 68 69 |
# File 'lib/rom/model/validator.rb', line 66 def initialize(attributes) @attributes = attributes @attr_names = self.class.validators.map(&:attributes).flatten.uniq end |
#to_model ⇒ Model::Attributes
74 75 76 |
# File 'lib/rom/model/validator.rb', line 74 def to_model attributes end |