Class: Gitlab::QuickActions::CommandDefinition

Inherits:
Object
  • Object
show all
Defined in:
lib/gitlab/quick_actions/command_definition.rb

Direct Known Subclasses

SubstitutionDefinition

Constant Summary collapse

ParseError =
Class.new(StandardError)

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name, attributes = {}) ⇒ CommandDefinition

Returns a new instance of CommandDefinition.



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

def initialize(name, attributes = {})
  @name = name

  @aliases = attributes[:aliases] || []
  @description = attributes[:description] || ''
  @warning = attributes[:warning] || ''
  @icon = attributes[:icon] || ''
  @explanation = attributes[:explanation] || ''
  @execution_message = attributes[:execution_message] || ''
  @params = attributes[:params] || []
  @condition_block = attributes[:condition_block]
  @parse_params_block = attributes[:parse_params_block]
  @action_block = attributes[:action_block]
  @types = attributes[:types] || []
  @conditional_aliases = attributes[:conditional_aliases] || []
  @conditional_aliases_block = attributes[:conditional_aliases_block]
end

Instance Attribute Details

#action_blockObject

Returns the value of attribute action_block.



8
9
10
# File 'lib/gitlab/quick_actions/command_definition.rb', line 8

def action_block
  @action_block
end

#aliasesObject

Returns the value of attribute aliases.



8
9
10
# File 'lib/gitlab/quick_actions/command_definition.rb', line 8

def aliases
  @aliases
end

#condition_blockObject

Returns the value of attribute condition_block.



8
9
10
# File 'lib/gitlab/quick_actions/command_definition.rb', line 8

def condition_block
  @condition_block
end

#conditional_aliasesObject

Returns the value of attribute conditional_aliases.



8
9
10
# File 'lib/gitlab/quick_actions/command_definition.rb', line 8

def conditional_aliases
  @conditional_aliases
end

#conditional_aliases_blockObject

Returns the value of attribute conditional_aliases_block.



8
9
10
# File 'lib/gitlab/quick_actions/command_definition.rb', line 8

def conditional_aliases_block
  @conditional_aliases_block
end

#descriptionObject

Returns the value of attribute description.



8
9
10
# File 'lib/gitlab/quick_actions/command_definition.rb', line 8

def description
  @description
end

#execution_messageObject

Returns the value of attribute execution_message.



8
9
10
# File 'lib/gitlab/quick_actions/command_definition.rb', line 8

def execution_message
  @execution_message
end

#explanationObject

Returns the value of attribute explanation.



8
9
10
# File 'lib/gitlab/quick_actions/command_definition.rb', line 8

def explanation
  @explanation
end

#iconObject

Returns the value of attribute icon.



8
9
10
# File 'lib/gitlab/quick_actions/command_definition.rb', line 8

def icon
  @icon
end

#nameObject

Returns the value of attribute name.



8
9
10
# File 'lib/gitlab/quick_actions/command_definition.rb', line 8

def name
  @name
end

#paramsObject

Returns the value of attribute params.



8
9
10
# File 'lib/gitlab/quick_actions/command_definition.rb', line 8

def params
  @params
end

#parse_params_blockObject

Returns the value of attribute parse_params_block.



8
9
10
# File 'lib/gitlab/quick_actions/command_definition.rb', line 8

def parse_params_block
  @parse_params_block
end

#typesObject

Returns the value of attribute types.



8
9
10
# File 'lib/gitlab/quick_actions/command_definition.rb', line 8

def types
  @types
end

#warningObject

Returns the value of attribute warning.



8
9
10
# File 'lib/gitlab/quick_actions/command_definition.rb', line 8

def warning
  @warning
end

Instance Method Details

#all_namesObject



30
31
32
# File 'lib/gitlab/quick_actions/command_definition.rb', line 30

def all_names
  [name, *aliases]
end

#available?(context) ⇒ Boolean

Returns:

  • (Boolean)


38
39
40
41
42
43
# File 'lib/gitlab/quick_actions/command_definition.rb', line 38

def available?(context)
  return false unless valid_type?(context)
  return true unless condition_block

  context.instance_exec(self, &condition_block)
end

#execute(context, arg) ⇒ Object



67
68
69
70
71
72
73
74
75
76
77
# File 'lib/gitlab/quick_actions/command_definition.rb', line 67

def execute(context, arg)
  return if noop?

  count_commands_executed_in(context)

  return unless available?(context)

  execute_block(action_block, context, arg)
rescue ParseError
  # message propagation is handled in `execution_message`.
end

#execute_message(context, arg) ⇒ Object



79
80
81
82
83
84
85
86
87
88
89
90
# File 'lib/gitlab/quick_actions/command_definition.rb', line 79

def execute_message(context, arg)
  return if noop?
  return _('Could not apply %{name} command.') % { name: name } unless available?(context)

  if execution_message.respond_to?(:call)
    execute_block(execution_message, context, arg)
  else
    execution_message
  end
rescue ParseError => e
  format _('Could not apply %{name} command. %{message}.'), name: name, message: e.message
end

#explain(context, arg) ⇒ Object



45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/gitlab/quick_actions/command_definition.rb', line 45

def explain(context, arg)
  return unless available?(context)

  message = if explanation.respond_to?(:call)
              begin
                execute_block(explanation, context, arg)
              rescue ParseError => e
                format(_('Problem with %{name} command: %{message}.'), name: name, message: e.message)
              end
            else
              explanation
            end

  warning_text = if warning.respond_to?(:call)
                   execute_block(warning, context, arg)
                 else
                   warning
                 end

  warning.empty? ? message : "#{message} (#{warning_text})"
end

#noop?Boolean

Returns:

  • (Boolean)


34
35
36
# File 'lib/gitlab/quick_actions/command_definition.rb', line 34

def noop?
  action_block.nil?
end

#to_h(context) ⇒ Object



92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
# File 'lib/gitlab/quick_actions/command_definition.rb', line 92

def to_h(context)
  desc = description
  if desc.respond_to?(:call)
    desc = begin
      context.instance_exec(&desc)
    rescue StandardError
      ''
    end
  end

  warn = warning
  if warn.respond_to?(:call)
    warn = begin
      context.instance_exec(&warn)
    rescue StandardError
      ''
    end
  end

  prms = params
  if prms.respond_to?(:call)
    prms = begin
      Array(context.instance_exec(&prms))
    rescue StandardError
      params
    end
  end

  all_aliases = aliases

  if conditional_aliases_allowed?(context)
    all_aliases += conditional_aliases
  else
    all_aliases -= conditional_aliases
  end

  {
    name: name,
    aliases: all_aliases.uniq,
    description: desc,
    warning: warn,
    icon: icon,
    params: prms
  }
end