Sha256: feaaaca266a30601e440f3cb8904c2aa34b02029e8c6a3a28a4915d812f00357
Contents?: true
Size: 1.28 KB
Versions: 3
Compression:
Stored size: 1.28 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, *a, &b) if respond_to?(:to_hash) && !key?(token) deref do |deref_jsi| return deref_jsi[token] 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
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
scorpio-0.6.2 | lib/scorpio/openapi/reference.rb |
scorpio-0.6.1 | lib/scorpio/openapi/reference.rb |
scorpio-0.6.0 | lib/scorpio/openapi/reference.rb |