Class: DhanHQ::Skills::Registry
- Inherits:
-
Object
- Object
- DhanHQ::Skills::Registry
- Defined in:
- lib/DhanHQ/skills/registry.rb
Overview
Registry for skill definitions.
Maps skill names to their classes. Skills are registered explicitly or discovered via conventions.
Class Method Summary collapse
-
.call(name, args = {}) ⇒ Hash
Execute a skill by name with the given arguments.
-
.clear! ⇒ Object
Clear all registered skills (for testing).
-
.find(name) ⇒ Class
Find a skill by name.
-
.list ⇒ Array<Hash>
List all registered skills with metadata.
-
.load_builtins ⇒ Object
Load built-in skills from the builtin directory and register them.
-
.names ⇒ Array<String>
List all registered skill names.
-
.register(name, klass) ⇒ Object
Register a skill class by name.
Class Method Details
.call(name, args = {}) ⇒ Hash
Execute a skill by name with the given arguments.
44 45 46 |
# File 'lib/DhanHQ/skills/registry.rb', line 44 def call(name, args = {}) find(name).new.call(args) end |
.clear! ⇒ Object
Clear all registered skills (for testing).
71 72 73 |
# File 'lib/DhanHQ/skills/registry.rb', line 71 def clear! @skills = {} end |
.find(name) ⇒ Class
Find a skill by name.
35 36 37 |
# File 'lib/DhanHQ/skills/registry.rb', line 35 def find(name) skills.fetch(name.to_s) { raise KeyError, "Unknown skill: #{name}" } end |
.list ⇒ Array<Hash>
List all registered skills with metadata.
58 59 60 61 62 63 64 65 66 67 68 |
# File 'lib/DhanHQ/skills/registry.rb', line 58 def list skills.map do |name, klass| instance = klass.new { name: name, description: instance.description, params: instance.param_definitions, steps: klass.steps.map { |s| s[:name] } } end end |
.load_builtins ⇒ Object
Load built-in skills from the builtin directory and register them.
76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 |
# File 'lib/DhanHQ/skills/registry.rb', line 76 def load_builtins Dir[File.join(__dir__, "builtin", "*.rb")].each do |file| require file end # Auto-register any Builtin classes that inherit from Base DhanHQ::Skills::Builtin.constants.each do |const_name| klass = DhanHQ::Skills::Builtin.const_get(const_name) next unless klass.is_a?(Class) && klass < Base name = const_name.to_s .gsub(/([a-z])([A-Z])/, '\1_\2') .downcase register(name, klass) unless skills.key?(name) end end |
.names ⇒ Array<String>
List all registered skill names.
51 52 53 |
# File 'lib/DhanHQ/skills/registry.rb', line 51 def names skills.keys.sort end |
.register(name, klass) ⇒ Object
Register a skill class by name.
24 25 26 27 28 |
# File 'lib/DhanHQ/skills/registry.rb', line 24 def register(name, klass) raise ArgumentError, "Skill class must inherit from DhanHQ::Skills::Base" unless klass < Base skills[name.to_s] = klass end |