Module: Ace::Assign::Atoms::PresetLoader

Defined in:
lib/ace/assign/atoms/preset_loader.rb

Overview

Loads assign presets from project overrides first, then gem defaults.

Constant Summary collapse

VALID_PRESET_NAME =
/\A[A-Za-z0-9_-]+\z/.freeze

Class Method Summary collapse

Class Method Details

.load(preset_name) ⇒ Object



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/ace/assign/atoms/preset_loader.rb', line 12

def self.load(preset_name)
  name = preset_name.to_s.strip
  raise Ace::Support::Cli::Error, "Preset name cannot be empty" if name.empty?
  unless VALID_PRESET_NAME.match?(name)
    raise Ace::Support::Cli::Error,
      "Invalid preset name '#{name}'. Allowed characters: letters, numbers, underscore, hyphen."
  end

  path = resolve_path(name)
  raise Ace::Support::Cli::Error, "Preset '#{name}' not found" unless path

  data = YAML.safe_load_file(path, aliases: true)
  unless data.is_a?(Hash)
    raise Ace::Support::Cli::Error, "Preset '#{name}' is invalid"
  end

  data
rescue Psych::SyntaxError => e
  raise Ace::Support::Cli::Error, "Invalid YAML in preset '#{name}': #{e.message}"
end