class Jekyll::JsonSchemaCompiler
Public Instance Methods
compile(obj, obj_name=nil)
click to toggle source
# File lib/utils.rb, line 105 def compile(obj, obj_name=nil) if obj.is_a?(Array) obj.map!{|method| compile(method)} elsif obj.is_a?(Hash) if obj.include?('schema') and obj_name == 'application/json' schema_hash = JSON.parse(obj['schema']) schema_hash = traverse_and_compile_schema(schema_hash) obj['schema'] = JSON.pretty_generate(schema_hash) end obj.each { |k, v| obj[k] = compile(v, k)} end obj end
Private Instance Methods
traverse_and_compile_schema(schema_hash)
click to toggle source
# File lib/utils.rb, line 122 def traverse_and_compile_schema(schema_hash) if schema_hash.is_a?(Array) schema_hash.map!{|method| traverse_and_compile_schema(method)} elsif schema_hash.is_a?(Hash) if schema_hash.include?('$ref') refed = JSON.parse(File.read(schema_hash['$ref'])) schema_hash.delete('$ref') schema_hash.merge!(refed) end schema_hash.each { |k, v| schema_hash[k] = traverse_and_compile_schema(v)} # Merge allOfs into the parent object if schema_hash.include?('allOf') for item in schema_hash['allOf'] merger = proc { |key, v1, v2| Hash === v1 && Hash === v2 ? v1.merge(v2, &merger) : v2 } schema_hash.merge!(item, &merger) end schema_hash.delete('allOf') end end schema_hash end