class UserSpace
Requires:
`ruby`
Constants
- VERSION
- XDG
Attributes
appdir[R]
appname[R]
cfg[R]
ext[R]
parser[R]
xdgbases[R]
Public Class Methods
appdir(lib='/lib')
click to toggle source
# File lib/user_space.rb, line 13 def self.appdir(lib='/lib') (_ = caller(1..2)[-1]&.split(':',2)&.fetch(0)) and File.dirname(File.dirname(File.expand_path(_)))&.chomp(lib) end
new( parser:, appdir: UserSpace.appdir, ext: parser.to_s.downcase, appname: File.basename($0), xdgbases: ['cache', 'config', 'data'], config: 'config')
click to toggle source
# File lib/user_space.rb, line 18 def initialize( parser:, appdir: UserSpace.appdir, ext: parser.to_s.downcase, appname: File.basename($0), xdgbases: ['cache', 'config', 'data'], config: 'config') @parser,@ext,@appname,@xdgbases,@appdir,@cfg = parser,ext,appname,xdgbases,appdir,config install end
Public Instance Methods
cachedir()
click to toggle source
# File lib/user_space.rb, line 65 def cachedir File.join XDG['cache'], @appname end
config()
click to toggle source
Reads config
# File lib/user_space.rb, line 86 def config @parser.load File.read(config_file_name) rescue $stderr.puts $!.message if $VERBOSE $stderr.puts $!.backtrace if $DEBUG nil end
config=(obj)
click to toggle source
Saves config
# File lib/user_space.rb, line 95 def config=(obj) dump = (@parser.respond_to?(:pretty_generate))? @parser.pretty_generate(obj) : @parser.dump(obj) File.open(config_file_name, 'w', 0600){|fh|fh.puts dump} end
config?()
click to toggle source
# File lib/user_space.rb, line 81 def config? File.exist?(config_file_name) end
config_file_name()
click to toggle source
# File lib/user_space.rb, line 77 def config_file_name File.join XDG['config'], @appname, "#{@cfg}.#{@ext}" end
configdir()
click to toggle source
# File lib/user_space.rb, line 69 def configdir File.join XDG['config'], @appname end
configures(hash)
click to toggle source
# File lib/user_space.rb, line 100 def configures(hash) if config? # file exists hash.merge! config else $stderr.puts config_file_name if $VERBOSE self.config = hash end end
datadir()
click to toggle source
# File lib/user_space.rb, line 73 def datadir File.join XDG['data'], @appname end
install()
click to toggle source
Will not overwrite anything. Only copies over missing directories and files. Verifies directory expectations.
# File lib/user_space.rb, line 38 def install xdg_pairs do |basedir, userdir| if File.exist?(userdir) # Sanity check assert_directory(userdir) else Dir.mkdir(userdir, 0700) end if File.directory? basedir Dir.glob("#{basedir}/**/*").each do |src| dest = src.sub(basedir, userdir) if File.exist? dest # Sanity checks assert_directory(dest) if File.directory? src else if File.directory? src Dir.mkdir dest else FileUtils.cp src, dest end FileUtils.chmod('u+rwX,go-rwx', dest) end end end end end
xdg_pairs() { |join, join(XDG, appname)| ... }
click to toggle source
# File lib/user_space.rb, line 28 def xdg_pairs @xdgbases.each do |base| # yield basedir, userdir yield File.join(@appdir, base), File.join(XDG[base], @appname) end end
Private Instance Methods
assert_directory(dir)
click to toggle source
# File lib/user_space.rb, line 111 def assert_directory(dir) raise "Not a directory: #{dir}" unless File.directory?(dir) end