module Garcon::Pathref

Expand a path with late-evaluated segments. Calls expand_path – ‘~’ becomes $HOME, ‘..’ is expanded, etc.

@example

A symbol represents a segment to expand
  Pathname.register_path(:conf_dir, '/etc/openldap')
  Pathname.path_to(:conf_dir)            # => '/etc/openldap'
  Pathname.path_to(:conf_dir, ldap.conf) # => '/etc/openldap/ldap.conf'

@example

References aren't expanded until they're read
  Pathname.register_path(:conf_dir, '/etc/openldap')
  Pathname.register_path(:ldap, :conf_dir, 'ldap.conf')
  Pathname.path_to(:ldap)                # => '/etc/openldap/ldap.conf'

@example

If we change the conf_dir, everything under it changes as well
  Pathname.register_path(:conf_dir, '~/.openldap.d')
  Pathname.path_to(:ldap)                # => '/root/openldap.d/ldap.conf'

@exampl

References can be relative, and can hold symbols themselves
  Pathname.register_path(:conf_dir, '/etc', :appname, :environment)
  Pathname.register_path(:appname, 'app_awesome')
  Pathname.register_path(:environment, 'dev')
  Pathname.path_to(:conf_dir)            # => '/etc/app_awesome/dev'

Constants

ROOT_PATHS

Public Instance Methods

of(*pathsegs) click to toggle source

@param [Array<>] pathsegs

Any mixture of strings (literal sub-paths) and symbols (interpreted
as references).

@return [Pathname]

A single expanded Pathname

@api public

# File lib/garcon/core_ext/pathname.rb, line 60
def of(*pathsegs)
  relpath_to(*pathsegs).expand_path
end
Also aliased as: path_to
path_to(*pathsegs)
Alias for: of
register_default_paths(handle_paths = {}) click to toggle source

@api public

# File lib/garcon/core_ext/pathname.rb, line 79
def register_default_paths(handle_paths = {})
  handle_paths.each_pair do |handle, pathsegs|
    unless ROOT_PATHS.has_key?(handle.to_sym)
      register_path(handle, *pathsegs)
    end
  end
end
register_path(handle, *pathsegs) click to toggle source

@api public

# File lib/garcon/core_ext/pathname.rb, line 66
def register_path(handle, *pathsegs)
  ArgumentError.arity_at_least!(pathsegs, 1)
  ROOT_PATHS[handle.to_sym] = pathsegs
end
register_paths(handle_paths = {}) click to toggle source

@api public

# File lib/garcon/core_ext/pathname.rb, line 72
def register_paths(handle_paths = {})
  handle_paths.each_pair do |handle, pathsegs|
    register_path(handle, *pathsegs)
  end
end
relative_path_to(*pathsegs)
Alias for: relpath_to
relpath_to(*pathsegs) click to toggle source

Expand a path with late-evaluated segments @see ‘.path_to`. Calls cleanpath (removing `//` double slashes and useless `..`s), but does not reference the filesystem or make paths absolute.

@api public

# File lib/garcon/core_ext/pathname.rb, line 97
def relpath_to(*pathsegs)
  ArgumentError.arity_at_least!(pathsegs, 1)
  pathsegs = pathsegs.flatten.map { |ps| expand_pathseg(ps) }.flatten
  self.new(File.join(*pathsegs)).cleanpath(true)
end
Also aliased as: relative_path_to
unregister_path(handle) click to toggle source

@api public

# File lib/garcon/core_ext/pathname.rb, line 88
def unregister_path(handle)
  ROOT_PATHS.delete handle.to_sym
end