Skip to content

Commit 2f64530

Browse files
authored
Merge pull request #4875 from rmosolgo/trace-module-inheritance-regression
Re-apply modules to newly added default trace mode class
2 parents 04104f1 + 16782bb commit 2f64530

File tree

5 files changed

+35
-1
lines changed

5 files changed

+35
-1
lines changed

Gemfile

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ gem 'bootsnap' # required by the Rails apps generated in tests
77
gem 'stackprof', platform: :ruby
88
gem 'pry'
99
gem 'pry-stack_explorer', platform: :ruby
10-
gem 'graphql-batch'
1110
gem 'pry-byebug'
1211

1312
# For Ruby 3.2 compat:

graphql.gemspec

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ Gem::Specification.new do |s|
2929

3030
s.add_development_dependency "benchmark-ips"
3131
s.add_development_dependency "concurrent-ruby", "~>1.0"
32+
s.add_development_dependency "graphql-batch"
3233
s.add_development_dependency "memory_profiler"
3334

3435
s.add_development_dependency "minitest"

lib/graphql/schema.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,10 @@ def default_trace_mode(new_mode = nil)
158158

159159
def trace_class(new_class = nil)
160160
if new_class
161+
# If any modules were already added for `:default`,
162+
# re-apply them here
163+
mods = trace_modules_for(:default)
164+
mods.each { |mod| new_class.include(mod) }
161165
trace_mode(:default, new_class)
162166
backtrace_class = Class.new(new_class)
163167
backtrace_class.include(GraphQL::Backtrace::Trace)

spec/graphql/tracing/trace_modes_spec.rb

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,12 @@ def execute_query(query:)
148148
GraphQL::Schema.send(:own_tracers).delete(tracer_class)
149149
GraphQL::Schema.own_trace_modes[:default] = GraphQL::Schema.build_trace_mode(:default)
150150
refute_includes GraphQL::Schema.new_trace.class.ancestors, GraphQL::Tracing::CallLegacyTracers
151+
ensure
152+
# Since this modifies the base class, make sure it's undone for future test cases
153+
GraphQL::Schema.instance_variable_get(:@own_tracers).clear
154+
GraphQL::Schema.own_trace_modes.clear
155+
GraphQL::Schema.own_trace_modules.clear
156+
GraphQL::Schema.instance_variable_get(:@trace_options_for_mode).clear
151157
end
152158
end
153159

@@ -248,4 +254,27 @@ def initialize(arg2:, **kwargs)
248254
assert ModeOptionsSchema.new_trace(mode: :extra)
249255
end
250256
end
257+
258+
module SomeTraceMod
259+
def execute_query(query)
260+
super
261+
end
262+
end
263+
264+
CustomTraceClass = Class.new(GraphQL::Tracing::Trace)
265+
266+
class BaseSchemaWithCustomTraceClass < GraphQL::Schema
267+
use(GraphQL::Batch)
268+
trace_class(CustomTraceClass)
269+
trace_with(SomeTraceMod)
270+
end
271+
272+
ChildSchema = Class.new(BaseSchemaWithCustomTraceClass)
273+
274+
describe "custom trace class supports trace module inheritance" do
275+
it "inherits parent trace modules" do
276+
assert_equal [GraphQL::Batch::SetupMultiplex::Trace, SomeTraceMod], ChildSchema.trace_modules_for(:default)
277+
assert ChildSchema.new_trace.instance_variable_defined?(:@executor_class)
278+
end
279+
end
251280
end

spec/spec_helper.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
require "minitest/autorun"
2424
require "minitest/focus"
2525
require "minitest/reporters"
26+
require "graphql/batch"
2627

2728
running_in_rubymine = ENV["RM_INFO"]
2829
unless running_in_rubymine

0 commit comments

Comments
 (0)