module PoroValidator::Validator::ClassMethods

Public Instance Methods

validates(attr_name, **options, &block) click to toggle source
# File lib/poro_validator/validator.rb, line 8
def validates(attr_name, **options, &block)
  if block_given?
    nested_validations = build_nested_validations(attr_name, &block)
    nested_validations.each do |nested_validation|
      validations << nested_validation
    end
  else
    validations.build(attr_name, **options)
  end
end
validations() click to toggle source
# File lib/poro_validator/validator.rb, line 19
def validations
  @validations ||= build_validations
end

Private Instance Methods

build_nested_validations(attr_name, &block) click to toggle source
# File lib/poro_validator/validator.rb, line 33
def build_nested_validations(attr_name, &block)
  nested_validator = Class.new do
    include PoroValidator.validator
  end
  nested_validator.instance_eval(&block)
  nested_validations = nested_validator.validations.validations
  nested_validations.each do |nv|
    nv[:validator].attribute = [attr_name, nv[:validator].attribute]
  end
end
build_validations(validations = []) click to toggle source
# File lib/poro_validator/validator.rb, line 25
def build_validations(validations = [])
  Validations.build_validations(validations)
end
inherited(descendant) click to toggle source

Ensures that when a Validator class is subclassed, the validation rules will be carried into the subclass as well.

@example

class PersonValidator
  include Veto.validator
  validates :name, presence: true
end

class CustomerValidator < PersonValidator
  validates :customer_id, presence: true
end

customer = Customer.new
validator = CustomerValidator.new
validator.validate!(customer) # => ["name is not present", "customer_id is not present"]
# File lib/poro_validator/validator.rb, line 60
def inherited(descendant)
  descendant.send(:validates_with, (build_validations(validations.validations.dup)))
end
validates_with(vals) click to toggle source
# File lib/poro_validator/validator.rb, line 29
def validates_with(vals)
  @validations = vals
end