Module: Gitlab::Help

Extended by:
CLI::Helpers
Defined in:
lib/gitlab/help.rb

Class Method Summary collapse

Methods included from CLI::Helpers

actions, client, confirm_command, excluded_fields, gitlab_helper, help, method_owners, output_table, record_table, required_fields, symbolize_keys, valid_command?, yaml_load_arguments!

Class Method Details

.actions_table(topic = nil) ⇒ Terminal::Table

Table with available commands.

Returns:

  • (Terminal::Table)


62
63
64
65
66
67
68
69
70
71
72
73
# File 'lib/gitlab/help.rb', line 62

def actions_table(topic = nil)
  rows = topic ? help_map[topic] : help_map.keys
  table do |t|
    t.title = topic || "Help Topics"

    # add_row expects an array and we have strings hence the map.
    rows.sort.map { |r| [r] }.each_with_index do |row, index|
      t.add_row row
      t.add_separator unless rows.size - 1 == index
    end
  end
end

.change_help_output!(cmd, output_str) ⇒ Object

Massage output from ‘ri’.



83
84
85
86
# File 'lib/gitlab/help.rb', line 83

def change_help_output!(cmd, output_str)
  output_str.gsub!(/#{cmd}\((.*?)\)/m, cmd+' \1')
  output_str.gsub!(/\,[\s]*/, ' ')
end

.get_help(cmd) ⇒ String

Returns the (modified) help from the ‘ri’ command or returns an error.

Returns:

  • (String)


12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/gitlab/help.rb', line 12

def get_help(cmd)
  cmd_namespace = namespace cmd

  if cmd_namespace
    ri_output = `#{ri_cmd} -T #{cmd_namespace} 2>&1`.chomp

    if $? == 0
      change_help_output! cmd, ri_output
      yield ri_output if block_given?

      ri_output
    else
      "Ri docs not found for #{cmd}, please install the docs to use 'help'."
    end
  else
    "Unknown command: #{cmd}."
  end
end

.help_mapHash<Array>

A hash map that contains help topics (Branches, Groups, etc.) and a list of commands that are defined under a topic (create_branch, branches, protect_branch, etc.).

Returns:

  • (Hash<Array>)


48
49
50
51
52
53
54
55
56
57
# File 'lib/gitlab/help.rb', line 48

def help_map
  @help_map ||= begin
      actions.each_with_object({}) do |action, hsh|
        key = client.method(action).
                     owner.to_s.gsub(/Gitlab::(?:Client::)?/, '')
        hsh[key] ||= []
        hsh[key] << action.to_s
      end
  end
end

.namespace(cmd) ⇒ Object

Returns full namespace of a command (e.g. Gitlab::Client::Branches.cmd)



76
77
78
79
80
# File 'lib/gitlab/help.rb', line 76

def namespace(cmd)
  method_owners.select { |method| method[:name] === cmd }.
                map    { |method| method[:owner] + '.' + method[:name] }.
                shift
end

.ri_cmdString

Finds the location of ‘ri’ on a system.

Returns:

  • (String)


34
35
36
37
38
39
40
41
# File 'lib/gitlab/help.rb', line 34

def ri_cmd
  which_ri = `which ri`.chomp
  if which_ri.empty?
    raise "'ri' tool not found in $PATH. Please install it to use the help."
  end

  which_ri
end