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']