diff options
author | Douwe Maan <douwe@selenight.nl> | 2016-08-18 22:21:52 +0300 |
---|---|---|
committer | Douwe Maan <douwe@selenight.nl> | 2016-08-18 22:29:49 +0300 |
commit | 2703330a19e813351e9c33241a59d6b7f54741df (patch) | |
tree | 0caa4c5a119b165fd4fe9e3712f0de5caffa403e /lib/gitlab/slash_commands | |
parent | 6f2f2a6baae128cd4f8111d91bdcfb7b76e39b97 (diff) |
Fix behavior around commands with optional arguments
Diffstat (limited to 'lib/gitlab/slash_commands')
-rw-r--r-- | lib/gitlab/slash_commands/command_definition.rb | 11 | ||||
-rw-r--r-- | lib/gitlab/slash_commands/extractor.rb | 13 |
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|$) ) |