Class: Ace::Bundle::Atoms::PresetValidator

Inherits:
Object
  • Object
show all
Defined in:
lib/ace/bundle/atoms/preset_validator.rb

Overview

Validates preset references and detects circular dependencies

Constant Summary collapse

MAX_DEPTH =

Maximum recursion depth for preset composition

10

Class Method Summary collapse

Class Method Details

.check_circular_dependency(preset_name, preset_chain) ⇒ Object

Detect circular dependencies in preset composition Returns { success: true } if no circular dependency Returns { success: false, error: “…” } if circular dependency found



18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/ace/bundle/atoms/preset_validator.rb', line 18

def self.check_circular_dependency(preset_name, preset_chain)
  if preset_chain.include?(preset_name)
    {
      success: false,
      error: "Circular dependency detected: #{(preset_chain + [preset_name]).join(" -> ")}"
    }
  elsif preset_chain.size >= MAX_DEPTH
    {
      success: false,
      error: "Maximum preset nesting depth (#{MAX_DEPTH}) exceeded: #{preset_chain.join(" -> ")}"
    }
  else
    {success: true}
  end
end

.extract_preset_references(preset_data) ⇒ Object

Extract preset references from a preset’s configuration Returns array of preset names referenced in the ‘presets:’ key



57
58
59
60
61
62
63
64
65
# File 'lib/ace/bundle/atoms/preset_validator.rb', line 57

def self.extract_preset_references(preset_data)
  return [] unless preset_data

  bundle_config = preset_data[:bundle] || preset_data["bundle"] || {}
  presets = bundle_config["presets"] || bundle_config[:presets] || []

  # Ensure we return an array of strings
  Array(presets).map(&:to_s)
end

.preset_exists?(preset_name, preset_manager) ⇒ Boolean

Check if a preset exists in the preset manager

Returns:

  • (Boolean)


11
12
13
# File 'lib/ace/bundle/atoms/preset_validator.rb', line 11

def self.preset_exists?(preset_name, preset_manager)
  preset_manager.preset_exists?(preset_name)
end

.validate_presets(preset_names, preset_manager) ⇒ Object

Validate a list of preset names Returns { success: true, valid: [], missing: [] }



36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/ace/bundle/atoms/preset_validator.rb', line 36

def self.validate_presets(preset_names, preset_manager)
  valid = []
  missing = []

  preset_names.each do |name|
    if preset_exists?(name, preset_manager)
      valid << name
    else
      missing << name
    end
  end

  {
    success: missing.empty?,
    valid: valid,
    missing: missing
  }
end