module Bashly::Completions::Command

Public Instance Methods

completion_data(with_version: true) click to toggle source
# File lib/bashly/concerns/completions.rb, line 21
def completion_data(with_version: true)
  result = {}

  completion_full_names.each do |name|
    name = "#{name}*" if name.include? '*'
    result[name] = completion_words with_version: with_version
    flags.each do |flag|
      result.merge! flag.completion_data(name)
    end
  end

  public_commands.each do |command|
    result.merge! command.completion_data(with_version: false)
  end

  result
end
completion_function(name = nil) click to toggle source
# File lib/bashly/concerns/completions.rb, line 43
def completion_function(name = nil)
  completion_generator.wrapper_function name
end
completion_script() click to toggle source
# File lib/bashly/concerns/completions.rb, line 39
def completion_script
  completion_generator.script
end

Protected Instance Methods

completion_full_names() click to toggle source
# File lib/bashly/concerns/completions.rb, line 49
def completion_full_names
  if parent_command
    glue = parent_command.global_flags? ? '*' : ' '
    parent_command.completion_full_names.product(aliases).map { |a| a.join glue }
  else
    aliases
  end
end

Private Instance Methods

completion_allowed_args() click to toggle source
# File lib/bashly/concerns/completions.rb, line 68
def completion_allowed_args
  args.map(&:allowed).flatten
end
completion_flag_names() click to toggle source
# File lib/bashly/concerns/completions.rb, line 64
def completion_flag_names
  public_flags.map(&:name) + public_flags.map(&:short)
end
completion_generator() click to toggle source
# File lib/bashly/concerns/completions.rb, line 60
def completion_generator
  Completely::Completions.new completion_data
end
completion_words(with_version: false) click to toggle source
# File lib/bashly/concerns/completions.rb, line 72
def completion_words(with_version: false)
  trivial_flags = %w[--help -h]
  trivial_flags += %w[--version -v] if with_version
  all = (
    public_command_aliases + trivial_flags +
    completion_flag_names + completion_allowed_args
  )

  all += completions if completions
  all.compact.uniq.sort
end