@@ -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
0 commit comments