def build_schemas(parent_schema)
if parent_schema.schema["$ref"]
load_ref_schema(parent_schema, parent_schema.schema["$ref"])
end
if parent_schema.schema["extends"]
if parent_schema.schema["extends"].is_a?(String)
load_ref_schema(parent_schema, parent_schema.schema["extends"])
elsif parent_schema.schema["extends"].is_a?(Array)
parent_schema.schema["extends"].each do |type|
handle_schema(parent_schema, type)
end
end
end
["allOf", "anyOf", "oneOf", "not"].each do |key|
if parent_schema.schema.has_key?(key)
validations = parent_schema.schema[key]
validations = [validations] unless validations.is_a?(Array)
validations.each {|v| handle_schema(parent_schema, v) }
end
end
["type", "disallow"].each do |key|
if parent_schema.schema[key] && parent_schema.schema[key].is_a?(Array)
parent_schema.schema[key].each_with_index do |type,i|
if type.is_a?(Hash)
handle_schema(parent_schema, type)
end
end
end
end
if parent_schema.schema["definitions"]
parent_schema.schema["definitions"].each do |k,v|
handle_schema(parent_schema, v)
end
end
if parent_schema.schema["properties"]
parent_schema.schema["properties"].each do |k,v|
handle_schema(parent_schema, v)
end
end
if parent_schema.schema["patternProperties"]
parent_schema.schema["patternProperties"].each do |k,v|
handle_schema(parent_schema, v)
end
end
if parent_schema.schema["items"]
items = parent_schema.schema["items"].clone
single = false
if !items.is_a?(Array)
items = [items]
single = true
end
items.each_with_index do |item,i|
handle_schema(parent_schema, item)
end
end
if parent_schema.schema["enum"] && parent_schema.schema["enum"].is_a?(Array)
parent_schema.schema["enum"] = ArraySet.new(parent_schema.schema["enum"])
end
["additionalProperties", "additionalItems", "dependencies", "extends"].each do |key|
if parent_schema.schema[key].is_a?(Hash)
handle_schema(parent_schema, parent_schema.schema[key])
end
end
end