XDG Standards for Ruby
Author |
Thomas Sawyer |
Copyright |
© 2011 Thomas Sawyer |
License |
Apache 2.0 |
Introduction
XDG provides an easy to use Ruby library for working with XDG standards.
Presently, it only supports the XDG Base Directory Standard.
If your program utilizes user or system-wide support files (e.g. configuration files), you owe it to yourself to checkout the XDG base directory standard.
You can learn more about the standard at: standards.freedesktop.org/basedir-spec/basedir-spec-latest.html
Resources
How to Use
For working with XDG base directories, XDG provides a very simple yet flexible interface, `XDG[]`. Let’s say you want to work with the $XDG_CONFIG_HOME directory. Simply use:
XDG['CONFIG_HOME']
This will give you access to a number of useful methods all tied into the user’s personal configuration directory. Some examples:
XDG['CONFIG_HOME'].glob(pattern) XDG['CONFIG_HOME'].select(pattern){ |path| ... } XDG['CONFIG_HOME'].find(pattern){ |path| ... }
The same holds true for the other base directories.
XDG['DATA_HOME'] XDG['DATA_DIRS'] XDG['CACHE_HOME'] XDG['CACHE_DIRS']
By leaving out the last qualifier, XDG will provide an interface that ties into both the `HOME` and `DIRS` paths.
XDG['DATA'] XDG['CONFIG'] XDG['CACHE']
If you know XDG these are pretty much self-explanatory. But see the YARD-based API documentation for further specifics.
Extended Functionality
The Ruby XDG module also provides extended functionality not part of the standard specification. These extensions are simply add-on functionality deemed useful, or implementations of proposals being discussed for a possible future version of the standard.
XDG['CONFIG_WORK'] XDG['CACHE_WORK']
See the API documentation to learn more. Note that the extended modules are subject to greater potential for change as they are still being refined.
Base Directory Mixin
XDG provides a convenient base directory mixin that can provide handy a interface to a classes.
class MyAppConfig include XDG::BaseDir::Mixin def subdirectory 'myapp' end end c = MyAppConfig.new c.config.home.to_s #=> '~/.config/myapp'
Legacy API
Version 2.0+ of library marks are major departure from the earlier “fluid” notations of previous versions. Where as one used to do:
XDG.data.home
With the new API one now does:
XDG['DATA_HOME']
This was done for a few reasons, but primarily because it reflects more closely Ruby’s interface to the environment variables themselves, e.g.
ENV['XDG_DATA_HOME']
If you prefer the older style, a compatibility layer is provided. You will need to load:
require 'xdg/base_dir/legacy'
However we STRONGLY RECOMMEND that you do not use the legacy API –use it only if you need to keep some old code working and don’t have time to update it at them moment. Sometime in the future the legacy API will be deprecated.
How to Install
Using RubyGems:
$ sudo gem install xdg
Installing the tarball requires Ruby Setup (see rubyworks.github.com/setup).
$ tar -xvzf xdg-0.5.2 $ cd xdg-0.5.2 $ sudo setup.rb all
Development
GitHub hosts our source code and issue ticket system.
To contribute to the project please fork the repository, ideally, create a new topic branch for your work, and submit a pull request.
Copyright & License
Copyright © 2008, 2011 Thomas Sawyer
Distributed under the terms of the Apache 2.0 license.
See APACHE2.txt file for details.