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

Examples:


class UserAttributes
  include ROM::Model::Attributes

  attribute :name

  validates :name, presence: true
end

class UserValidator
  include ROM::Model::Validator
end

attrs = UserAttributes.new(name: '')
UserValidator.call(attrs) # raises ValidationError

Defined Under Namespace

Modules: ClassMethods Classes: UniquenessValidator

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

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_namesObject (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

#attributesModel::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.

Returns:



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

    embedded_validators({})
  end
end

Instance Method Details

#callModel::Attributes

Trigger validations and return attributes on success

Returns:

Raises:



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_modelModel::Attributes

Returns:



74
75
76
# File 'lib/rom/model/validator.rb', line 74

def to_model
  attributes
end