Skip to content

Commit 8117f4d

Browse files
committed
fix(Schema#raise_definition_errors) add compatibility option; default true for loaded schemas
1 parent caa3e45 commit 8117f4d

File tree

4 files changed

+13
-5
lines changed

4 files changed

+13
-5
lines changed

lib/graphql/schema.rb

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ class Schema
5858
:query_execution_strategy, :mutation_execution_strategy, :subscription_execution_strategy,
5959
:max_depth, :max_complexity,
6060
:orphan_types, :resolve_type, :type_error, :parse_error,
61+
:raise_definition_error,
6162
:object_from_id, :id_from_object,
6263
:default_mask,
6364
:cursor_encoder,
@@ -74,7 +75,8 @@ class Schema
7475
:max_depth, :max_complexity,
7576
:orphan_types, :directives,
7677
:query_analyzers, :instrumenters, :lazy_methods,
77-
:cursor_encoder
78+
:cursor_encoder,
79+
:raise_definition_error
7880

7981
# @return [MiddlewareChain] MiddlewareChain which is applied to fields during execution
8082
attr_accessor :middleware
@@ -179,8 +181,12 @@ def define(**kwargs, &block)
179181
@definition_error = nil
180182
nil
181183
rescue StandardError => err
182-
# Raise this error _later_ to avoid messing with Rails constant loading
183-
@definition_error = err
184+
if @raise_definition_error
185+
raise
186+
else
187+
# Raise this error _later_ to avoid messing with Rails constant loading
188+
@definition_error = err
189+
end
184190
nil
185191
end
186192

lib/graphql/schema/build_from_definition.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,8 @@ def build(document, default_resolve: DefaultResolve)
105105
raise InvalidDocumentError.new('Must provide schema definition with query type or a type named Query.') unless query_root_type
106106

107107
Schema.define do
108+
raise_definition_error true
109+
108110
query query_root_type
109111
mutation mutation_root_type
110112
subscription subscription_root_type

lib/graphql/schema/loader.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ def load(introspection_result)
3030
kargs[root] = types.fetch(type.fetch("name")) if type
3131
end
3232

33-
Schema.define(**kargs)
33+
Schema.define(**kargs, raise_definition_error: true)
3434
end
3535

3636
NullResolveType = ->(obj, ctx) {

spec/graphql/field_spec.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ def acts_like_default_resolver(field, old_prop, new_prop)
9090
dummy_query.fields["symbol_name"] = invalid_field
9191

9292
err = assert_raises(GraphQL::Schema::InvalidTypeError) {
93-
GraphQL::Schema.define(query: dummy_query)
93+
GraphQL::Schema.define(query: dummy_query, raise_definition_error: true)
9494
}
9595
assert_equal "QueryType is invalid: field :symbol_name name must return String, not Symbol (:symbol_name)", err.message
9696
end

0 commit comments

Comments
 (0)