module ContextValidations::Model

Public Class Methods

included(base) click to toggle source
# File lib/context_validations/model.rb, line 2
def self.included(base)
  base.class_eval do
    reset_callbacks(:validate)
  end

  base._validators.keys.each do |key|
    base._validators.delete(key)
  end
end

Public Instance Methods

validations() click to toggle source

The collection of validations assigned to this model instance

@return [Array]

# File lib/context_validations/model.rb, line 15
def validations
  @validations ||= []
end
validations=(validations) click to toggle source

Use to set the validations collection assigned to this model instance

Pass an array of validator instances

@param [[ActiveMode::Validations::Validator]]

# File lib/context_validations/model.rb, line 24
def validations=(validations)
  @validations = validations.flatten.map do |validator|
    validator[:options][:class] = self.class
    validator[:class].new(validator[:options])
  end
end

Protected Instance Methods

run_validations!() click to toggle source
# File lib/context_validations/model.rb, line 33
def run_validations!
  Array.wrap(validations).each do |validator|
    if validator.respond_to?(:setup)
      validator.setup(self.class)
    end
    if validator.options[:if]
      if validator.options[:if].respond_to?(:call)
        if validator.options[:if].call(self)
          validator.validate(self)
        end
      elsif self.send(validator.options[:if])
        validator.validate(self)
      end
    elsif validator.options[:unless]
      if validator.options[:unless].respond_to?(:call)
        if !validator.options[:unless].call(self)
          validator.validate(self)
        end
      elsif !self.send(validator.options[:unless])
        validator.validate(self)
      end
    else
      validator.validate(self)
    end
  end
  errors.empty?
end

Private Instance Methods

_validators() click to toggle source
# File lib/context_validations/model.rb, line 63
def _validators
  validations.inject({}) do |hash, validator|
    attribute = validator.attributes.first
    if hash.key?(attribute)
      hash[attribute] << validator
    else
      hash[attribute] = [validator]
    end
    hash
  end
end