Class: JSON::Schema::TypeAttribute
- Defined in:
- lib/json-schema/attributes/type.rb
Class Method Summary collapse
Methods inherited from Attribute
build_fragment, validation_error
Class Method Details
.validate(current_schema, data, fragments, validator, options = {}) ⇒ Object
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
# File 'lib/json-schema/attributes/type.rb', line 4 def self.validate(current_schema, data, fragments, validator, = {}) union = true if [:disallow] types = current_schema.schema['disallow'] else types = current_schema.schema['type'] end if !types.is_a?(Array) types = [types] union = false end valid = false types.each do |type| if type.is_a?(String) case type when "string" valid = data.is_a?(String) when "number" valid = data.is_a?(Numeric) when "integer" valid = data.is_a?(Integer) when "boolean" valid = (data.is_a?(TrueClass) || data.is_a?(FalseClass)) when "object" valid = data.is_a?(Hash) when "array" valid = data.is_a?(Array) when "null" valid = data.is_a?(NilClass) when "any" valid = true else valid = true end elsif type.is_a?(Hash) && union # Validate as a schema schema = JSON::Schema.new(type,current_schema.uri,validator) begin schema.validate(data,fragments,) valid = true rescue ValidationError # We don't care that these schemas don't validate - we only care that one validated end end break if valid end if ([:disallow]) if valid = "The property '#{build_fragment(fragments)}' matched one or more of the following types:" types.each {|type| += type.is_a?(String) ? " #{type}," : " (schema)," } .chop! validation_error(, fragments, current_schema, [:record_errors]) end elsif !valid = "The property '#{build_fragment(fragments)}' of type #{data.class} did not match one or more of the following types:" types.each {|type| += type.is_a?(String) ? " #{type}," : " (schema)," } .chop! validation_error(, fragments, current_schema, [:record_errors]) end end |