diff options
Diffstat (limited to 'app/graphql/types/base_argument.rb')
-rw-r--r-- | app/graphql/types/base_argument.rb | 22 |
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 |