class Grape::Path

Represents a path to an endpoint.

def add_part(parts, value)

def add_part(parts, value)
  parts << value if value && not_slash?(value)
end

def build_parts(raw_path, raw_namespace, settings)

def build_parts(raw_path, raw_namespace, settings)
  [].tap do |parts|
    add_part(parts, settings[:mount_path])
    add_part(parts, settings[:root_prefix])
    parts << VERSION_SEGMENT if uses_path_versioning?(settings)
    add_part(parts, raw_namespace)
    add_part(parts, raw_path)
  end
end

def build_suffix(raw_path, raw_namespace, settings)

def build_suffix(raw_path, raw_namespace, settings)
  if uses_specific_format?(settings)
    "(.#{settings[:format]})"
  elsif !uses_path_versioning?(settings) || (valid_part?(raw_namespace) || valid_part?(raw_path))
    NO_VERSIONING_WITH_VALID_PATH_FORMAT_SEGMENT
  else
    DEFAULT_FORMAT_SEGMENT
  end
end

def initialize(raw_path, raw_namespace, settings)

def initialize(raw_path, raw_namespace, settings)
  @origin = PartsCache[build_parts(raw_path, raw_namespace, settings)]
  @suffix = build_suffix(raw_path, raw_namespace, settings)
end

def not_slash?(value)

def not_slash?(value)
  value != '/'
end

def to_s

def to_s
  "#{origin}#{suffix}"
end

def uses_path_versioning?(settings)

def uses_path_versioning?(settings)
  return false unless settings.key?(:version) && settings[:version_options]&.key?(:using)
  settings[:version] && settings[:version_options][:using] == :path
end

def uses_specific_format?(settings)

def uses_specific_format?(settings)
  return false unless settings.key?(:format) && settings.key?(:content_types)
  settings[:format] && Array(settings[:content_types]).size == 1
end

def valid_part?(part)

def valid_part?(part)
  part&.match?(/^\S/) && not_slash?(part)
end