Skip to content

Commit 0e8f620

Browse files
authored
Merge pull request #4876 from rmosolgo/context-clean-ups
Remove old Context structure
2 parents 8b617ea + 27b687d commit 0e8f620

File tree

6 files changed

+42
-57
lines changed

6 files changed

+42
-57
lines changed

lib/graphql/backtrace/inspect_result.rb

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,6 @@ def inspect_result(obj)
1616
"[" +
1717
obj.map { |v| inspect_truncated(v) }.join(", ") +
1818
"]"
19-
when Query::Context::SharedMethods
20-
if obj.invalid_null?
21-
"nil"
22-
else
23-
inspect_truncated(obj.value)
24-
end
2519
else
2620
inspect_truncated(obj)
2721
end
@@ -33,12 +27,6 @@ def inspect_truncated(obj)
3327
"{...}"
3428
when Array
3529
"[...]"
36-
when Query::Context::SharedMethods
37-
if obj.invalid_null?
38-
"nil"
39-
else
40-
inspect_truncated(obj.value)
41-
end
4230
when GraphQL::Execution::Lazy
4331
"(unresolved)"
4432
else

lib/graphql/language/document_from_schema_definition.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ def initialize(
2424
@include_built_in_directives = include_built_in_directives
2525
@include_one_of = false
2626

27-
schema_context = schema.context_class.new(query: nil, object: nil, schema: schema, values: context)
27+
schema_context = schema.context_class.new(query: nil, schema: schema, values: context)
2828

2929

3030
@warden = @schema.warden_class.new(

lib/graphql/query.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ def initialize(schema, query_string = nil, query: nil, document: nil, context: n
9999
# Even if `variables: nil` is passed, use an empty hash for simpler logic
100100
variables ||= {}
101101
@schema = schema
102-
@context = schema.context_class.new(query: self, object: root_value, values: context)
102+
@context = schema.context_class.new(query: self, values: context)
103103
@warden = warden
104104
@subscription_topic = subscription_topic
105105
@root_value = root_value

lib/graphql/query/context.rb

Lines changed: 30 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -6,36 +6,6 @@ class Query
66
# Expose some query-specific info to field resolve functions.
77
# It delegates `[]` to the hash that's passed to `GraphQL::Query#initialize`.
88
class Context
9-
module SharedMethods
10-
# Return this value to tell the runtime
11-
# to exclude this field from the response altogether
12-
def skip
13-
GraphQL::Execution::SKIP
14-
end
15-
16-
# Add error at query-level.
17-
# @param error [GraphQL::ExecutionError] an execution error
18-
# @return [void]
19-
def add_error(error)
20-
if !error.is_a?(ExecutionError)
21-
raise TypeError, "expected error to be a ExecutionError, but was #{error.class}"
22-
end
23-
errors << error
24-
nil
25-
end
26-
27-
# @example Print the GraphQL backtrace during field resolution
28-
# puts ctx.backtrace
29-
#
30-
# @return [GraphQL::Backtrace] The backtrace for this point in query execution
31-
def backtrace
32-
GraphQL::Backtrace.new(self)
33-
end
34-
35-
def execution_errors
36-
@execution_errors ||= ExecutionErrors.new(self)
37-
end
38-
end
399

4010
class ExecutionErrors
4111
def initialize(ctx)
@@ -59,7 +29,6 @@ def add(err_or_msg)
5929
alias :push :add
6030
end
6131

62-
include SharedMethods
6332
extend Forwardable
6433

6534
# @return [Array<GraphQL::ExecutionError>] errors returned during execution
@@ -77,11 +46,10 @@ def add(err_or_msg)
7746
# Make a new context which delegates key lookup to `values`
7847
# @param query [GraphQL::Query] the query who owns this context
7948
# @param values [Hash] A hash of arbitrary values which will be accessible at query-time
80-
def initialize(query:, schema: query.schema, values:, object:)
49+
def initialize(query:, schema: query.schema, values:)
8150
@query = query
8251
@schema = schema
8352
@provided_values = values || {}
84-
@object = object
8553
# Namespaced storage, where user-provided values are in `nil` namespace:
8654
@storage = Hash.new { |h, k| h[k] = {} }
8755
@storage[nil] = @provided_values
@@ -140,6 +108,35 @@ def [](key)
140108
end
141109
end
142110

111+
# Return this value to tell the runtime
112+
# to exclude this field from the response altogether
113+
def skip
114+
GraphQL::Execution::SKIP
115+
end
116+
117+
# Add error at query-level.
118+
# @param error [GraphQL::ExecutionError] an execution error
119+
# @return [void]
120+
def add_error(error)
121+
if !error.is_a?(ExecutionError)
122+
raise TypeError, "expected error to be a ExecutionError, but was #{error.class}"
123+
end
124+
errors << error
125+
nil
126+
end
127+
128+
# @example Print the GraphQL backtrace during field resolution
129+
# puts ctx.backtrace
130+
#
131+
# @return [GraphQL::Backtrace] The backtrace for this point in query execution
132+
def backtrace
133+
GraphQL::Backtrace.new(self)
134+
end
135+
136+
def execution_errors
137+
@execution_errors ||= ExecutionErrors.new(self)
138+
end
139+
143140
def current_path
144141
current_runtime_state = Thread.current[:__graphql_runtime_info]
145142
query_runtime_state = current_runtime_state && current_runtime_state[@query]

spec/graphql/query/context_spec.rb

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ def push_query_error
6161
end
6262

6363
describe "empty values" do
64-
let(:context) { GraphQL::Query::Context.new(query: OpenStruct.new(schema: schema), values: nil, object: nil) }
64+
let(:context) { GraphQL::Query::Context.new(query: OpenStruct.new(schema: schema), values: nil) }
6565

6666
it "returns returns nil and reports key? => false" do
6767
assert_nil(context[:some_key])
@@ -71,7 +71,7 @@ def push_query_error
7171
end
7272

7373
describe "assigning values" do
74-
let(:context) { GraphQL::Query::Context.new(query: OpenStruct.new(schema: schema), values: nil, object: nil) }
74+
let(:context) { GraphQL::Query::Context.new(query: OpenStruct.new(schema: schema), values: nil) }
7575

7676
it "allows you to assign new contexts" do
7777
assert_nil(context[:some_key])
@@ -80,7 +80,7 @@ def push_query_error
8080
end
8181

8282
describe "namespaces" do
83-
let(:context) { GraphQL::Query::Context.new(query: OpenStruct.new(schema: schema), values: {a: 1}, object: nil) }
83+
let(:context) { GraphQL::Query::Context.new(query: OpenStruct.new(schema: schema), values: {a: 1}) }
8484

8585
it "doesn't conflict with base values" do
8686
ns = context.namespace(:stuff)
@@ -92,7 +92,7 @@ def push_query_error
9292
end
9393

9494
describe "read values" do
95-
let(:context) { GraphQL::Query::Context.new(query: OpenStruct.new(schema: schema), values: {a: {b: 1}}, object: nil) }
95+
let(:context) { GraphQL::Query::Context.new(query: OpenStruct.new(schema: schema), values: {a: {b: 1}}) }
9696

9797
it "allows you to read values of contexts using []" do
9898
assert_equal({b: 1}, context[:a])
@@ -107,7 +107,7 @@ def push_query_error
107107
end
108108

109109
describe "splatting" do
110-
let(:context) { GraphQL::Query::Context.new(query: OpenStruct.new(schema: schema), values: {a: {b: 1}}, object: nil) }
110+
let(:context) { GraphQL::Query::Context.new(query: OpenStruct.new(schema: schema), values: {a: {b: 1}}) }
111111

112112
let(:splat) { ->(**context) { context } }
113113

@@ -117,7 +117,7 @@ def push_query_error
117117
end
118118

119119
it "can override values set by runtime" do
120-
context = GraphQL::Query::Context.new(query: OpenStruct.new(schema: schema), values: {a: {b: 1}}, object: nil)
120+
context = GraphQL::Query::Context.new(query: OpenStruct.new(schema: schema), values: {a: {b: 1}})
121121
Thread.current[:__graphql_runtime_info] = { context.query => OpenStruct.new({ current_object: :runtime_value }) }
122122
assert_equal :runtime_value, context[:current_object]
123123
context[:current_object] = :override_value
@@ -389,7 +389,7 @@ class ContextSchema < GraphQL::Schema
389389
end
390390

391391
it "always retrieves a scoped context value if set" do
392-
context = GraphQL::Query::Context.new(query: OpenStruct.new(schema: schema), values: nil, object: nil)
392+
context = GraphQL::Query::Context.new(query: OpenStruct.new(schema: schema), values: nil)
393393
dummy_runtime = OpenStruct.new(current_result: nil)
394394
Thread.current[:__graphql_runtime_info] = { context.query => dummy_runtime }
395395
dummy_runtime.current_result = OpenStruct.new(path: ["somewhere"])
@@ -443,15 +443,15 @@ class ContextSchema < GraphQL::Schema
443443
expected_key = :a
444444
expected_value = :test
445445

446-
context = GraphQL::Query::Context.new(query: OpenStruct.new(schema: schema), values: nil, object: nil)
446+
context = GraphQL::Query::Context.new(query: OpenStruct.new(schema: schema), values: nil)
447447
assert_nil(context[expected_key])
448448

449449
context.scoped_set!(expected_key, expected_value)
450450
assert_equal(expected_value, context[expected_key])
451451
end
452452

453453
it "has a #current_path method" do
454-
context = GraphQL::Query::Context.new(query: OpenStruct.new(schema: schema), values: nil, object: nil)
454+
context = GraphQL::Query::Context.new(query: OpenStruct.new(schema: schema), values: nil)
455455
current_result = OpenStruct.new(path: ["somewhere", "child", "grandchild"])
456456
Thread.current[:__graphql_runtime_info] = { context.query => OpenStruct.new(current_result: current_result) }
457457
assert_equal ["somewhere", "child", "grandchild"], context.scoped_context.current_path

spec/graphql/schema/warden_spec.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1009,7 +1009,7 @@ def self.visible?(member, context)
10091009
end
10101010

10111011
it "uses PassThruWarden when a warden on the context nor query" do
1012-
context = GraphQL::Query::Context.new(query: OpenStruct.new(schema: GraphQL::Schema.new), values: {}, object: nil)
1012+
context = GraphQL::Query::Context.new(query: OpenStruct.new(schema: GraphQL::Schema.new), values: {})
10131013
assert_equal GraphQL::Schema::Warden::PassThruWarden, GraphQL::Schema::Warden.from_context(context)
10141014
end
10151015
end

0 commit comments

Comments
 (0)