summaryrefslogtreecommitdiff
path: root/app/graphql/types/base_argument.rb
diff options
context:
space:
mode:
Diffstat (limited to 'app/graphql/types/base_argument.rb')
-rw-r--r--app/graphql/types/base_argument.rb22
1 files changed, 22 insertions, 0 deletions
diff --git a/app/graphql/types/base_argument.rb b/app/graphql/types/base_argument.rb
index 536a32f2bdd..2c899e9edaa 100644
--- a/app/graphql/types/base_argument.rb
+++ b/app/graphql/types/base_argument.rb
@@ -10,7 +10,29 @@ module Types
@deprecation = gitlab_deprecation(kwargs)
@doc_reference = kwargs.delete(:see)
+ # our custom addition `nullable` which allows us to declare
+ # an argument that must be provided, even if its value is null.
+ # When `required: true` then required arguments must not be null.
+ @gl_required = !!kwargs[:required]
+ @gl_nullable = kwargs[:required] == :nullable
+
+ # Only valid if an argument is also required.
+ if @gl_nullable
+ # Since the framework asserts that "required" means "cannot be null"
+ # we have to switch off "required" but still do the check in `ready?` behind the scenes
+ kwargs[:required] = false
+ end
+
super(*args, **kwargs, &block)
end
+
+ def accepts?(value)
+ # if the argument is declared as required, it must be included
+ return false if @gl_required && value == :not_given
+ # if the argument is declared as required, the value can only be null IF it is also nullable.
+ return false if @gl_required && value.nil? && !@gl_nullable
+
+ true
+ end
end
end