Skip to content

Commit 27527bb

Browse files
committed
refine it.
1 parent 6c2f834 commit 27527bb

File tree

2 files changed

+24
-24
lines changed

2 files changed

+24
-24
lines changed

lib/graphql/stitching/client.rb

Lines changed: 19 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -53,69 +53,67 @@ def execute(raw_query = nil, query: nil, variables: nil, operation_name: nil, co
5353

5454
if validate
5555
validation_errors = request.validate
56-
return error_result(request, validation_errors) unless validation_errors.empty?
56+
return error_result(request, validation_errors.map(&:to_h)) unless validation_errors.empty?
5757
end
5858

5959
load_plan(request)
6060
request.execute
61-
rescue GraphQL::ParseError, GraphQL::ExecutionError => e
62-
error_result(request, [e])
6361
rescue StandardError => e
64-
error_result(request, [handle_error(request, e)])
62+
@on_error.call(request, e) if @on_error
63+
error_result(request, [build_graphql_error(request, e)])
6564
end
6665

6766
def on_cache_read(&block)
68-
Warning.warn("Using `on_cache_read` is deprecated and will be removed. Use `read_cached_plan` instead.")
6967
raise ArgumentError, "A cache read block is required." unless block_given?
7068
@on_cache_read = block
7169
end
7270

7371
def on_cache_write(&block)
74-
Warning.warn("Using `on_cache_write` is deprecated and will be removed. Use `write_cached_plan` instead.")
7572
raise ArgumentError, "A cache write block is required." unless block_given?
7673
@on_cache_write = block
7774
end
7875

7976
def on_error(&block)
80-
Warning.warn("Using `on_error` is deprecated and will be removed. Use `handle_error` instead.")
8177
raise ArgumentError, "An error handler block is required." unless block_given?
8278
@on_error = block
8379
end
8480

8581
def read_cached_plan(request)
86-
@on_cache_read.call(request) if @on_cache_read
82+
if @on_cache_read && (plan_json = @on_cache_read.call(request))
83+
Plan.from_json(JSON.parse(plan_json))
84+
end
8785
end
8886

8987
def write_cached_plan(request, plan)
9088
@on_cache_write.call(request, JSON.generate(plan.as_json)) if @on_cache_write
9189
end
9290

93-
def handle_error(request, error)
94-
message = @on_error.call(request, error) if @on_error
95-
message ||= "An unexpected error occured."
96-
{ "message" => message }
91+
def build_graphql_error(request, err)
92+
case err
93+
when GraphQL::ParseError, GraphQL::ExecutionError
94+
err.to_h
95+
else
96+
{ "message" => "An unexpected error occured." }
97+
end
9798
end
9899

99100
private
100101

101102
def load_plan(request)
102-
if (plan_json = read_cached_plan(request))
103-
plan = Plan.from_json(JSON.parse(plan_json))
103+
plan = read_cached_plan(request)
104104

105-
# only use plans referencing current resolver versions
106-
if plan.ops.all? { |op| !op.resolver || @supergraph.resolvers_by_version[op.resolver] }
107-
return request.plan(plan)
108-
end
105+
# only use plans referencing current resolver versions
106+
if plan && plan.ops.all? { |op| !op.resolver || @supergraph.resolvers_by_version[op.resolver] }
107+
return request.plan(plan)
109108
end
110109

111110
request.plan.tap do |plan|
112111
write_cached_plan(request, plan)
113112
end
114113
end
115114

116-
def error_result(request, errors)
117-
public_errors = errors.map! { |e| e.is_a?(Hash) ? e : e.to_h }
118-
GraphQL::Query::Result.new(query: request, values: { "errors" => public_errors })
115+
def error_result(request, graphql_errors)
116+
GraphQL::Query::Result.new(query: request, values: { "errors" => graphql_errors })
119117
end
120118
end
121119
end

test/graphql/stitching/client_test.rb

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -332,14 +332,15 @@ def test_errors_are_handled_by_default
332332
end
333333

334334
def test_errors_trigger_hooks_that_may_return_a_custom_message
335+
called = false
335336
client = GraphQL::Stitching::Client.new(locations: {
336337
products: {
337338
schema: Schemas::Example::Products,
338339
}
339340
})
340341

341-
client.on_error do |req, _err|
342-
"An error occured. Request id: #{req.context[:request_id]}"
342+
client.on_error do |_req, _err|
343+
called = true
343344
end
344345

345346
result = client.execute(
@@ -349,11 +350,12 @@ def test_errors_trigger_hooks_that_may_return_a_custom_message
349350
)
350351

351352
expected_errors = [{
352-
"message" => "An error occured. Request id: R2d2c3P0",
353+
"message" => "An unexpected error occured.",
353354
}]
354355

355356
assert_nil result["data"]
356357
assert_equal expected_errors, result["errors"]
358+
assert called
357359
end
358360

359361
def test_passes_composer_options_through_to_composition

0 commit comments

Comments
 (0)