All Files
(
100.0%
covered at
9.96
hits/line
)
10 files in total.
159 relevant lines,
159 lines covered and
0 lines missed.
(
100.0%
)
10 total branches,
10 branches covered and
0 branches missed.
(
100.0%
)
-
# frozen_string_literal: true
-
-
1
require "xdg/cache"
-
1
require "xdg/config"
-
1
require "xdg/data"
-
1
require "xdg/environment"
-
1
require "xdg/pair"
-
1
require "xdg/paths/combined"
-
1
require "xdg/paths/directory"
-
1
require "xdg/paths/home"
-
1
require "xdg/state"
-
-
# Main namespace.
-
1
module XDG
-
1
DELIMITER = "="
-
-
1
def self.new = Environment.new
-
end
-
# frozen_string_literal: true
-
-
1
require "forwardable"
-
1
require "xdg/pair"
-
-
1
module XDG
-
# Provides cache support.
-
1
class Cache
-
1
extend Forwardable
-
-
1
HOME_PAIR = Pair["XDG_CACHE_HOME", ".cache"].freeze
-
-
1
delegate %i[home directories all to_s to_str] => :combined
-
-
1
def initialize home: Paths::Home, directories: Paths::Directory, environment: ENV
-
18
@combined = Paths::Combined.new home.new(HOME_PAIR, environment),
-
directories.new(Pair.new, environment)
-
18
freeze
-
end
-
-
1
def inspect = "#<#{self.class}:#{object_id} #{self}>"
-
-
1
private
-
-
1
attr_reader :combined
-
end
-
end
-
# frozen_string_literal: true
-
-
1
require "forwardable"
-
1
require "xdg/pair"
-
-
1
module XDG
-
# Provides configuration support.
-
1
class Config
-
1
extend Forwardable
-
-
1
HOME_PAIR = Pair["XDG_CONFIG_HOME", ".config"].freeze
-
1
DIRS_PAIR = Pair["XDG_CONFIG_DIRS", "/etc/xdg"].freeze
-
-
1
delegate %i[home directories all to_s to_str] => :combined
-
-
1
def initialize home: Paths::Home, directories: Paths::Directory, environment: ENV
-
18
@combined = Paths::Combined.new home.new(HOME_PAIR, environment),
-
directories.new(DIRS_PAIR, environment)
-
18
freeze
-
end
-
-
1
def inspect = "#<#{self.class}:#{object_id} #{self}>"
-
-
1
private
-
-
1
attr_reader :combined
-
end
-
end
-
# frozen_string_literal: true
-
-
1
require "forwardable"
-
1
require "xdg/pair"
-
-
1
module XDG
-
# Provides data support.
-
1
class Data
-
1
extend Forwardable
-
-
1
HOME_PAIR = Pair["XDG_DATA_HOME", ".local/share"].freeze
-
1
DIRS_PAIR = Pair["XDG_DATA_DIRS", "/usr/local/share:/usr/share"].freeze
-
-
1
delegate %i[home directories all to_s to_str] => :combined
-
-
1
def initialize home: Paths::Home, directories: Paths::Directory, environment: ENV
-
18
@combined = Paths::Combined.new home.new(HOME_PAIR, environment),
-
directories.new(DIRS_PAIR, environment)
-
18
freeze
-
end
-
-
1
def inspect = "#<#{self.class}:#{object_id} #{self}>"
-
-
1
private
-
-
1
attr_reader :combined
-
end
-
end
-
# frozen_string_literal: true
-
-
1
module XDG
-
# A convenience wrapper to all XDG functionality.
-
1
class Environment
-
1
def initialize home: Paths::Home, directories: Paths::Directory, environment: ENV
-
11
@cache = Cache.new(home:, directories:, environment:)
-
11
@config = Config.new(home:, directories:, environment:)
-
11
@data = Data.new(home:, directories:, environment:)
-
11
@state = State.new(home:, directories:, environment:)
-
11
freeze
-
end
-
-
1
def cache_home = cache.home
-
-
1
def config_home = config.home
-
-
1
def config_dirs = config.directories
-
-
1
def data_home = data.home
-
-
1
def data_dirs = data.directories
-
-
1
def state_home = state.home
-
-
1
def to_s = "#{cache} #{config} #{data} #{state}"
-
-
1
alias to_str to_s
-
-
1
def inspect = "#<#{self.class}:#{object_id} #{self}>"
-
-
1
private
-
-
1
attr_reader :cache, :config, :data, :state
-
end
-
end
-
# frozen_string_literal: true
-
-
1
module XDG
-
# A generic key-value pair (KVP).
-
1
Pair = Data.define :key, :value do
-
1
def initialize key: nil, value: nil
-
152
super
-
end
-
-
1
def key? = key.to_s.size.positive?
-
-
1
def value? = value.to_s.size.positive?
-
-
5
def empty? = !(key? && value?)
-
-
1
def to_env = {key => value}
-
-
9
then: 6
else: 2
def to_s = key? || value? ? "#{key}#{DELIMITER}#{value}" : ""
-
-
1
alias_method :to_str, :to_s
-
-
1
def inspect
-
4
type = self.class
-
4
then: 3
else: 1
key? || value? ? "#<data #{type} #{key}#{DELIMITER}#{value}>" : "#<data #{type}>"
-
end
-
end
-
end
-
# frozen_string_literal: true
-
-
1
require "pathname"
-
-
1
module XDG
-
1
module Paths
-
# The combined home and directory paths.
-
1
class Combined
-
1
def initialize initial_home, initial_directories
-
83
@initial_home = initial_home
-
83
@initial_directories = initial_directories
-
83
freeze
-
end
-
-
1
def home = initial_home.dynamic
-
-
1
def directories = initial_directories.dynamic
-
-
1
def all = directories.prepend(*home)
-
-
1
def to_s = [initial_home.to_s, initial_directories.to_s].reject(&:empty?).join " "
-
-
1
alias to_str to_s
-
-
1
def inspect = "#<#{self.class}:#{object_id} #{self}>"
-
-
1
private
-
-
1
attr_reader :initial_home, :initial_directories
-
end
-
end
-
end
-
# frozen_string_literal: true
-
-
1
require "pathname"
-
-
1
module XDG
-
1
module Paths
-
# A collection of XDG directories.
-
1
class Directory
-
1
DELIMITER = ":"
-
-
1
def initialize pair, environment = ENV
-
101
@pair = pair
-
101
@environment = environment
-
101
freeze
-
end
-
-
6
def default = value.split(DELIMITER).map { |path| expand path }
-
-
1
def dynamic
-
114
then: 45
else: 12
String(environment[key]).then { |env_value| env_value.empty? ? value : env_value }
-
.split(DELIMITER)
-
.uniq
-
58
.map { |path| expand path }
-
end
-
-
1
def to_s = [key, dynamic.join(DELIMITER)].reject(&:empty?).join XDG::DELIMITER
-
-
1
alias to_str to_s
-
-
1
def inspect
-
2
pairs = to_s
-
2
type = self.class
-
-
2
then: 1
else: 1
pairs.empty? ? "#<#{type}:#{object_id}>" : "#<#{type}:#{object_id} #{self}>"
-
end
-
-
1
private
-
-
1
attr_reader :pair, :environment
-
-
1
def key = String pair.key
-
-
1
def value = String pair.value
-
-
1
def expand(path) = Pathname(path).expand_path
-
end
-
end
-
end
-
# frozen_string_literal: true
-
-
1
require "forwardable"
-
1
require "pathname"
-
-
1
module XDG
-
1
module Paths
-
# A XDG home path.
-
1
class Home
-
1
extend Forwardable
-
-
1
KEY = "HOME"
-
-
1
delegate %i[key value] => :pair
-
-
1
def initialize pair, environment = ENV
-
98
@pair = pair
-
98
@environment = environment
-
98
freeze
-
end
-
-
1
def default = expand String(value)
-
-
55
then: 31
else: 23
def dynamic = String(environment[key]).then { |path| path.empty? ? default : expand(path) }
-
-
1
def to_s = [pair.key, dynamic].compact.join XDG::DELIMITER
-
-
1
alias to_str to_s
-
-
1
def inspect = "#<#{self.class}:#{object_id} #{self}>"
-
-
1
private
-
-
1
attr_reader :pair, :environment
-
-
1
def expand(path) = home.join(path).expand_path
-
-
1
def home = Pathname environment.fetch(KEY)
-
end
-
end
-
end
-
# frozen_string_literal: true
-
-
1
require "forwardable"
-
1
require "xdg/pair"
-
-
1
module XDG
-
# Provides state support.
-
1
class State
-
1
extend Forwardable
-
-
1
HOME_PAIR = Pair["XDG_STATE_HOME", ".local/state"].freeze
-
-
1
delegate %i[home directories all to_s to_str] => :combined
-
-
1
def initialize home: Paths::Home, directories: Paths::Directory, environment: ENV
-
18
@combined = Paths::Combined.new home.new(HOME_PAIR, environment),
-
directories.new(Pair.new, environment)
-
18
freeze
-
end
-
-
1
def inspect = "#<#{self.class}:#{object_id} #{self}>"
-
-
1
private
-
-
1
attr_reader :combined
-
end
-
end