Class: DhanHQ::Skills::Base
- Inherits:
-
Object
- Object
- DhanHQ::Skills::Base
- Defined in:
- lib/DhanHQ/skills/base.rb
Overview
Base class for all trading skills.
Provides a DSL for defining parameters, steps, and execution logic. Skills are stateless — context is passed through and returned.
Direct Known Subclasses
DhanHQ::Skills::Builtin::BuyAtmCall, DhanHQ::Skills::Builtin::IronCondor, DhanHQ::Skills::Builtin::SquareOffAll, DhanHQ::Skills::Builtin::SquareOffPosition, DhanHQ::Skills::Builtin::Strangle
Class Method Summary collapse
-
.param(name, type: :string, required: false, default: nil, description: nil) ⇒ Object
Define a parameter for this skill.
-
.params ⇒ Object
Accessor for defined parameters.
-
.step(name, priority: 10) ⇒ Object
Define a step in the skill execution sequence.
-
.steps ⇒ Object
Accessor for defined steps.
-
.validate_params!(args) ⇒ Object
Validate that all required parameters are present.
Instance Method Summary collapse
-
#call(args = {}) ⇒ Hash
Execute the skill with the given arguments.
-
#description ⇒ Object
Skill description (override in subclasses).
-
#name ⇒ Object
Skill name (defaults to class name).
-
#param_definitions ⇒ Object
List of parameter definitions for this skill.
Class Method Details
.param(name, type: :string, required: false, default: nil, description: nil) ⇒ Object
Define a parameter for this skill.
44 45 46 47 |
# File 'lib/DhanHQ/skills/base.rb', line 44 def param(name, type: :string, required: false, default: nil, description: nil) @params ||= {} @params[name] = { type: type, required: required, default: default, description: description } end |
.params ⇒ Object
Accessor for defined parameters.
60 61 62 |
# File 'lib/DhanHQ/skills/base.rb', line 60 def params @params || {} end |
.step(name, priority: 10) ⇒ Object
Define a step in the skill execution sequence.
53 54 55 56 57 |
# File 'lib/DhanHQ/skills/base.rb', line 53 def step(name, priority: 10) @steps ||= [] @steps << { name: name, priority: priority } @steps.sort_by! { |s| s[:priority] } end |
.steps ⇒ Object
Accessor for defined steps.
65 66 67 |
# File 'lib/DhanHQ/skills/base.rb', line 65 def steps @steps || [] end |
.validate_params!(args) ⇒ Object
Validate that all required parameters are present.
73 74 75 76 77 78 79 80 81 82 |
# File 'lib/DhanHQ/skills/base.rb', line 73 def validate_params!(args) params.each do |name, config| next unless config[:required] value = args[name] || args[name.to_s] next unless value.nil? raise ArgumentError, "Missing required parameter: #{name}" end end |
Instance Method Details
#call(args = {}) ⇒ Hash
Execute the skill with the given arguments.
90 91 92 93 94 95 96 97 98 99 100 |
# File 'lib/DhanHQ/skills/base.rb', line 90 def call(args = {}) ctx = build_context(args) self.class.validate_params!(ctx) self.class.steps.each do |step| result = send(step[:name], ctx) ctx = result if result.is_a?(Hash) end ctx end |
#description ⇒ Object
Skill description (override in subclasses).
108 109 110 |
# File 'lib/DhanHQ/skills/base.rb', line 108 def description self.class.to_s end |
#name ⇒ Object
Skill name (defaults to class name).
103 104 105 |
# File 'lib/DhanHQ/skills/base.rb', line 103 def name self.class.name || self.class.to_s end |
#param_definitions ⇒ Object
List of parameter definitions for this skill.
113 114 115 |
# File 'lib/DhanHQ/skills/base.rb', line 113 def param_definitions self.class.params end |