Class: Objecheck::Validator
- Inherits:
-
Object
- Object
- Objecheck::Validator
- Defined in:
- lib/objecheck/validator.rb
Overview
Validator checks a object with given schema and report errors
Defined Under Namespace
Classes: AnyRule, Collector, EachKeyRule, EachRule, EachValueRule, EqRule, KeyValueRule, RespondToRule, SatisfyRule, TypeRule
Constant Summary collapse
- DEFAULT_RULES =
{ type: TypeRule, each: EachRule, each_key: EachKeyRule, each_value: EachValueRule, key_value: KeyValueRule, eq: EqRule, any: AnyRule, satisfy: SatisfyRule, respond_to: RespondToRule }.freeze
Instance Method Summary collapse
- #compile_schema(schema) ⇒ Object
-
#initialize(schema, rule_map = DEFAULT_RULES, schema_validation = true) ⇒ Validator
constructor
A new instance of Validator.
- #validate(target) ⇒ Object
Constructor Details
#initialize(schema, rule_map = DEFAULT_RULES, schema_validation = true) ⇒ Validator
Returns a new instance of Validator.
41 42 43 44 45 46 |
# 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 |
Instance Method Details
#compile_schema(schema) ⇒ Object
56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
# 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 |