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