class Pirka::Config

Constants

CONFIG_DIRS
CONFIG_FILE
FILE_NAME
XDG_CONFIG_DIRS
XDG_CONFIG_HOME

Attributes

additional_directories[RW]
config_home[RW]
additional_directories[RW]
data_home[RW]
library_repositories[RW]

Public Class Methods

config_directory(user = nil) click to toggle source
# File lib/pirka/config.rb, line 29
def config_directory(user = nil)
  directories.first
end
directories(user = nil) click to toggle source
# File lib/pirka/config.rb, line 19
def directories(user = nil)
  config_dirs = ENV["XDG_CONFIG_DIRS"] ?
                  ENX["XDG_CONFIG_DIR"].split(":").collect {|dir| Pathname.new(dir)} :
                  CONFIG_DIRS
  config_home = ENV["XDG_CONFIG_HOME"] ?
                  Pathname.new(ENV["XDG_CONFIG_HOME"]) :
                  Pathname.new(Dir.home(user))/XDG_CONFIG_HOME
  ([@config_home, config_home] + @additional_directories + config_dirs).compact
end
filepath() click to toggle source
# File lib/pirka/config.rb, line 57
def filepath
  config_directory/FILE_NAME
end
load_file(path) click to toggle source
# File lib/pirka/config.rb, line 33
def load_file(path)
  load_hash(
    YAML.load_file(path).each_with_object({}) {|(key, value), h|
      h[key] = case key
               when "data_home"
                 Pathname(value)
               when "additional_directories"
                 value.collect {|val| Pathname(val)}
               when "library_repositories"
                 value.collect {|val| URI(val)}
               else
                 value
               end
    })
end
load_hash(h) click to toggle source
# File lib/pirka/config.rb, line 49
def load_hash(h)
  config = new
  %w[data_home additional_directories library_repositories].each do |attr|
    config.__send__("#{attr}=", h[attr]) if h[attr]
  end
  config
end
new() click to toggle source

@todo Consider login user

# File lib/pirka/config.rb, line 65
def initialize
  @data_home = nil
  @additional_directories = []
  @library_repositories = []
end

Public Instance Methods

config_directory(user = nil) click to toggle source
# File lib/pirka/config.rb, line 81
def config_directory(user = nil)
  self.class.config_directory(user)
end
dirname_from_repository(repository_uri) click to toggle source

@todo Consider URIs other than Git HTTPS URI

# File lib/pirka/config.rb, line 77
def dirname_from_repository(repository_uri)
  repository_uri.host/repository_uri.path[1..-1].sub_ext("")
end
filepath() click to toggle source
# File lib/pirka/config.rb, line 85
def filepath
  self.class.filepath
end
path_from_repository(repository_uri) click to toggle source

@todo Consider login user

# File lib/pirka/config.rb, line 72
def path_from_repository(repository_uri)
  Library.data_directory/dirname_from_repository(repository_uri)
end
save(path = nil) click to toggle source
# File lib/pirka/config.rb, line 89
def save(path = nil)
  path = Pathname(path || filepath)
  path.dirname.mkpath unless path.dirname.directory?
  path.write to_yaml
  path
end
to_h() click to toggle source
# File lib/pirka/config.rb, line 96
def to_h
  h = {}
  h["data_home"] = @data_home.to_path if @data_home
  %w[additional_directories library_repositories].each do |key|
    value = __send__(key)
    h[key] = value.collect(&:to_s) unless value.empty?
  end
  h
end
to_yaml() click to toggle source
# File lib/pirka/config.rb, line 106
def to_yaml
  to_h.to_yaml
end