• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

notEthan / scorpio / 22243088469

20 Feb 2026 10:07PM UTC coverage: 86.948% (-0.6%) from 87.5%
22243088469

push

github

notEthan
jsi ~> 0.9

1259 of 1448 relevant lines covered (86.95%)

385.58 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

88.89
/lib/scorpio/openapi/reference.rb
1
# frozen_string_literal: true
2

3
module Scorpio
14✔
4
  module OpenAPI
14✔
5
    module Reference
14✔
6
      # overrides JSI::Base#[] to implicitly dereference this Reference, except when
7
      # the given token is present in this Reference's instance (this should usually
8
      # only apply to the token '$ref')
9
      def [](token, **kw)
14✔
10
        if respond_to?(:to_hash) && !key?(token)
5,376✔
11
          deref do |deref_jsi|
5,264✔
12
            return(deref_jsi[token, **kw])
5,264✔
13
          end
14
        end
15
        return super
80✔
16
      end
17

18
      # yields or returns the target of this reference
19
      # @yield [JSI::Base] if a block is given
20
      # @return [JSI::Base]
21
      def deref
14✔
22
        return unless respond_to?(:to_hash) && key?('$ref') && jsi_node_content['$ref'].respond_to?(:to_str)
5,264✔
23

24
        ref_uri = Addressable::URI.parse(jsi_node_content['$ref'])
5,264✔
25
        ref_uri_nofrag = ref_uri.merge(fragment: nil)
5,264✔
26

27
        if !ref_uri_nofrag.empty? || ref_uri.fragment.nil?
5,264✔
28
          raise(NotImplementedError,
×
29
            "Scorpio currently only supports fragment URIs as OpenAPI references. cannot find reference by uri: #{self['$ref']}"
30
          )
31
        end
32

33
        ptr = JSI::Ptr.from_fragment(ref_uri.fragment)
5,264✔
34
        deref_jsi = ptr.evaluate(jsi_root_node)
5,264✔
35

36
        # TODO type check deref_jsi
37

38
        yield deref_jsi if block_given?
5,264✔
39

40
        deref_jsi
×
41
      end
42
    end
43
  end
44
end
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc