Module: JsonDef
- Defined in:
- lib/verify.rb
Constant Summary collapse
- ANY_TYPE =
:wildcard- ANY_VALUE =
:any_value
Class Method Summary collapse
- .verify(obj, rule) ⇒ Object
- .verify_array(obj, rule) ⇒ Object
- .verify_bool(obj, rule) ⇒ Object
- .verify_null(obj, rule) ⇒ Object
- .verify_number(obj, rule) ⇒ Object
- .verify_object(obj, rule) ⇒ Object
- .verify_single_value(obj, rule) ⇒ Object
- .verify_string(obj, rule) ⇒ Object
Class Method Details
.verify(obj, rule) ⇒ Object
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
# File 'lib/verify.rb', line 8 def JsonDef.verify(obj, rule) case rule.class.to_s when 'JsonRuleObject' JsonDef.verify_object(obj, rule) when 'JsonRuleArray' JsonDef.verify_array(obj, rule) when 'JsonRuleString' JsonDef.verify_string(obj, rule) when 'JsonRuleNumber' JsonDef.verify_number(obj, rule) when 'JsonRuleBoolean' JsonDef.verify_bool(obj, rule) when 'JsonRuleNull' JsonDef.verify_null(obj, rule) else raise "Unknown rule at [verify] level: #{rule.class}" end end |
.verify_array(obj, rule) ⇒ Object
79 80 81 82 83 84 85 86 87 88 89 |
# File 'lib/verify.rb', line 79 def JsonDef.verify_array(obj, rule) return false unless obj.kind_of?(Array) return false unless rule.min_count < 0 || obj.count >= rule.min_count return false unless rule.max_count < 0 || obj.count <= rule.max_count if rule.unified_rule return false unless obj.all? { |e| JsonDef.verify(e, rule.unified_rule) } end true end |
.verify_bool(obj, rule) ⇒ Object
43 44 45 46 47 |
# File 'lib/verify.rb', line 43 def JsonDef.verify_bool(obj, rule) return false unless obj == true || obj == false return false unless JsonDef.verify_single_value(obj, rule) true end |
.verify_null(obj, rule) ⇒ Object
49 50 51 52 |
# File 'lib/verify.rb', line 49 def JsonDef.verify_null(obj, rule) return false unless JsonDef.verify_single_value(obj, rule) true end |
.verify_number(obj, rule) ⇒ Object
37 38 39 40 41 |
# File 'lib/verify.rb', line 37 def JsonDef.verify_number(obj, rule) return false unless obj.kind_of?(Numeric) return false unless JsonDef.verify_single_value(obj, rule) true end |
.verify_object(obj, rule) ⇒ Object
54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
# File 'lib/verify.rb', line 54 def JsonDef.verify_object(obj, rule) return false unless obj.kind_of?(Hash) rule.key_rules.each do |key_rule| return false if key_rule.required && !obj.has_key?(key_rule.key) return true unless obj.has_key?(key_rule.key) case when key_rule.rule == JsonDef::ANY_TYPE next when key_rule.rule.kind_of?(JsonRuleBase) return false unless JsonDef.verify(obj[key_rule.key], key_rule.rule) else return false end end # @todo In case of not allowing other keys, check if there are other not-allowed keys. if !rule.allow_other_keys obj.each { |k, v| return false unless rule.keys.member?(k) } end true end |
.verify_single_value(obj, rule) ⇒ Object
27 28 29 |
# File 'lib/verify.rb', line 27 def JsonDef.verify_single_value(obj, rule) rule.value == JsonDef::ANY_VALUE || rule.value == obj end |
.verify_string(obj, rule) ⇒ Object
31 32 33 34 35 |
# File 'lib/verify.rb', line 31 def JsonDef.verify_string(obj, rule) return false unless obj.kind_of?(String) return false unless JsonDef.verify_single_value(obj, rule) true end |