Skip to content

Commit c6359e0

Browse files
committed
Migrate instrumentation specs
1 parent 60bfe00 commit c6359e0

File tree

1 file changed

+52
-52
lines changed

1 file changed

+52
-52
lines changed

spec/graphql/execution/instrumentation_spec.rb

Lines changed: 52 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -13,65 +13,65 @@ def initialize(key)
1313
end
1414
end
1515

16-
class LogInstrumenter
17-
def before_query(unit_of_work)
18-
run_hook(unit_of_work, "begin")
19-
end
20-
21-
def after_query(unit_of_work)
22-
run_hook(unit_of_work, "end")
23-
end
24-
25-
alias :before_multiplex :before_query
26-
alias :after_multiplex :after_query
27-
28-
private
29-
30-
def run_hook(unit_of_work, event_name)
31-
unit_of_work.context[log_key(event_name)] = true
32-
if unit_of_work.context[raise_key(event_name)]
33-
raise InstrumenterError.new(log_key(event_name))
16+
module LogInstrumenter
17+
def self.generate(context_key_sym)
18+
hook_method = :"#{context_key_sym}_run_hook"
19+
mod = Module.new
20+
21+
mod.define_method(:execute_query) do |query:, &block|
22+
public_send(hook_method, query, "begin")
23+
result = nil
24+
begin
25+
result = super(query: query, &block)
26+
ensure
27+
public_send(hook_method, query, "end")
28+
end
29+
result
3430
end
35-
end
3631

37-
def log_key(event_name)
38-
context_key("did_#{event_name}")
39-
end
32+
mod.define_method(:execute_multiplex) do |multiplex:, &block|
33+
public_send(hook_method, multiplex, "begin")
34+
result = nil
35+
begin
36+
result = super(multiplex: multiplex, &block)
37+
ensure
38+
public_send(hook_method, multiplex, "end")
39+
end
40+
result
41+
end
4042

41-
def raise_key(event_name)
42-
context_key("should_raise_#{event_name}")
43-
end
43+
mod.define_method(hook_method) do |unit_of_work, event_name|
44+
log_key = :"#{context_key_sym}_did_#{event_name}"
45+
error_key = :"#{context_key_sym}_should_raise_#{event_name}"
46+
unit_of_work.context[log_key] = true
47+
if unit_of_work.context[error_key]
48+
raise InstrumenterError.new(log_key)
49+
end
50+
end
4451

45-
def context_key(suffix)
46-
prefix = self.class.name.sub("Instrumenter", "").downcase
47-
:"#{prefix}_instrumenter_#{suffix}"
52+
mod
4853
end
4954
end
5055

51-
class FirstInstrumenter < LogInstrumenter; end
52-
class SecondInstrumenter < LogInstrumenter; end
53-
54-
class ExecutionErrorInstrumenter
55-
def before_query(query)
56+
module ExecutionErrorTrace
57+
def execute_query(query:)
5658
if query.context[:raise_execution_error]
57-
raise GraphQL::ExecutionError, "Raised from instrumenter before_query"
59+
raise GraphQL::ExecutionError, "Raised from trace execute_query"
5860
end
59-
end
60-
61-
def after_query(query)
61+
super
6262
end
6363
end
6464

6565
# This is how you might add queries from a persisted query backend
6666

67-
class QueryStringInstrumenter
68-
def before_query(query)
69-
if query.context[:extra_query_string] && query.query_string.nil?
70-
query.query_string = query.context[:extra_query_string]
67+
module QueryStringTrace
68+
def execute_multiplex(multiplex:)
69+
multiplex.queries.each do |query|
70+
if query.context[:extra_query_string] && query.query_string.nil?
71+
query.query_string = query.context[:extra_query_string]
72+
end
7173
end
72-
end
73-
74-
def after_query(query)
74+
super
7575
end
7676
end
7777

@@ -92,10 +92,10 @@ def int(value:)
9292
spec = self
9393
Class.new(GraphQL::Schema) do
9494
query(spec.query_type)
95-
instrument(:query, FirstInstrumenter.new)
96-
instrument(:query, SecondInstrumenter.new)
97-
instrument(:query, ExecutionErrorInstrumenter.new)
98-
instrument(:query, QueryStringInstrumenter.new)
95+
trace_with(LogInstrumenter.generate(:second_instrumenter))
96+
trace_with(LogInstrumenter.generate(:first_instrumenter))
97+
trace_with(ExecutionErrorTrace)
98+
trace_with(QueryStringTrace)
9999
end
100100
}
101101

@@ -125,10 +125,10 @@ def int(value:)
125125
assert context[:second_instrumenter_did_end]
126126
end
127127

128-
it "rescues execution errors from before_query" do
128+
it "rescues execution errors from execute_query" do
129129
context = {raise_execution_error: true}
130130
res = schema.execute(" { int(value: 2) } ", context: context)
131-
assert_equal "Raised from instrumenter before_query", res["errors"].first["message"]
131+
assert_equal "Raised from trace execute_query", res["errors"].first["message"]
132132
refute res.key?("data"), "The query doesn't run"
133133
end
134134

@@ -142,8 +142,8 @@ def int(value:)
142142
describe "within a multiplex" do
143143
let(:multiplex_schema) {
144144
Class.new(schema) {
145-
instrument(:multiplex, FirstInstrumenter.new)
146-
instrument(:multiplex, SecondInstrumenter.new)
145+
trace_with(LogInstrumenter.generate(:second_instrumenter))
146+
trace_with(LogInstrumenter.generate(:first_instrumenter))
147147
}
148148
}
149149

0 commit comments

Comments
 (0)