graphql 1.11.5 → 1.11.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of graphql might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/lib/graphql/define/assign_global_id_field.rb +2 -2
- data/lib/graphql/pagination/connections.rb +11 -5
- data/lib/graphql/relay/range_add.rb +14 -5
- data/lib/graphql/schema/build_from_definition.rb +11 -7
- data/lib/graphql/schema/field.rb +7 -6
- data/lib/graphql/schema/field/connection_extension.rb +8 -7
- data/lib/graphql/schema/member/has_fields.rb +2 -2
- data/lib/graphql/schema/unique_within_type.rb +1 -2
- data/lib/graphql/unauthorized_error.rb +1 -1
- data/lib/graphql/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1b6e1d6fb5063c843becb61784cb776964a380af5a2fc5a98054d2554ddf4caa
|
4
|
+
data.tar.gz: c41027cdf69f8c07bed157075c70e95936f3d26922f0b1d38f7759352a35ab43
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3dc4e13b30d51c32775785b9ed4a11940bc2cb541866877e6eef48bc621956700ddf057c597d2bc5a9fa09ca863e01ba84295e414e488e22ee03b94c28bc4003
|
7
|
+
data.tar.gz: 70f5ba8c04e13b83af431db1e8edea297a3c43acc6f6356668094349b577fe7de4e8cdb029aaf8ce70cc243664915ac7dac38612badd0acb720ce57464769cec
|
@@ -2,9 +2,9 @@
|
|
2
2
|
module GraphQL
|
3
3
|
module Define
|
4
4
|
module AssignGlobalIdField
|
5
|
-
def self.call(type_defn, field_name)
|
5
|
+
def self.call(type_defn, field_name, **field_kwargs)
|
6
6
|
resolve = GraphQL::Relay::GlobalIdResolve.new(type: type_defn)
|
7
|
-
GraphQL::Define::AssignObjectField.call(type_defn, field_name, type: GraphQL::ID_TYPE.to_non_null_type, resolve: resolve)
|
7
|
+
GraphQL::Define::AssignObjectField.call(type_defn, field_name, **field_kwargs, type: GraphQL::ID_TYPE.to_non_null_type, resolve: resolve)
|
8
8
|
end
|
9
9
|
end
|
10
10
|
end
|
@@ -63,11 +63,7 @@ module GraphQL
|
|
63
63
|
all_wrappers
|
64
64
|
end
|
65
65
|
|
66
|
-
|
67
|
-
# @api Private
|
68
|
-
def wrap(field, parent, items, arguments, context, wrappers: all_wrappers)
|
69
|
-
return items if GraphQL::Execution::Interpreter::RawValue === items
|
70
|
-
|
66
|
+
def wrapper_for(items, wrappers: all_wrappers)
|
71
67
|
impl = nil
|
72
68
|
|
73
69
|
items.class.ancestors.each { |cls|
|
@@ -75,6 +71,16 @@ module GraphQL
|
|
75
71
|
break if impl
|
76
72
|
}
|
77
73
|
|
74
|
+
impl
|
75
|
+
end
|
76
|
+
|
77
|
+
# Used by the runtime to wrap values in connection wrappers.
|
78
|
+
# @api Private
|
79
|
+
def wrap(field, parent, items, arguments, context, wrappers: all_wrappers)
|
80
|
+
return items if GraphQL::Execution::Interpreter::RawValue === items
|
81
|
+
|
82
|
+
impl = wrapper_for(items, wrappers: wrappers)
|
83
|
+
|
78
84
|
if impl.nil?
|
79
85
|
raise ImplementationMissingError, "Couldn't find a connection wrapper for #{items.class} during #{field.path} (#{items.inspect})"
|
80
86
|
end
|
@@ -33,12 +33,21 @@ module GraphQL
|
|
33
33
|
# @param item [Object] The newly-added item (will be wrapped in `edge_class`)
|
34
34
|
# @param parent [Object] The owner of `collection`, will be passed to the connection if provided
|
35
35
|
# @param context [GraphQL::Query::Context] The surrounding `ctx`, will be passed to the connection if provided (this is required for cursor encoders)
|
36
|
-
# @param edge_class [Class] The class to wrap `item` with
|
37
|
-
def initialize(collection:, item:, parent: nil, context: nil, edge_class:
|
38
|
-
|
36
|
+
# @param edge_class [Class] The class to wrap `item` with (defaults to the connection's edge class)
|
37
|
+
def initialize(collection:, item:, parent: nil, context: nil, edge_class: nil)
|
38
|
+
if context && context.schema.new_connections?
|
39
|
+
conn_class = context.schema.connections.wrapper_for(collection)
|
40
|
+
# The rest will be added by ConnectionExtension
|
41
|
+
@connection = conn_class.new(collection, parent: parent, context: context, edge_class: edge_class)
|
42
|
+
@edge = @connection.edge_class.new(item, @connection)
|
43
|
+
else
|
44
|
+
connection_class = BaseConnection.connection_for_nodes(collection)
|
45
|
+
@connection = connection_class.new(collection, {}, parent: parent, context: context)
|
46
|
+
edge_class ||= Relay::Edge
|
47
|
+
@edge = edge_class.new(item, @connection)
|
48
|
+
end
|
49
|
+
|
39
50
|
@parent = parent
|
40
|
-
@connection = connection_class.new(collection, {}, parent: parent, context: context)
|
41
|
-
@edge = edge_class.new(item, @connection)
|
42
51
|
end
|
43
52
|
end
|
44
53
|
end
|
@@ -197,23 +197,27 @@ module GraphQL
|
|
197
197
|
end
|
198
198
|
|
199
199
|
def build_scalar_type(scalar_type_definition, type_resolver, default_resolve:)
|
200
|
+
builder = self
|
200
201
|
Class.new(GraphQL::Schema::Scalar) do
|
201
202
|
graphql_name(scalar_type_definition.name)
|
202
203
|
description(scalar_type_definition.description)
|
203
204
|
ast_node(scalar_type_definition)
|
204
205
|
|
205
206
|
if default_resolve.respond_to?(:coerce_input)
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
def self.coerce_result(val, ctx)
|
211
|
-
ctx.schema.definition_default_resolve.coerce_result(self, val, ctx)
|
212
|
-
end
|
207
|
+
# Put these method definitions in another method to avoid retaining `type_resolve`
|
208
|
+
# from this method's bindiing
|
209
|
+
builder.build_scalar_type_coerce_method(self, :coerce_input, default_resolve)
|
210
|
+
builder.build_scalar_type_coerce_method(self, :coerce_result, default_resolve)
|
213
211
|
end
|
214
212
|
end
|
215
213
|
end
|
216
214
|
|
215
|
+
def build_scalar_type_coerce_method(scalar_class, method_name, default_definition_resolve)
|
216
|
+
scalar_class.define_singleton_method(method_name) do |val, ctx|
|
217
|
+
default_definition_resolve.public_send(method_name, self, val, ctx)
|
218
|
+
end
|
219
|
+
end
|
220
|
+
|
217
221
|
def build_union_type(union_type_definition, type_resolver)
|
218
222
|
Class.new(GraphQL::Schema::Union) do
|
219
223
|
graphql_name(union_type_definition.name)
|
data/lib/graphql/schema/field.rb
CHANGED
@@ -725,20 +725,21 @@ module GraphQL
|
|
725
725
|
if @extensions.empty?
|
726
726
|
yield(obj, args)
|
727
727
|
else
|
728
|
-
|
729
|
-
|
730
|
-
original_obj = obj
|
728
|
+
extended_obj = obj
|
729
|
+
extended_args = args
|
731
730
|
|
732
731
|
memos = []
|
733
|
-
value = run_extensions_before_resolve(memos, obj, args, ctx) do |
|
734
|
-
|
732
|
+
value = run_extensions_before_resolve(memos, obj, args, ctx) do |obj, args|
|
733
|
+
extended_obj = obj
|
734
|
+
extended_args = args
|
735
|
+
yield(obj, args)
|
735
736
|
end
|
736
737
|
|
737
738
|
ctx.schema.after_lazy(value) do |resolved_value|
|
738
739
|
@extensions.each_with_index do |ext, idx|
|
739
740
|
memo = memos[idx]
|
740
741
|
# TODO after_lazy?
|
741
|
-
resolved_value = ext.after_resolve(object:
|
742
|
+
resolved_value = ext.after_resolve(object: extended_obj, arguments: extended_args, context: ctx, value: resolved_value, memo: memo)
|
742
743
|
end
|
743
744
|
resolved_value
|
744
745
|
end
|
@@ -18,10 +18,11 @@ module GraphQL
|
|
18
18
|
next_args.delete(:last)
|
19
19
|
next_args.delete(:before)
|
20
20
|
next_args.delete(:after)
|
21
|
-
yield(object, next_args)
|
21
|
+
yield(object, next_args, arguments)
|
22
22
|
end
|
23
23
|
|
24
24
|
def after_resolve(value:, object:, arguments:, context:, memo:)
|
25
|
+
original_arguments = memo
|
25
26
|
# rename some inputs to avoid conflicts inside the block
|
26
27
|
maybe_lazy = value
|
27
28
|
value = nil
|
@@ -37,10 +38,10 @@ module GraphQL
|
|
37
38
|
# update the connection with some things that may not have been provided
|
38
39
|
value.context ||= context
|
39
40
|
value.parent ||= object.object
|
40
|
-
value.first_value ||=
|
41
|
-
value.after_value ||=
|
42
|
-
value.last_value ||=
|
43
|
-
value.before_value ||=
|
41
|
+
value.first_value ||= original_arguments[:first]
|
42
|
+
value.after_value ||= original_arguments[:after]
|
43
|
+
value.last_value ||= original_arguments[:last]
|
44
|
+
value.before_value ||= original_arguments[:before]
|
44
45
|
if field.has_max_page_size? && !value.has_max_page_size_override?
|
45
46
|
value.max_page_size = field.max_page_size
|
46
47
|
end
|
@@ -50,7 +51,7 @@ module GraphQL
|
|
50
51
|
value
|
51
52
|
elsif context.schema.new_connections?
|
52
53
|
wrappers = context.namespace(:connections)[:all_wrappers] ||= context.schema.connections.all_wrappers
|
53
|
-
context.schema.connections.wrap(field, object.object, value,
|
54
|
+
context.schema.connections.wrap(field, object.object, value, original_arguments, context, wrappers: wrappers)
|
54
55
|
else
|
55
56
|
if object.is_a?(GraphQL::Schema::Object)
|
56
57
|
object = object.object
|
@@ -58,7 +59,7 @@ module GraphQL
|
|
58
59
|
connection_class = GraphQL::Relay::BaseConnection.connection_for_nodes(value)
|
59
60
|
connection_class.new(
|
60
61
|
value,
|
61
|
-
|
62
|
+
original_arguments,
|
62
63
|
field: field,
|
63
64
|
max_page_size: field.max_page_size,
|
64
65
|
parent: object,
|
@@ -82,9 +82,9 @@ module GraphQL
|
|
82
82
|
end
|
83
83
|
end
|
84
84
|
|
85
|
-
def global_id_field(field_name)
|
85
|
+
def global_id_field(field_name, **kwargs)
|
86
86
|
id_resolver = GraphQL::Relay::GlobalIdResolve.new(type: self)
|
87
|
-
field field_name, "ID", null: false
|
87
|
+
field field_name, "ID", **kwargs, null: false
|
88
88
|
define_method(field_name) do
|
89
89
|
id_resolver.call(object, {}, context)
|
90
90
|
end
|
@@ -27,8 +27,7 @@ module GraphQL
|
|
27
27
|
# @param node_id [String] A unique ID generated by {.encode}
|
28
28
|
# @return [Array<(String, String)>] The type name & value passed to {.encode}
|
29
29
|
def decode(node_id, separator: self.default_id_separator)
|
30
|
-
|
31
|
-
Base64Bp.urlsafe_decode64(node_id).split(separator, 2)
|
30
|
+
GraphQL::Schema::Base64Encoder.decode(node_id).split(separator, 2)
|
32
31
|
end
|
33
32
|
end
|
34
33
|
end
|
@@ -22,7 +22,7 @@ module GraphQL
|
|
22
22
|
@object = object
|
23
23
|
@type = type
|
24
24
|
@context = context
|
25
|
-
message ||= "An instance of #{object.class} failed #{type.
|
25
|
+
message ||= "An instance of #{object.class} failed #{type.graphql_name}'s authorization check"
|
26
26
|
super(message)
|
27
27
|
end
|
28
28
|
end
|
data/lib/graphql/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: graphql
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.11.
|
4
|
+
version: 1.11.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Robert Mosolgo
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-10-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: benchmark-ips
|
@@ -752,7 +752,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
752
752
|
- !ruby/object:Gem::Version
|
753
753
|
version: '0'
|
754
754
|
requirements: []
|
755
|
-
rubygems_version: 3.
|
755
|
+
rubygems_version: 3.0.3
|
756
756
|
signing_key:
|
757
757
|
specification_version: 4
|
758
758
|
summary: A GraphQL language and runtime for Ruby
|