1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
|
# frozen_string_literal: true
module GraphQL
class Schema
# Represents a non null type in the schema.
# Wraps a {Schema::Member} when it is required.
# @see {Schema::Member::TypeSystemHelpers#to_non_null_type}
class NonNull < GraphQL::Schema::Wrapper
include Schema::Member::ValidatesInput
# @return [GraphQL::TypeKinds::NON_NULL]
def kind
GraphQL::TypeKinds::NON_NULL
end
# @return [true]
def non_null?
true
end
# @return [Boolean] True if this type wraps a list type
def list?
@of_type.list?
end
def to_type_signature
"#{@of_type.to_type_signature}!"
end
def inspect
"#<#{self.class.name} @of_type=#{@of_type.inspect}>"
end
def validate_input(value, ctx, max_errors: nil)
if value.nil?
result = GraphQL::Query::InputValidationResult.new
result.add_problem("Expected value to not be null")
result
else
of_type.validate_input(value, ctx, max_errors: max_errors)
end
end
# This is for introspection, where it's expected the name will be `null`
def graphql_name
nil
end
def coerce_input(value, ctx)
# `.validate_input` above is used for variables, but this method is used for arguments
if value.nil?
raise GraphQL::ExecutionError, "`null` is not a valid input for `#{to_type_signature}`, please provide a value for this argument."
end
of_type.coerce_input(value, ctx)
end
def coerce_result(value, ctx)
of_type.coerce_result(value, ctx)
end
# This is for implementing introspection
def description
nil
end
end
end
end
|