graphql 1.7.9 → 1.7.10
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.
- checksums.yaml +5 -5
- data/lib/graphql/compatibility/query_parser_specification/parse_error_specification.rb +14 -0
- data/lib/graphql/internal_representation/node.rb +10 -0
- data/lib/graphql/language/parser.rb +590 -598
- data/lib/graphql/language/parser.y +1 -2
- data/lib/graphql/language/printer.rb +1 -1
- data/lib/graphql/static_validation/rules/fields_have_appropriate_selections.rb +5 -1
- data/lib/graphql/version.rb +1 -1
- data/spec/graphql/language/printer_spec.rb +2 -2
- data/spec/graphql/static_validation/rules/fields_have_appropriate_selections_spec.rb +10 -2
- metadata +3 -3
@@ -154,8 +154,8 @@ module GraphQL
|
|
154
154
|
def print_object_type_definition(object_type)
|
155
155
|
out = print_description(object_type)
|
156
156
|
out << "type #{object_type.name}"
|
157
|
-
out << print_directives(object_type.directives)
|
158
157
|
out << " implements " << object_type.interfaces.map(&:name).join(", ") unless object_type.interfaces.empty?
|
158
|
+
out << print_directives(object_type.directives)
|
159
159
|
out << print_field_definitions(object_type.fields)
|
160
160
|
end
|
161
161
|
|
@@ -24,7 +24,11 @@ module GraphQL
|
|
24
24
|
msg = if resolved_type.nil?
|
25
25
|
nil
|
26
26
|
elsif resolved_type.kind.scalar? && ast_node.selections.any?
|
27
|
-
|
27
|
+
if ast_node.selections.first.is_a?(GraphQL::Language::Nodes::InlineFragment)
|
28
|
+
"Selections can't be made on scalars (%{node_name} returns #{resolved_type.name} but has inline fragments [#{ast_node.selections.map(&:type).map(&:name).join(", ")}])"
|
29
|
+
else
|
30
|
+
"Selections can't be made on scalars (%{node_name} returns #{resolved_type.name} but has selections [#{ast_node.selections.map(&:name).join(", ")}])"
|
31
|
+
end
|
28
32
|
elsif resolved_type.kind.object? && ast_node.selections.none?
|
29
33
|
"Objects must have selections (%{node_name} returns #{resolved_type.name} but has no selections)"
|
30
34
|
else
|
data/lib/graphql/version.rb
CHANGED
@@ -105,7 +105,7 @@ describe GraphQL::Language::Printer do
|
|
105
105
|
end
|
106
106
|
|
107
107
|
describe "full featured schema" do
|
108
|
-
#
|
108
|
+
# Based on: https://github.com/graphql/graphql-js/blob/bc96406ab44453a120da25a0bd6e2b0237119ddf/src/language/__tests__/schema-kitchen-sink.graphql
|
109
109
|
let(:query_string) {<<-schema
|
110
110
|
schema {
|
111
111
|
query: QueryType
|
@@ -128,7 +128,7 @@ describe GraphQL::Language::Printer do
|
|
128
128
|
# Scalar description
|
129
129
|
scalar CustomScalar
|
130
130
|
|
131
|
-
type AnnotatedObject @onObject(arg: "value") {
|
131
|
+
type AnnotatedObject implements Bar @onObject(arg: "value") {
|
132
132
|
annotatedField(arg: Type = "default" @onArg): Type @onField
|
133
133
|
}
|
134
134
|
|
@@ -8,18 +8,19 @@ describe GraphQL::StaticValidation::FieldsHaveAppropriateSelections do
|
|
8
8
|
okCheese: cheese(id: 1) { fatContent, similarCheese(source: YAK) { source } }
|
9
9
|
missingFieldsCheese: cheese(id: 1)
|
10
10
|
illegalSelectionCheese: cheese(id: 1) { id { something, ... someFields } }
|
11
|
+
incorrectFragmentSpread: cheese(id: 1) { flavor { ... on String { __typename } } }
|
11
12
|
}
|
12
13
|
"}
|
13
14
|
|
14
15
|
it "adds errors for selections on scalars" do
|
15
|
-
assert_equal(
|
16
|
+
assert_equal(3, errors.length)
|
16
17
|
|
17
18
|
illegal_selection_error = {
|
18
19
|
"message"=>"Selections can't be made on scalars (field 'id' returns Int but has selections [something, someFields])",
|
19
20
|
"locations"=>[{"line"=>5, "column"=>47}],
|
20
21
|
"fields"=>["query getCheese", "illegalSelectionCheese", "id"],
|
21
22
|
}
|
22
|
-
assert_includes(errors, illegal_selection_error, "finds illegal selections on
|
23
|
+
assert_includes(errors, illegal_selection_error, "finds illegal selections on scalars")
|
23
24
|
|
24
25
|
selection_required_error = {
|
25
26
|
"message"=>"Objects must have selections (field 'cheese' returns Cheese but has no selections)",
|
@@ -27,6 +28,13 @@ describe GraphQL::StaticValidation::FieldsHaveAppropriateSelections do
|
|
27
28
|
"fields"=>["query getCheese", "missingFieldsCheese"],
|
28
29
|
}
|
29
30
|
assert_includes(errors, selection_required_error, "finds objects without selections")
|
31
|
+
|
32
|
+
incorrect_fragment_error = {
|
33
|
+
"message"=>"Selections can't be made on scalars (field 'flavor' returns String but has inline fragments [String])",
|
34
|
+
"locations"=>[{"line"=>6, "column"=>48}],
|
35
|
+
"fields"=>["query getCheese", "incorrectFragmentSpread", "flavor"],
|
36
|
+
}
|
37
|
+
assert_includes(errors, incorrect_fragment_error, "finds scalar fields with selections")
|
30
38
|
end
|
31
39
|
|
32
40
|
describe "anonymous operations" do
|
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.7.
|
4
|
+
version: 1.7.10
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Robert Mosolgo
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-02-
|
11
|
+
date: 2018-02-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: benchmark-ips
|
@@ -1030,7 +1030,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
1030
1030
|
version: '0'
|
1031
1031
|
requirements: []
|
1032
1032
|
rubyforge_project:
|
1033
|
-
rubygems_version: 2.
|
1033
|
+
rubygems_version: 2.7.3
|
1034
1034
|
signing_key:
|
1035
1035
|
specification_version: 4
|
1036
1036
|
summary: A GraphQL language and runtime for Ruby
|