lib/prmd/commands/combine.rb in prmd-0.2.0 vs lib/prmd/commands/combine.rb in prmd-0.3.0
- old
+ new
@@ -6,64 +6,54 @@
[options[:meta]]
else
[path]
end
# sort for stable loading on any platform
- schemas = files.sort.map { |file| [file, YAML.load(File.read(file))] }
+ schemata = files.sort.map { |file| [file, YAML.load(File.read(file))] }
data = {
'$schema' => 'http://json-schema.org/draft-04/hyper-schema',
'definitions' => {},
'properties' => {},
'type' => ['object']
}
# tracks which entities where defined in which file
- definitions_map = {}
+ schemata_map = {}
if options[:meta] && File.exists?(options[:meta])
data.merge!(YAML.load(File.read(options[:meta])))
end
- schemas.each do |schema_file, schema_data|
- id = if schema_data['id']
- schema_data['id'].split('/').last
- end
- next if id.nil? || id[0..0] == '_' # FIXME: remove this exception?
+ schemata.each do |schema_file, schema_data|
+ id_prefix, id = schema_data['id'].split('/')
- if file = definitions_map[id]
- $stderr.puts "`#{id}` (from #{schema_file}) was already defined in `#{file}` and will overwrite the first definition"
+ if file = schemata_map[schema_data['id']]
+ $stderr.puts "`#{schema_data['id']}` (from #{schema_file}) was already defined in `#{file}` and will overwrite the first definition"
end
- definitions_map[id] = schema_file
+ schemata_map[schema_data['id']] = schema_file
- data['definitions'][id] = schema_data
+ data['definitions'][id_prefix] ||= {}
+ data['definitions'][id_prefix][id] = schema_data
reference_localizer = lambda do |datum|
case datum
when Array
datum.map {|element| reference_localizer.call(element)}
when Hash
if datum.has_key?('$ref')
- if datum['$ref'].include?('/schema/')
- $stderr.puts("`#{schema_data['id']}` `/schema/` prefixed refs are deprecated, use `/schemata/` prefixes")
- datum['$ref'] = datum['$ref'].gsub(%r{/schema/([^#]*)#}, '#/definitions/\1')
- end
- datum['$ref'] = datum['$ref'].gsub(%r{/schemata/([^#]*)#}, '#/definitions/\1')
+ datum['$ref'] = '#/definitions' + datum['$ref'].gsub('#', '')
end
if datum.has_key?('href')
- if datum['href'].include?('%2Fschema%2F')
- $stderr.puts("`#{id}` `%2Fschema%2F` prefixed hrefs are deprecated, use `%2Fschemata%2F` prefixes")
- datum['href'] = datum['href'].gsub(%r{%2Fschema%2F([^%]*)%23%2F}, '%23%2Fdefinitions%2F\1%2F')
- end
- datum['href'] = datum['href'].gsub(%r{%2Fschemata%2F([^%]*)%23%2F}, '%23%2Fdefinitions%2F\1%2F')
+ datum['href'] = datum['href'].gsub('%23', '').gsub(%r{(%2Fschemata%2F[^%]*%2F)}, '%23%2Fdefinitions\1')
end
datum.each { |k,v| datum[k] = reference_localizer.call(v) }
else
datum
end
end
- reference_localizer.call(data['definitions'][id])
+ reference_localizer.call(data['definitions'][id_prefix][id])
- data['properties'][id] = { '$ref' => "#/definitions/#{id}" }
+ data['properties'][id] = { '$ref' => "#/definitions/#{id_prefix}/#{id}" }
end
Prmd::Schema.new(data)
end
end