class Openapi3Parser::Source::Pointer

A class to decorate the array of fields that make up a pointer and provide common means to convert it into different representations.

Attributes

absolute[R]
segments[R]

Public Class Methods

from_fragment(fragment) click to toggle source
# File lib/openapi3_parser/source/pointer.rb, line 10
def self.from_fragment(fragment)
  fragment = fragment[1..-1] if fragment.start_with?("#")
  absolute = fragment[0] == "/"
  segments = fragment.split("/").map do |part|
    next if part == ""

    unescaped = CGI.unescape(part.gsub("%20", "+"))
    unescaped.match?(/\A\d+\z/) ? unescaped.to_i : unescaped
  end
  new(segments.compact, absolute: absolute)
end
merge_pointers(base_pointer, new_pointer) click to toggle source
# File lib/openapi3_parser/source/pointer.rb, line 22
def self.merge_pointers(base_pointer, new_pointer)
  MergePointers.call(base_pointer, new_pointer)
end
new(segments, absolute: true) click to toggle source

@param [::Array] segments @param [Boolean] absolute

# File lib/openapi3_parser/source/pointer.rb, line 30
def initialize(segments, absolute: true)
  @segments = segments.freeze
  @absolute = absolute
end

Public Instance Methods

==(other) click to toggle source
# File lib/openapi3_parser/source/pointer.rb, line 35
def ==(other)
  segments == other.segments
end
fragment() click to toggle source
# File lib/openapi3_parser/source/pointer.rb, line 39
def fragment
  fragment = segments.map { |s| CGI.escape(s.to_s).gsub("+", "%20") }
                     .join("/")
  "##{absolute ? fragment.prepend('/') : fragment}"
end
inspect() click to toggle source
# File lib/openapi3_parser/source/pointer.rb, line 49
def inspect
  %{#{self.class.name}(segments: #{segments}, fragment: "#{fragment}")}
end
root?() click to toggle source
# File lib/openapi3_parser/source/pointer.rb, line 53
def root?
  segments.empty?
end
to_s() click to toggle source
# File lib/openapi3_parser/source/pointer.rb, line 45
def to_s
  fragment
end