class Grape::Path

Represents a path to an endpoint.

def self.prepare(raw_path, namespace, settings)

def self.prepare(raw_path, namespace, settings)
  Path.new(raw_path, namespace, settings)
end

def initialize(raw_path, namespace, settings)

def initialize(raw_path, namespace, settings)
  @raw_path = raw_path
  @namespace = namespace
  @settings = settings
end

def mount_path

def mount_path
  settings[:mount_path]
end

def namespace?

def namespace?
  namespace&.match?(/^\S/) && namespace != '/'
end

def parts

def parts
  parts = [mount_path, root_prefix].compact
  parts << ':version' if uses_path_versioning?
  parts << namespace.to_s
  parts << raw_path.to_s
  parts.flatten.reject { |part| part == '/' }
end

def path

def path
  Grape::Router.normalize_path(PartsCache[parts])
end

def path?

def path?
  raw_path&.match?(/^\S/) && raw_path != '/'
end

def path_with_suffix

def path_with_suffix
  "#{path}#{suffix}"
end

def root_prefix

def root_prefix
  split_setting(:root_prefix)
end

def split_setting(key)

def split_setting(key)
  return if settings[key].nil?
  settings[key].to_s.split('/')
end

def suffix

def suffix
  if uses_specific_format?
    "(.#{settings[:format]})"
  elsif !uses_path_versioning? || (namespace? || path?)
    '(.:format)'
  else
    '(/.:format)'
  end
end

def to_s

def to_s
  path_with_suffix
end

def uses_path_versioning?

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

def uses_specific_format?

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