class ValidationProfiler::Manager

Public Instance Methods

add_rule(key, rule) click to toggle source

Called to add a custom validation rule to the manager

@param key [Symbol] The name of the rule @param rule [ClassName] Class name of the validation rule to register.

# File lib/validation_profiler/manager.rb, line 41
def add_rule(key, rule)
  if ValidationProfiler::Rules::Manager.instance.nil?
    ValidationProfiler::Rules::Manager.new
  end

  ValidationProfiler::Rules::Manager.instance.add_rule(key, rule)
end
validate(obj, profile, parent = nil) click to toggle source

Called to validate an object against a validation profile.

@param obj [Object] The object to validate @param profile [ClassName] The class name of the validation profile to validate against

@return [ValidationManagerResult] The result of the validation

# File lib/validation_profiler/manager.rb, line 9
def validate(obj, profile, parent = nil)
  result = ValidationProfiler::ManagerResult.new

  validation_rules = profile.class_variable_get(:@@validation_rules)

  validation_rules.each do |r|

    if ValidationProfiler::Rules::Manager.instance.nil?
      ValidationProfiler::Rules::Manager.new
    end

    rule = ValidationProfiler::Rules::Manager.instance.get_rule(r[:name])
    outcome = rule.validate(obj, r[:field], r[:attributes], parent)

    if outcome.is_a?(Array)
      result.errors += outcome.map(&:errors).flatten
    elsif outcome.is_a?(ValidationProfiler::ManagerResult) && !outcome.outcome
      result.errors += outcome.errors
    elsif !outcome
      result.errors.push(field: r[:field], message: rule.error_message(r[:field], r[:attributes], parent))
    end
  end

  result.outcome = result.errors.empty?

  result
end