Sha256: 85e5c7b3d634feaf6d89c2bac727ca19501216e574b4535b4936034d13bfae41
Contents?: true
Size: 1.67 KB
Versions: 3
Compression:
Stored size: 1.67 KB
Contents
require_relative '../schema' require_relative 'schema_hash' require_relative 'reference_localizer' # :nodoc: module Prmd # Schema combiner class Combiner # # @param [Hash<Symbol, Object>] properties def initialize(properties = {}) @properties = properties @schema = properties.fetch(:schema) @base = properties.fetch(:base, {}) @meta = properties.fetch(:meta, {}) @options = properties.fetch(:options, {}) end # @param [Object] datum # @return [Object] def reference_localizer(datum) ReferenceLocalizer.localize(datum) end # # @param [Prmd::SchemaHash] schemata # @return [Prmd::Schema] def combine(*schemata) # tracks which entities where defined in which file schemata_map = {} data = {} data.merge!(@base) data.merge!(@meta) schemata.each do |schema| id = schema.fetch('id') id_ary = id.split('/').last if s = schemata_map[id] $stderr.puts "`#{id}` (from #{schema.filename}) was already defined " \ "in `#{s.filename}` and will overwrite the first " \ "definition" end # avoinding damaging the original schema embedded_schema = schema.dup # schemas are now in a single scope by combine embedded_schema.delete('id') schemata_map[id] = embedded_schema data['definitions'][id_ary] = embedded_schema.to_h data['properties'][id_ary] = { '$ref' => "#/definitions/#{id_ary}" } reference_localizer(data['definitions'][id_ary]) end Prmd::Schema.new(data, @options) end private :reference_localizer end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
prmd-0.14.0 | lib/prmd/core/combiner.rb |
prmd-0.13.0 | lib/prmd/core/combiner.rb |
prmd-0.12.0 | lib/prmd/core/combiner.rb |