class Mhc::Command::Completions

Public Class Methods

new(help, global_options, arguments, config = nil) click to toggle source
# File lib/mhc/command/completions.rb, line 5
def initialize(help, global_options, arguments, config = nil)
  @help, @global_options, @arguments, @config = help, global_options, arguments, config
  command_name = arguments.first

  if command_name and help[command_name]
    option_arguments(help, global_options, command_name)
  else
    command_arguments
  end
end

Private Instance Methods

arguments(help, command_name, position = 2) click to toggle source

make normal argument completion setting from usage string such as: “scan REPOSITORY”

# File lib/mhc/command/completions.rb, line 31
def arguments(help, command_name, position = 2)
  str = ""
  help[command_name].usage.split(/\s+/)[1..-1].each do |arg|
    pos = position

    if /^\[(.*)\]/ =~ arg
      arg = $1
    end

    multi = ""
    if /(.*)\.\.\.$/ =~ arg
      arg = $1
      pos = "*"
      multi = ":"
    end

    str << "#{pos}:#{arg}\\::#{possible_values(arg)}#{multi}\n"
    position += 1
  end
  return str
end
command_arguments() click to toggle source
# File lib/mhc/command/completions.rb, line 18
def command_arguments
  print "_arguments\n"
  print "1:Possible commands\\::"
  print possible_commands + "\n"
end
option_arguments(help, global_options, command_name) click to toggle source
# File lib/mhc/command/completions.rb, line 24
def option_arguments(help, global_options, command_name)
  command_arguments
  print arguments(help, command_name)
  print options(help[command_name], global_options)
end
options(command_help, global_options, position = 2) click to toggle source

make option argument completion setting from usage options help

# File lib/mhc/command/completions.rb, line 54
def options(command_help, global_options, position = 2)
  str = ""
  options = command_help.options.merge(global_options)

  options.each do |name, opt|
    name = name.to_s.gsub("_", "-")

    if opt.type == :boolean
      str << "(--#{name})--#{name}[#{opt.description}]\n"
    else
      str << "(--#{name})--#{name}=-[#{opt.description}]:#{opt.banner}:#{possible_values_for_opt(opt)}\n"
    end
  end
  return str
end
possible_commands() click to toggle source
# File lib/mhc/command/completions.rb, line 70
def possible_commands
  str = "(("
  @help.each_value do |cmd|
    next if cmd.name == "completions"
    str << " #{cmd.name}\\:"
    str << cmd.description.gsub(/([()\s"';&|#\\])/, '\\\\\1')
  end
  str << "))"
end
possible_values(banner) click to toggle source
# File lib/mhc/command/completions.rb, line 85
def possible_values(banner)
  case banner
  when /^CALENDAR/
    "(" + @config.calendars.select{|cal| cal.type == "mhc"}.map(&:name).join(' ') + ")"
  when /^SYNC_CHANNEL/
    "(" + @config.sync_channels.map(&:name).join(' ') + ")"
  when /^(FILE|CONF)/
    "_files"
  when /^DIR/
    "_files -/"
  when "COMMAND"
    possible_commands
  when "RANGE"
    "(all today tomorrow thismonth nextmonth)"
  when /^NUM/
    "_guard '[0-9]#' 'Number'"
  else
    ""
  end
end
possible_values_for_opt(option) click to toggle source
# File lib/mhc/command/completions.rb, line 80
def possible_values_for_opt(option)
  return "(" + option.enum.join(" ") + ")" if option.enum
  return possible_values(option.banner)
end