@@ -61,44 +61,40 @@ def get_finished_value(raw_value)
61
61
# is added to the "errors" key.
62
62
def get_raw_value
63
63
middlewares = execution_context . query . schema . middleware
64
- field_resolve_step = FieldResolveStep . new ( irep_node )
65
- resolve_arguments = [ parent_type , target , field , arguments , execution_context . query . context ]
66
- # only run a middleware chain if there are any middleware
67
- if middlewares . any?
68
- chain = GraphQL ::Schema ::MiddlewareChain . new (
69
- steps : middlewares + [ field_resolve_step ] ,
70
- arguments : resolve_arguments
71
- )
72
- chain . call
73
- else
74
- field_resolve_step . call ( *resolve_arguments )
75
- end
76
- rescue GraphQL ::ExecutionError => err
77
- err
64
+ query_context = execution_context . query . context
65
+ # setup
66
+ query_context . ast_node = @irep_node . ast_node
67
+ query_context . irep_node = @irep_node
68
+
69
+ resolve_arguments = [ parent_type , target , field , arguments , query_context ]
70
+
71
+ resolve_value = begin
72
+ # only run a middleware chain if there are any middleware
73
+ if middlewares . any?
74
+ chain = GraphQL ::Schema ::MiddlewareChain . new (
75
+ steps : middlewares + [ FieldResolveStep ] ,
76
+ arguments : resolve_arguments
77
+ )
78
+ chain . call
79
+ else
80
+ FieldResolveStep . call ( *resolve_arguments )
81
+ end
82
+ rescue GraphQL ::ExecutionError => err
83
+ err
84
+ end
85
+ ensure
86
+ # teardown
87
+ query_context . ast_node = nil
88
+ query_context . irep_node = nil
89
+ resolve_value
78
90
end
79
91
80
92
81
93
# A `.call`-able suitable to be the last step in a middleware chain
82
- class FieldResolveStep
83
- def initialize ( irep_node )
84
- @irep_node = irep_node
85
- end
86
-
94
+ module FieldResolveStep
87
95
# Execute the field's resolve method
88
- def call ( _parent_type , parent_object , field_definition , field_args , context , _next = nil )
89
- # setup
90
- context . ast_node = @irep_node . ast_node
91
- context . irep_node = @irep_node
92
-
93
- # resolve
94
- value = field_definition . resolve ( parent_object , field_args , context )
95
-
96
- # teardown
97
- context . ast_node = nil
98
- context . irep_node = nil
99
-
100
- # return
101
- value
96
+ def self . call ( _parent_type , parent_object , field_definition , field_args , context , _next = nil )
97
+ field_definition . resolve ( parent_object , field_args , context )
102
98
end
103
99
end
104
100
end
0 commit comments