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