summaryrefslogtreecommitdiff
path: root/lib/gitlab/slash_commands
diff options
context:
space:
mode:
authorDouwe Maan <douwe@selenight.nl>2016-08-18 14:21:52 -0500
committerDouwe Maan <douwe@selenight.nl>2016-08-18 14:29:49 -0500
commit2703330a19e813351e9c33241a59d6b7f54741df (patch)
tree0caa4c5a119b165fd4fe9e3712f0de5caffa403e /lib/gitlab/slash_commands
parent6f2f2a6baae128cd4f8111d91bdcfb7b76e39b97 (diff)
downloadgitlab-ce-2703330a19e813351e9c33241a59d6b7f54741df.tar.gz
Fix behavior around commands with optional arguments4273-slash-commands
Diffstat (limited to 'lib/gitlab/slash_commands')
-rw-r--r--lib/gitlab/slash_commands/command_definition.rb11
-rw-r--r--lib/gitlab/slash_commands/extractor.rb13
2 files changed, 13 insertions, 11 deletions
diff --git a/lib/gitlab/slash_commands/command_definition.rb b/lib/gitlab/slash_commands/command_definition.rb
index 2ff8f4eddf0..60d35be2599 100644
--- a/lib/gitlab/slash_commands/command_definition.rb
+++ b/lib/gitlab/slash_commands/command_definition.rb
@@ -28,13 +28,14 @@ module Gitlab
context.instance_exec(&condition_block)
end
- def execute(context, opts, args)
+ def execute(context, opts, arg)
return if noop? || !available?(opts)
- block_arity = action_block.arity
- return unless (args.present? && block_arity == 1) || (args.blank? && block_arity <= 0)
-
- context.instance_exec(args, &action_block)
+ if arg.present?
+ context.instance_exec(arg, &action_block)
+ elsif action_block.arity == 0
+ context.instance_exec(&action_block)
+ end
end
def to_h(opts)
diff --git a/lib/gitlab/slash_commands/extractor.rb b/lib/gitlab/slash_commands/extractor.rb
index c790b825347..a672e5e4855 100644
--- a/lib/gitlab/slash_commands/extractor.rb
+++ b/lib/gitlab/slash_commands/extractor.rb
@@ -39,7 +39,7 @@ module Gitlab
content.delete!("\r")
content.gsub!(commands_regex(opts)) do
if $~[:cmd]
- commands << [$~[:cmd], $~[:args]].reject(&:blank?)
+ commands << [$~[:cmd], $~[:arg]].reject(&:blank?)
''
else
$~[0]
@@ -50,13 +50,14 @@ module Gitlab
end
private
+
# Builds a regular expression to match known commands.
# First match group captures the command name and
# second match group captures its arguments.
#
# It looks something like:
#
- # /^\/(?<cmd>close|reopen|...)(?:( |$))(?<args>[^\/\n]*)(?:\n|$)/
+ # /^\/(?<cmd>close|reopen|...)(?:( |$))(?<arg>[^\/\n]*)(?:\n|$)/
def commands_regex(opts)
names = command_names(opts).map(&:to_s)
@@ -64,7 +65,7 @@ module Gitlab
(?<code>
# Code blocks:
# ```
- # Anything, including `/cmd args` which are ignored by this filter
+ # Anything, including `/cmd arg` which are ignored by this filter
# ```
^```
@@ -75,7 +76,7 @@ module Gitlab
(?<html>
# HTML block:
# <tag>
- # Anything, including `/cmd args` which are ignored by this filter
+ # Anything, including `/cmd arg` which are ignored by this filter
# </tag>
^<[^>]+?>\n
@@ -86,7 +87,7 @@ module Gitlab
(?<html>
# Quote block:
# >>>
- # Anything, including `/cmd args` which are ignored by this filter
+ # Anything, including `/cmd arg` which are ignored by this filter
# >>>
^>>>
@@ -102,7 +103,7 @@ module Gitlab
(?<cmd>#{Regexp.union(names)})
(?:
[ ]
- (?<args>[^\/\n]*)
+ (?<arg>[^\/\n]*)
)?
(?:\n|$)
)