class Objecheck::Validator

Validator checks a object with given schema and report errors

Constants

DEFAULT_RULES

Public Class Methods

new(schema, rule_map = DEFAULT_RULES, schema_validation = true) click to toggle source
# File lib/objecheck/validator.rb, line 41
def initialize(schema, rule_map = DEFAULT_RULES, schema_validation = true)
  @rule_map = rule_map
  @schema_validation = schema_validation
  @param_validators = {} if schema_validation
  @rules = compile_schema(schema)
end

Public Instance Methods

compile_schema(schema) click to toggle source
# File lib/objecheck/validator.rb, line 56
def compile_schema(schema)
  schema.each_with_object({}) do |(rule_name, param), rules|
    rule_class = @rule_map[rule_name]
    if @schema_validation && rule_class.respond_to?(:schema)
      param_validator = @param_validators[rule_name]
      if !param_validator
        param_schema, param_rule_map = rule_class.schema
        param_validator = Objecheck::Validator.new(param_schema, param_rule_map || DEFAULT_RULES, false)
        @param_validators[:rule_name] = param_validator
      end
      if !(errors = param_validator.validate(param)).empty?
        raise Objecheck::Error, "paramters for #{rule_name} rule is invalid\n  #{errors.join("\n  ")}"
      end
    end
    rules[rule_name] = rule_class.new(self, param)
  end
end
validate(target) click to toggle source
# File lib/objecheck/validator.rb, line 48
def validate(target)
  collector = Collector.new(self)
  collector.add_prefix_in('root') do
    collector.validate(target, @rules)
  end
  collector.errors
end