Skip to content

Commit 91175de

Browse files
committed
Fix backtrace: true with other trace modules
1 parent b359fc9 commit 91175de

File tree

3 files changed

+34
-10
lines changed

3 files changed

+34
-10
lines changed

lib/graphql/backtrace.rb

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -55,9 +55,5 @@ def initialize(path:, query:, ast_node:, object:, field:, arguments:, parent_fra
5555
@parent_frame = parent_frame
5656
end
5757
end
58-
59-
class DefaultBacktraceTrace < GraphQL::Tracing::Trace
60-
include GraphQL::Backtrace::Trace
61-
end
6258
end
6359
end

lib/graphql/schema.rb

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -154,18 +154,37 @@ def trace_class(new_class = nil)
154154
trace_class_for(:default)
155155
end
156156

157+
# @return [Class] Return the trace class to use for this mode, looking one up on the superclass if this Schema doesn't have one defined.
158+
# def trace_class_for(mode)
159+
# @trace_modes ||= {}
160+
# @trace_modes[mode] ||= begin
161+
# base_class = if superclass.respond_to?(:trace_class_for)
162+
# superclass.trace_class_for(mode)
163+
# elsif mode == :default_backtrace
164+
# GraphQL::Backtrace::DefaultBacktraceTrace
165+
# else
166+
# GraphQL::Tracing::Trace
167+
# end
168+
# Class.new(base_class)
169+
# end
170+
# end
171+
172+
157173
# @return [Class] Return the trace class to use for this mode, looking one up on the superclass if this Schema doesn't have one defined.
158174
def trace_class_for(mode)
159175
@trace_modes ||= {}
160176
@trace_modes[mode] ||= begin
161-
base_class = if superclass.respond_to?(:trace_class_for)
162-
superclass.trace_class_for(mode)
163-
elsif mode == :default_backtrace
164-
GraphQL::Backtrace::DefaultBacktraceTrace
177+
if mode == :default_backtrace
178+
schema_base_class = trace_class_for(:default)
179+
Class.new(schema_base_class) do
180+
include(GraphQL::Backtrace::Trace)
181+
end
182+
elsif superclass.respond_to?(:trace_class_for)
183+
superclass_base_class = superclass.trace_class_for(mode)
184+
Class.new(superclass_base_class)
165185
else
166-
GraphQL::Tracing::Trace
186+
Class.new(GraphQL::Tracing::Trace)
167187
end
168-
Class.new(base_class)
169188
end
170189
end
171190

spec/graphql/backtrace_spec.rb

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -273,4 +273,13 @@ def result
273273

274274
assert_equal expected_res, res
275275
end
276+
277+
it "includes other trace modules when backtrace is active" do
278+
custom_trace = Module.new
279+
schema = Class.new(GraphQL::Schema) do
280+
trace_with(custom_trace)
281+
end
282+
query = GraphQL::Query.new(schema, "{ __typename }", context: { backtrace: true })
283+
assert_includes query.current_trace.class.ancestors, custom_trace
284+
end
276285
end

0 commit comments

Comments
 (0)