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)
  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)
  parts
end

def build_suffix(raw_path, raw_namespace, settings)

def build_suffix(raw_path, raw_namespace, settings)
  return "(.#{settings[:format]})" if uses_specific_format?(settings)
  return NO_VERSIONING_WITH_VALID_PATH_FORMAT_SEGMENT if !uses_path_versioning?(settings) || valid_part?(raw_namespace) || valid_part?(raw_path)
  DEFAULT_FORMAT_SEGMENT
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]
  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