The 2.0 API is much a great deal more concise than the original
0.0+ and 1.0+ APIs. It consists primarily of a single
interface method XDG[]
. Yet all the functionality of the older
API remain and then some.
First we need to require the library.
require 'xdg'
In the applique we have setup a fake root directory with coorepsonding environment settings to use as test fixtures.
XDG['DATA_HOME'].environment.assert == ENV['XDG_DATA_HOME'].to_s
XDG['DATA_HOME'].environment_variables.assert == ['XDG_DATA_HOME']
Looking at the data home location by default it should be point to
our joe user's home directory under .local/share
.
XDG['DATA_HOME'].to_a.assert == [$froot + 'home/joe/.local/share']
XDG['DATA_DIRS'].environment.assert == ENV['XDG_DATA_DIRS'].to_s
XDG['DATA_DIRS'].environment_variables.assert == ['XDG_DATA_DIRS']
Looking at the system data locations
XDG['DATA_DIRS'].to_a.assert == [$froot + 'usr/share']
XDG['DATA'].environment_variables.assert == ['XDG_DATA_HOME', 'XDG_DATA_DIRS']
Lookking at both data location combined
XDG['DATA'].to_a.assert == [$froot + 'home/joe/.local/share', $froot + 'usr/share']
XDG['CONFIG_HOME'].environment.assert == ENV['XDG_CONFIG_HOME'].to_s
XDG['CONFIG_HOME'].to_a.assert == [$froot + 'home/joe/.config']
XDG['CONFIG_DIRS'].environment.assert == ENV['XDG_CONFIG_DIRS'].to_s
XDG['CONFIG_DIRS'].to_a.assert == [$froot + 'etc/xdg', $froot + 'etc']
XDG['CONFIG'].to_a.assert == [$froot + 'home/joe/.config', $froot + 'etc/xdg', $froot + 'etc']
XDG['CACHE_HOME'].environment.assert == ENV['XDG_CACHE_HOME'].to_s
XDG['CACHE_HOME'].to_a.assert == [$froot + 'home/joe/.cache']
XDG['CACHE_DIRS'].environment.assert == ENV['XDG_CACHE_DIRS'].to_s
XDG['CACHE_DIRS'].to_a.assert == [$froot + 'tmp']
XDG['CACHE'].to_a.assert == [$froot + 'home/joe/.cache', $froot + 'tmp']
The extended base directory standard provides additional locations not apart the offical standard. These are somewhat experimental.
XDG['RESOURCE_HOME'].environment.assert == ENV['XDG_RESOURCE_HOME'].to_s
XDG['RESOURCE_HOME'].environment_variables.assert == ['XDG_RESOURCE_HOME']
Looking at the data home location by default it should be pointing to
our joe users home directory under .local
.
XDG['RESOURCE_HOME'].list.assert == ['~/.local']
XDG['RESOURCE_HOME'].to_a.assert == [$froot + 'home/joe/.local']
The working configuration directory
XDG['CONFIG_WORK'].environment.assert == ENV['XDG_CONFIG_WORK'].to_s
XDG['CONFIG_WORK'].environment_variables.assert == ['XDG_CONFIG_WORK']
Looking at the config work location, by default it should be pointing to
the current working directorys .config
or config
directory.
XDG['CONFIG_WORK'].list.assert == ['.config', 'config']
XDG['CONFIG_WORK'].to_a.assert == [Dir.pwd + '/.config', Dir.pwd + '/config']
The working cache directory
XDG['CACHE_WORK'].environment.assert == ENV['XDG_CACHE_WORK'].to_s
XDG['CACHE_WORK'].environment_variables.assert == ['XDG_CACHE_WORK']
Looking at the cache work location, by default it should be pointing to
the current working directorys .tmp
or tmp
directory.
XDG['CACHE_WORK'].list.assert == ['.tmp', 'tmp']
XDG['CACHE_WORK'].to_a.assert == [Dir.pwd + '/.tmp', Dir.pwd + '/tmp']
The base directory mixin is used to easy augment a class for access to a named subdirectory of the XDG directories.
class MyAppConfig
include XDG::BaseDir::Mixin
def subdirectory
'myapp'
end
end
c = MyAppConfig.new
c.config.home.to_a #=> [$froot + 'home/joe/.config/myapp']