module AttrValidator::Validator::ClassMethods

Public Instance Methods

validate(method_name = nil, &block) click to toggle source
# File lib/attr_validator/validator.rb, line 29
def validate(method_name = nil, &block)
  self.custom_validations ||= []
  if block_given?
    self.custom_validations << block
  elsif method_name
    AttrValidator::ArgsValidator.is_symbol!(method_name, "validate method name")
    self.custom_validations << method_name
  else
    raise ArgumentError, "method name or block should be given for validate"
  end
end
validate_associated(association_name, options) click to toggle source
# File lib/attr_validator/validator.rb, line 19
def validate_associated(association_name, options)
  AttrValidator::ArgsValidator.not_nil!(options[:validator], :validator)
  AttrValidator::ArgsValidator.is_class_or_symbol!(options[:validator], :validator)
  AttrValidator::ArgsValidator.is_symbol_or_block!(options[:if], :if) if options[:if]
  AttrValidator::ArgsValidator.is_symbol_or_block!(options[:unless], :unless) if options[:unless]

  self.associated_validations ||= {}
  self.associated_validations[association_name] = options
end
validates(*args) click to toggle source
# File lib/attr_validator/validator.rb, line 9
def validates(*args)
  options = args.pop
  AttrValidator::ArgsValidator.is_hash!(options, "last argument")

  self.validations ||= {}
  args.each do |attr_name|
    add_validations(attr_name, options)
  end
end

Private Instance Methods

add_validations(attr_name, options) click to toggle source
# File lib/attr_validator/validator.rb, line 43
def add_validations(attr_name, options)
  self.validations[attr_name] ||= {}
  options.each do |validator_name, validation_options|
    validator = AttrValidator.validators[validator_name]
    unless validator
      raise AttrValidator::Errors::MissingValidatorError, "Validator with name '#{validator_name}' doesn't exist"
    end
    validator.validate_options(validation_options)
    self.validations[attr_name][validator] = validation_options
  end
end