Class: RubyCoded::Skills::Catalog

Inherits:
Object
  • Object
show all
Defined in:
lib/ruby_coded/skills/catalog.rb

Overview

Loads, validates, and caches project-local skill definitions.

Instance Method Summary collapse

Constructor Details

#initialize(project_root:) ⇒ Catalog

Returns a new instance of Catalog.



10
11
12
13
# File 'lib/ruby_coded/skills/catalog.rb', line 10

def initialize(project_root:)
  @project_root = project_root
  @last_reload_report = nil
end

Instance Method Details

#all_skillsObject



15
16
17
# File 'lib/ruby_coded/skills/catalog.rb', line 15

def all_skills
  valid_skills.sort_by { |skill| [-skill.priority, skill.name.downcase] }
end

#last_reload_reportObject



38
39
40
# File 'lib/ruby_coded/skills/catalog.rb', line 38

def last_reload_report
  @last_reload_report || default_reload_report
end

#relevant_skills_for(mode:, input: nil) ⇒ Object



23
24
25
26
27
28
29
# File 'lib/ruby_coded/skills/catalog.rb', line 23

def relevant_skills_for(mode:, input: nil)
  mode_skills = skills_for_mode(mode)
  return mode_skills if input.to_s.strip.empty?

  matched = mode_skills.select { |skill| matches_input?(skill, input) }
  matched.empty? ? mode_skills : matched.sort_by { |skill| [-skill.priority, skill.name.downcase] }
end

#reload!Object



31
32
33
34
35
36
# File 'lib/ruby_coded/skills/catalog.rb', line 31

def reload!
  previous_names = cached_skill_names
  clear_cached_reports!
  current_names = valid_skills.map { |skill| skill.name.downcase }
  @last_reload_report = build_reload_report(previous_names, current_names)
end

#skills_for_mode(mode) ⇒ Object



19
20
21
# File 'lib/ruby_coded/skills/catalog.rb', line 19

def skills_for_mode(mode)
  all_skills.select { |skill| skill.applies_to_mode?(mode) }
end