XDG
Base Directory Standard¶ ↑
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.
Data Paths¶ ↑
Home¶ ↑
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']
Dirs¶ ↑
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']
Combined¶ ↑
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']
Config Paths¶ ↑
Home¶ ↑
XDG['CONFIG_HOME'].environment.assert == ENV['XDG_CONFIG_HOME'].to_s XDG['CONFIG_HOME'].to_a.assert == [$froot + 'home/joe/.config']
Dirs¶ ↑
XDG['CONFIG_DIRS'].environment.assert == ENV['XDG_CONFIG_DIRS'].to_s XDG['CONFIG_DIRS'].to_a.assert == [$froot + 'etc/xdg', $froot + 'etc']
Combined¶ ↑
XDG['CONFIG'].to_a.assert == [$froot + 'home/joe/.config', $froot + 'etc/xdg', $froot + 'etc']
Cache Paths¶ ↑
Home¶ ↑
XDG['CACHE_HOME'].environment.assert == ENV['XDG_CACHE_HOME'].to_s XDG['CACHE_HOME'].to_a.assert == [$froot + 'home/joe/.cache']
Dirs¶ ↑
XDG['CACHE_DIRS'].environment.assert == ENV['XDG_CACHE_DIRS'].to_s XDG['CACHE_DIRS'].to_a.assert == [$froot + 'tmp']
Combined¶ ↑
XDG['CACHE'].to_a.assert == [$froot + 'home/joe/.cache', $froot + 'tmp']
Extended Base Directory Standard¶ ↑
The extended base directory standard provides additional locations not apart the offical standard. These are somewhat experimental.
Resource¶ ↑
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']
Work¶ ↑
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']
Base Directory Mixin¶ ↑
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']