Class: Ace::Task::Molecules::TaskConfigLoader

Inherits:
Object
  • Object
show all
Defined in:
lib/ace/task/molecules/task_config_loader.rb

Overview

Loads and merges configuration for ace-task from the cascade: .ace-defaults/task/config.yml (gem) -> ~/.ace/task/config.yml (user) -> .ace/task/config.yml (project)

Constant Summary collapse

DEFAULT_ROOT_DIR =
".ace-tasks"

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(gem_root:) ⇒ TaskConfigLoader

Returns a new instance of TaskConfigLoader.



22
23
24
# File 'lib/ace/task/molecules/task_config_loader.rb', line 22

def initialize(gem_root:)
  @gem_root = gem_root
end

Class Method Details

.load(gem_root: nil) ⇒ Hash

Load configuration with cascade merge

Parameters:

  • gem_root (String) (defaults to: nil)

    Path to the ace-task gem root

Returns:

  • (Hash)

    Merged configuration



17
18
19
20
# File 'lib/ace/task/molecules/task_config_loader.rb', line 17

def self.load(gem_root: nil)
  gem_root ||= File.expand_path("../../../..", __dir__)
  new(gem_root: gem_root).load
end

.root_dir(config = nil) ⇒ String

Get the root directory for tasks

Parameters:

  • config (Hash) (defaults to: nil)

    Configuration hash

Returns:

  • (String)

    Absolute path to tasks root directory



37
38
39
40
41
42
43
44
45
46
# File 'lib/ace/task/molecules/task_config_loader.rb', line 37

def self.root_dir(config = nil)
  config ||= load
  dir = config.dig("task", "root_dir") || DEFAULT_ROOT_DIR

  if dir.start_with?("/")
    dir
  else
    File.join(Ace::Support::Fs::Molecules::ProjectRootFinder.find_or_current, dir)
  end
end

Instance Method Details

#loadHash

Load and merge configuration

Returns:

  • (Hash)

    Merged configuration



28
29
30
31
32
# File 'lib/ace/task/molecules/task_config_loader.rb', line 28

def load
  config = load_defaults
  config = deep_merge(config, load_user_config)
  deep_merge(config, load_project_config)
end