Module: Captive::ShellCompletions

Defined in:
lib/captive/shell_completions.rb

Constant Summary collapse

ROOT_COMMANDS =
%w[apps env db login whoami console run logs version completions].freeze
SUBCOMMANDS =
{
  "apps" => %w[list info restart rebuild],
  "env"  => %w[list],
  "db"   => %w[restore],
}.freeze

Class Method Summary collapse

Class Method Details

.bash ⇒ Object



13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/captive/shell_completions.rb', line 13

def self.bash
  all = (ROOT_COMMANDS + SUBCOMMANDS.values.flatten).uniq.join(" ")
  <<~BASH
    _captive_completions() {
      local cur prev words
      cur="${COMP_WORDS[COMP_CWORD]}"
      prev="${COMP_WORDS[COMP_CWORD-1]}"

      case "$prev" in
        apps)  COMPREPLY=($(compgen -W "#{SUBCOMMANDS["apps"].join(" ")}" -- "$cur")); return ;;
        env)   COMPREPLY=($(compgen -W "#{SUBCOMMANDS["env"].join(" ")}" -- "$cur")); return ;;
        db)    COMPREPLY=($(compgen -W "#{SUBCOMMANDS["db"].join(" ")}" -- "$cur")); return ;;
      esac

      COMPREPLY=($(compgen -W "#{ROOT_COMMANDS.join(" ")}" -- "$cur"))
    }
    complete -F _captive_completions captive
  BASH
end

.zsh ⇒ Object



33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/captive/shell_completions.rb', line 33

def self.zsh
  sub_cases = SUBCOMMANDS.map do |cmd, subs|
    "      #{cmd}) compadd #{subs.join(" ")} ;;"
  end.join("\n")

  <<~ZSH
    _captive() {
      local state

      _arguments \\
        '1: :->command' \\
        '*: :->args'

      case $state in
        command)
          compadd #{ROOT_COMMANDS.join(" ")}
          ;;
        args)
          case ${words[2]} in
    #{sub_cases}
          esac
          ;;
      esac
    }
    compdef _captive captive
  ZSH
end