Class: Utils::ConfigDir

Inherits:
Object show all
Defined in:
lib/utils/config_dir.rb

Overview

A configuration directory manager that handles path resolution and file operations within a specified directory structure.

This class provides functionality for managing configuration directories by deriving paths based on a root directory and name, and offering methods to read files with optional default values and block handling. It supports environment variable-based root path resolution and uses Pathname for robust path manipulation.

Examples:

config_dir = Utils::ConfigDir.new('myapp')
config_dir.to_s # => returns the string representation of the configuration directory path
config_dir.join('config.txt') # => returns a Pathname object for the joined path
config_dir.read('settings.rb') # => reads and returns the content of 'settings.rb' or nil if not found
config_dir.read('missing.txt', default: 'default content') # => returns 'default content' if file is missing

Instance Method Summary collapse

Constructor Details

#initialize(name, root_path: nil, env_var: nil) ⇒ ConfigDir

Memoizes the foobar method’s return value and returns the result of the computation. Initializes a new ConfigDir instance with the specified name and optional root path or environment variable.

Parameters:

  • name (String)

    the name of the directory to be used

  • root_path (String, nil) (defaults to: nil)

    the root path to use; if nil, the default root path is used

  • env_var (String, nil) (defaults to: nil)

    the name of the environment variable to check for the root path



29
30
31
32
# File 'lib/utils/config_dir.rb', line 29

def initialize(name, root_path: nil, env_var: nil)
  root_path ||= env_var_path(env_var)
  @directory_path = derive_directory_path(name, root_path)
end

Instance Method Details

#join(path) ⇒ Pathname Also known as: +

Joins the directory path with the given path and returns the combined result.

Parameters:

  • path (String)

    the path to be joined with the directory path

Returns:

  • (Pathname)

    the combined path as a Pathname object



61
62
63
# File 'lib/utils/config_dir.rb', line 61

def join(path)
  @directory_path + path
end

#read(path, default: nil) {|io| ... } ⇒ String?

Reads the content of a file at the given path within the configuration directory.

If the file exists, it returns the file’s content as a string encoded in UTF-8. If a block is given and the file exists, it opens the file and yields to the block. If the file does not exist and a default value is provided, it returns the default. If a block is given and the file does not exist, it yields a StringIO object containing the default value to the block.

directory does not exist

the file does not exist

Parameters:

  • path (String)

    the path to the file relative to the configuration

  • default (String, nil) (defaults to: nil)

    the default value to return if the file

Yields:

  • (io)

Returns:

  • (String, nil)

    the content of the file or the default value if



86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
# File 'lib/utils/config_dir.rb', line 86

def read(path, default: nil, &block)
  full_path = join(path)
  if File.exist?(full_path)
    if block
      File.new(full_path, &block)
    else
      File.read(full_path, encoding: 'UTF-8')
    end
  else
    if default && block
      block.(StringIO.new(default))
    else
      default
    end
  end
end

#to_sString

Returns the string representation of the configuration directory path.

Returns:

  • (String)

    the path of the configuration directory as a string



51
52
53
# File 'lib/utils/config_dir.rb', line 51

def to_s
  @directory_path.to_s
end