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, filtered_fields, get_keys, gitlab_helper, help, hex_color?, 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.



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

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



81
82
83
84
85
86
87
88
89
90
91
92
# File 'lib/gitlab/help.rb', line 81

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

  # Ensure @option descriptions are on a single line
  output_str.gsub!(/\n\[/, " \[")
  output_str.gsub!(/\s(@)/, "\n@")
  output_str.gsub!(/(\])\n(:)/, '\\1 \\2')
  output_str.gsub!(/(:.*)(\n)(.*\.)/, '\\1 \\3')
  output_str.gsub!(/\{(.+)\}/, '"{\\1}"')
end

.get_help(cmd) ⇒ String

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



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

def get_help(cmd)
  cmd_namespace = namespace cmd

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

    if $CHILD_STATUS == 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.).



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

def help_map
  @help_map ||=
    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

.namespace(cmd) ⇒ Object

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



74
75
76
77
78
# File 'lib/gitlab/help.rb', line 74

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.



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

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

  which_ri
end