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, get_keys, gitlab_helper, help, method_owners, output_json, output_table, record_hash, record_table, required_fields, symbolize_keys, valid_command?, yaml_load

Class Method Details

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

Table with available commands.



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.



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.).



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.



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