Class: JekyllOpenAPI::Dereferencer

Inherits:
Object
  • Object
show all
Defined in:
lib/jekyll_openapi/dereferencer.rb

Overview

Recursively resolves local $ref pointers in an OpenAPI document. External references (other files, URLs) are left in place with a warning. Circular references are detected and left in place instead of recursing forever.

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(root, logger: JekyllOpenAPI.logger) ⇒ Dereferencer

Returns a new instance of Dereferencer.



9
10
11
12
# File 'lib/jekyll_openapi/dereferencer.rb', line 9

def initialize(root, logger: JekyllOpenAPI.logger)
  @root = root
  @logger = logger
end

Class Method Details

.dereference(root, logger: JekyllOpenAPI.logger) ⇒ Object



14
15
16
# File 'lib/jekyll_openapi/dereferencer.rb', line 14

def self.dereference(root, logger: JekyllOpenAPI.logger)
  new(root, logger: logger).dereference
end

Instance Method Details

#dereference(node = @root, stack = []) ⇒ Object

Returns a deep copy of the document with every local $ref replaced by its target.

Returns:

  • a deep copy of the document with every local $ref replaced by its target



19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/jekyll_openapi/dereferencer.rb', line 19

def dereference(node = @root, stack = [])
  case node
  when Hash
    if node.key?("$ref")
      resolve(node, stack)
    else
      node.transform_values { |value| dereference(value, stack) }
    end
  when Array
    node.map { |value| dereference(value, stack) }
  else
    node
  end
end