Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions lib/graphql/schema/field_extension.rb
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,7 @@ def after_define_apply
# @yieldparam memo [Object] Any extension-specific value which will be passed to {#after_resolve} later
# @return [Object] The return value for this field.
def resolve(object: nil, objects: nil, arguments:, context:)
yield(object || objects, arguments, nil)
yield(object.nil? ? objects : object, arguments, nil)
end

# Called after {#field} was resolved, and after any lazy values (like `Promise`s) were synced,
Expand All @@ -149,7 +149,7 @@ def resolve(object: nil, objects: nil, arguments:, context:)
# @param memo [Object] The third value yielded by {#resolve}, or `nil` if there wasn't one
# @return [Object] The return value for this field.
def after_resolve(object: nil, objects: nil, arguments:, context:, values: nil, value: nil, memo:)
value || values
value.nil? ? values : value
end
end
end
Expand Down
24 changes: 24 additions & 0 deletions spec/graphql/schema/field_extension_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -434,4 +434,28 @@ def f3(i1:)
assert_equal "f3", res.context[:other_last_ast_node].name
end
end


describe "when returning false from resolve" do
class ReturnFalseSchema < GraphQL::Schema
class EmptyExtension < GraphQL::Schema::FieldExtension
def resolve(object: nil, objects: nil, arguments:, **_rest)
yield(object || objects, arguments)
end
end

class QueryType < GraphQL::Schema::Object
field :is_false, Boolean, extensions: [EmptyExtension], resolve_static: true
def self.is_false(ctx); false; end
def is_false; false; end
end

query QueryType
end

it "is properly returned (not nil)" do
result = ReturnFalseSchema.execute("{ isFalse }")
assert_equal false, result["data"]["isFalse"]
end
end
end