Class: RubynCode::CLI::Commands::CommandTemplate
- Inherits:
-
Object
- Object
- RubynCode::CLI::Commands::CommandTemplate
- Defined in:
- lib/rubyn_code/cli/commands/command_template.rb
Overview
Renders a user-defined slash-command body into a prompt, mirroring Claude Code’s command templating:
$ARGUMENTS → all args, space-joined
$1 .. $9 → positional args
!`shell cmd` → replaced with the command's (combined) output
Bash substitution runs the user’s own command file, so it carries the same trust as user hooks. Output is captured defensively and capped.
Constant Summary collapse
- BANG =
/!`([^`]+)`/- POSITIONAL =
/\$([1-9])/- MAX_BASH_OUTPUT =
16 * 1024
Instance Method Summary collapse
-
#initialize(body) ⇒ CommandTemplate
constructor
A new instance of CommandTemplate.
-
#render(args = []) ⇒ String
The rendered prompt.
Constructor Details
#initialize(body) ⇒ CommandTemplate
Returns a new instance of CommandTemplate.
22 23 24 |
# File 'lib/rubyn_code/cli/commands/command_template.rb', line 22 def initialize(body) @body = body.to_s end |
Instance Method Details
#render(args = []) ⇒ String
Returns the rendered prompt.
28 29 30 31 32 |
# File 'lib/rubyn_code/cli/commands/command_template.rb', line 28 def render(args = []) text = substitute_bash(@body) text = text.gsub('$ARGUMENTS', args.join(' ')) text.gsub(POSITIONAL) { args[Regexp.last_match(1).to_i - 1].to_s } end |