Sha256: 07260ffdff61900a4cae60b869e85a4fa8c5fe694e229e82af9d0d937b14b6ce
Contents?: true
Size: 1.29 KB
Versions: 2
Compression:
Stored size: 1.29 KB
Contents
# frozen_string_literal: true module Scorpio module OpenAPI module Reference # overrides JSI::Base#[] to implicitly dereference this Reference, except when # the given token is present in this Reference's instance (this should usually # only apply to the token '$ref') def [](token, **kw) if respond_to?(:to_hash) && !key?(token) deref do |deref_jsi| return(deref_jsi[token, **kw]) end end return super end # yields or returns the target of this reference # @yield [JSI::Base] if a block is given # @return [JSI::Base] def deref return unless respond_to?(:to_hash) && self['$ref'].respond_to?(:to_str) ref_uri = Addressable::URI.parse(self['$ref']) ref_uri_nofrag = ref_uri.merge(fragment: nil) if !ref_uri_nofrag.empty? || ref_uri.fragment.nil? raise(NotImplementedError, "Scorpio currently only supports fragment URIs as OpenAPI references. cannot find reference by uri: #{self['$ref']}" ) end ptr = JSI::Ptr.from_fragment(ref_uri.fragment) deref_jsi = ptr.evaluate(jsi_root_node) # TODO type check deref_jsi yield deref_jsi if block_given? deref_jsi end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
scorpio-0.6.4 | lib/scorpio/openapi/reference.rb |
scorpio-0.6.3 | lib/scorpio/openapi/reference.rb |