Class: Ace::Lint::Atoms::ValidatorRegistry
- Inherits:
-
Object
- Object
- Ace::Lint::Atoms::ValidatorRegistry
- Defined in:
- lib/ace/lint/atoms/validator_registry.rb
Overview
Registry mapping validator names to runner classes Provides lookup and availability checking for validators
Constant Summary collapse
- VALIDATORS =
Map of validator name (symbol) to runner class
{ standardrb: "Ace::Lint::Atoms::StandardrbRunner", rubocop: "Ace::Lint::Atoms::RuboCopRunner" }.freeze
- ALIASES =
Aliases for common variations
{ standard: :standardrb, "standard-rb": :standardrb, rubocop_runner: :rubocop }.freeze
Class Method Summary collapse
-
.available?(name) ⇒ Boolean
Check if a validator is available (installed and runnable) Results are cached to avoid repeated subprocess calls.
-
.available_validators ⇒ Array<Symbol>
Get list of all available validators (installed and runnable).
-
.canonical_name(name) ⇒ Symbol?
Resolve canonical name from input (handles aliases).
-
.registered?(name) ⇒ Boolean
Check if a validator is registered.
-
.registered_validators ⇒ Array<Symbol>
Get list of all registered validator names.
-
.reset_all_caches! ⇒ void
Reset all caches across the validator system Call this at CLI entry point to ensure fresh availability checks.
-
.reset_cache! ⇒ void
Reset availability cache (for testing).
-
.runner_for(name) ⇒ Class?
Get runner class for a validator name.
Class Method Details
.available?(name) ⇒ Boolean
Check if a validator is available (installed and runnable) Results are cached to avoid repeated subprocess calls
49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/ace/lint/atoms/validator_registry.rb', line 49 def self.available?(name) @availability_cache ||= {} canonical = canonical_name(name) return false unless canonical return @availability_cache[canonical] if @availability_cache.key?(canonical) runner = runner_for(canonical) result = runner&.respond_to?(:available?) && runner.available? @availability_cache[canonical] = result end |
.available_validators ⇒ Array<Symbol>
Get list of all available validators (installed and runnable)
69 70 71 |
# File 'lib/ace/lint/atoms/validator_registry.rb', line 69 def self.available_validators VALIDATORS.keys.select { |name| available?(name) } end |
.canonical_name(name) ⇒ Symbol?
Resolve canonical name from input (handles aliases)
76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 |
# File 'lib/ace/lint/atoms/validator_registry.rb', line 76 def self.canonical_name(name) return nil if name.nil? sym = name.to_s.downcase.tr("-", "_").to_sym # Check direct match return sym if VALIDATORS.key?(sym) # Check aliases aliased = ALIASES[sym] return aliased if aliased && VALIDATORS.key?(aliased) # Check string key aliases str_sym = name.to_s.downcase.tr("_", "-").to_sym aliased = ALIASES[str_sym] return aliased if aliased && VALIDATORS.key?(aliased) nil end |
.registered?(name) ⇒ Boolean
Check if a validator is registered
41 42 43 |
# File 'lib/ace/lint/atoms/validator_registry.rb', line 41 def self.registered?(name) canonical_name(name) != nil end |
.registered_validators ⇒ Array<Symbol>
Get list of all registered validator names
63 64 65 |
# File 'lib/ace/lint/atoms/validator_registry.rb', line 63 def self.registered_validators VALIDATORS.keys end |
.reset_all_caches! ⇒ void
This method returns an undefined value.
Reset all caches across the validator system Call this at CLI entry point to ensure fresh availability checks
105 106 107 108 109 |
# File 'lib/ace/lint/atoms/validator_registry.rb', line 105 def self.reset_all_caches! reset_cache! StandardrbRunner.reset_availability_cache! RuboCopRunner.reset_availability_cache! end |
.reset_cache! ⇒ void
This method returns an undefined value.
Reset availability cache (for testing)
98 99 100 |
# File 'lib/ace/lint/atoms/validator_registry.rb', line 98 def self.reset_cache! @availability_cache = {} end |
.runner_for(name) ⇒ Class?
Get runner class for a validator name
25 26 27 28 29 30 31 32 33 34 35 36 |
# File 'lib/ace/lint/atoms/validator_registry.rb', line 25 def self.runner_for(name) canonical = canonical_name(name) return nil unless canonical class_name = VALIDATORS[canonical] return nil unless class_name # Resolve class from string class_name.split("::").reduce(Object) { |mod, part| mod.const_get(part) } rescue NameError nil end |