Class: Deploio::CompletionGenerator

Inherits:
Object
  • Object
show all
Defined in:
lib/deploio/completion_generator.rb

Overview

Generates zsh completion script from Thor command metadata. Can be reused with any Thor-based CLI by passing the CLI class.

Examples:

Basic usage

CompletionGenerator.new(MyCLI).generate

With custom option completers

CompletionGenerator.new(MyCLI, option_completers: {
  'env' => 'environment:(production staging development)'
}).generate

Constant Summary collapse

TEMPLATE_PATH =
File.expand_path("templates/completion.zsh.erb", __dir__)
PASSTHROUGH_COMMANDS =

Commands that pass through to external programs (like exec) These get '*:command:_normal' as their final argument

%w[exec run].freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(cli_class = nil, option_completers: {}, positional_completers: {}, program_name: nil) ⇒ CompletionGenerator

Returns a new instance of CompletionGenerator.

Parameters:

  • cli_class (Class) (defaults to: nil)

    Thor CLI class to generate completions for

  • option_completers (Hash) (defaults to: {})

    Custom completers for specific options e.g., { 'app' => 'app:_myapp_apps_list' }

  • positional_completers (Hash) (defaults to: {})

    Custom completers for positional args e.g., { 'orgs:set' => "'1:organization:_myapp_orgs_list'" }

  • program_name (String) (defaults to: nil)

    Override the program name (default: derived from CLI class)



32
33
34
35
36
37
# File 'lib/deploio/completion_generator.rb', line 32

def initialize(cli_class = nil, option_completers: {}, positional_completers: {}, program_name: nil)
  @cli_class = cli_class || default_cli_class
  @program_name = program_name || derive_program_name
  @option_completers = default_option_completers.merge(option_completers)
  @positional_completers = default_positional_completers.merge(positional_completers)
end

Instance Attribute Details

#cli_classObject (readonly)

Returns the value of attribute cli_class.



24
25
26
# File 'lib/deploio/completion_generator.rb', line 24

def cli_class
  @cli_class
end

#option_completersObject (readonly)

Returns the value of attribute option_completers.



24
25
26
# File 'lib/deploio/completion_generator.rb', line 24

def option_completers
  @option_completers
end

#positional_completersObject (readonly)

Returns the value of attribute positional_completers.



24
25
26
# File 'lib/deploio/completion_generator.rb', line 24

def positional_completers
  @positional_completers
end

#program_nameObject (readonly)

Returns the value of attribute program_name.



24
25
26
# File 'lib/deploio/completion_generator.rb', line 24

def program_name
  @program_name
end

Instance Method Details

#generateObject



39
40
41
42
# File 'lib/deploio/completion_generator.rb', line 39

def generate
  template = File.read(TEMPLATE_PATH)
  ERB.new(template, trim_mode: "-").result(binding)
end