Sha256: ba90bae03395cae749deaf3b4193a34b18083ce5a1b77b57b0bc13949f3cbc96
Contents?: true
Size: 1.25 KB
Versions: 22
Compression:
Stored size: 1.25 KB
Contents
module OasParser class Parser def self.resolve(path) content = YAML.load_file(path) Parser.new(path, content).resolve end def initialize(path, content) @path = path @content = content end def resolve deeply_expand_refs(@content) end private def deeply_expand_refs(fragment) fragment = expand_refs(fragment) if fragment.is_a?(Hash) fragment.reduce({}) do |hash, (k, v)| hash.merge(k => deeply_expand_refs(v)) end elsif fragment.is_a?(Array) fragment.map { |e| deeply_expand_refs(e) } else fragment end end def expand_refs(fragment) if fragment.is_a?(Hash) && fragment.has_key?("$ref") ref = fragment["$ref"] if ref =~ /\Afile:/ expand_file(ref) else expand_pointer(ref) end else fragment end end def expand_file(ref) relative_path = ref.split(":").last absolute_path = File.expand_path(File.join("..", relative_path), @path) Parser.resolve(absolute_path) end def expand_pointer(ref) pointer = OasParser::Pointer.new(ref) fragment = pointer.resolve(@content) expand_refs(fragment) end end end
Version data entries
22 entries across 22 versions & 1 rubygems