class Openapi3Parser::Source::Pointer::MergePointers

Attributes

base_pointer[R]
new_pointer[R]

Public Class Methods

call(*args) click to toggle source
# File lib/openapi3_parser/source/pointer.rb, line 60
def self.call(*args)
  new(*args).call
end
new(base_pointer, new_pointer) click to toggle source
# File lib/openapi3_parser/source/pointer.rb, line 64
def initialize(base_pointer, new_pointer)
  @base_pointer = create_pointer(base_pointer)
  @new_pointer = create_pointer(new_pointer)
end

Public Instance Methods

call() click to toggle source
# File lib/openapi3_parser/source/pointer.rb, line 69
def call
  return base_pointer if new_pointer.nil?
  return new_pointer if base_pointer.nil? || new_pointer.absolute

  merge_pointers(base_pointer, new_pointer)
end

Private Instance Methods

create_pointer(pointer_like) click to toggle source
# File lib/openapi3_parser/source/pointer.rb, line 80
def create_pointer(pointer_like)
  case pointer_like
  when Pointer then pointer_like
  when ::Array then Pointer.new(pointer_like, absolute: false)
  when ::String then Pointer.from_fragment(pointer_like)
  when nil then nil
  else raise Openapi3Parser::Error, "Unexpected type for pointer"
  end
end
merge_pointers(pointer_a, pointer_b) click to toggle source
# File lib/openapi3_parser/source/pointer.rb, line 90
def merge_pointers(pointer_a, pointer_b)
  fragment_a = pointer_a.fragment.gsub(%r{\A#?/?}, "")
  fragment_b = pointer_b.fragment.gsub(%r{\A#?/?}, "")

  joined = File.expand_path("/#{fragment_a}/#{fragment_b}", "/")

  joined = joined[1..-1] unless pointer_a.absolute

  Pointer.from_fragment("##{joined}")
end