Module: Gorillib::Pathref

Extended by:
Pathref
Included in:
Pathref, Pathname
Defined in:
lib/gorillib/pathname.rb

Constant Summary collapse

ROOT_PATHS =
Hash.new

Instance Method Summary collapse

Instance Method Details

#of(*pathsegs) ⇒ Pathname Also known as: path_to

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

Examples:

A symbol represents a segment to expand

Pathname.register_path(:conf_dir, '/etc/delorean')
Pathname.path_to(:conf_dir)                  # '/etc/delorean'
Pathname.path_to(:conf_dir, modacity.conf)   # '/etc/delorean/modacity.conf'

References aren't expanded until they're read

Pathname.register_path(:conf_dir, '/etc/delorean')
Pathname.register_path(:modacity, :conf_dir, 'modacity.conf')
Pathname.path_to(:modacity)                  # '/etc/delorean/modacity.conf'
# if we change the conf_dir, everything under it changes as well
Pathname.register_path(:conf_dir, '~/.delorean.d')
Pathname.path_to(:modacity)                  # '/home/flip/delorean.d/modacity.conf'

References can be relative, and can hold symbols themselves

Pathname.register_path(:conf_dir, '/etc', :appname, :environment)
Pathname.register_path(:appname, 'happy_app')
Pathname.register_path(:environment, 'dev')
Pathname.path_to(:conf_dir)                  # '/etc/happy_app/dev'

Parameters:

  • pathsegs (Array<[String,Symbol]>)

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

Returns:

  • (Pathname)

    A single expanded Pathname


55
56
57
# File 'lib/gorillib/pathname.rb', line 55

def of(*pathsegs)
  relpath_to(*pathsegs).expand_path
end

#register_default_paths(handle_paths = {}) ⇒ Object


19
20
21
22
23
# File 'lib/gorillib/pathname.rb', line 19

def register_default_paths(handle_paths = {})
  handle_paths.each_pair do |handle, pathsegs|
    register_path(handle, *pathsegs) unless ROOT_PATHS.has_key?(handle.to_sym)
  end
end

#register_path(handle, *pathsegs) ⇒ Object


10
11
12
13
# File 'lib/gorillib/pathname.rb', line 10

def register_path(handle, *pathsegs)
  ArgumentError.arity_at_least!(pathsegs, 1)
  ROOT_PATHS[handle.to_sym] = pathsegs
end

#register_paths(handle_paths = {}) ⇒ Object


15
16
17
# File 'lib/gorillib/pathname.rb', line 15

def register_paths(handle_paths = {})
  handle_paths.each_pair{|handle, pathsegs| register_path(handle, *pathsegs) }
end

#relpath_to(*pathsegs) ⇒ Object Also known as: relative_path_to

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

See Also:

  • Gorillib::Pathref.``.path_to`

67
68
69
70
71
# File 'lib/gorillib/pathname.rb', line 67

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

#unregister_path(handle) ⇒ Object


25
26
27
# File 'lib/gorillib/pathname.rb', line 25

def unregister_path(handle)
  ROOT_PATHS.delete handle.to_sym
end