rails-graphql 0.2.1 → 1.0.0.beta
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 +4 -4
- data/ext/console.rb +18 -0
- data/ext/extconf.h +3 -0
- data/ext/extconf.rb +1 -54
- data/ext/gql_parser.c +646 -0
- data/ext/shared.c +482 -0
- data/ext/shared.h +177 -0
- data/lib/gql_parser.so +0 -0
- data/lib/rails/graphql/adapters/mysql_adapter.rb +59 -0
- data/lib/rails/graphql/adapters/pg_adapter.rb +25 -22
- data/lib/rails/graphql/adapters/sqlite_adapter.rb +17 -14
- data/lib/rails/graphql/alternative/field_set.rb +36 -0
- data/lib/rails/graphql/alternative/mutation.rb +17 -0
- data/lib/rails/graphql/alternative/query.rb +93 -0
- data/lib/rails/graphql/alternative/subscription.rb +17 -0
- data/lib/rails/graphql/alternative.rb +20 -0
- data/lib/rails/graphql/argument.rb +21 -24
- data/lib/rails/graphql/callback.rb +24 -9
- data/lib/rails/graphql/collectors/hash_collector.rb +14 -6
- data/lib/rails/graphql/collectors/idented_collector.rb +10 -7
- data/lib/rails/graphql/collectors/json_collector.rb +22 -17
- data/lib/rails/graphql/collectors.rb +4 -4
- data/lib/rails/graphql/config.rb +130 -15
- data/lib/rails/graphql/directive/cached_directive.rb +33 -0
- data/lib/rails/graphql/directive/deprecated_directive.rb +10 -10
- data/lib/rails/graphql/directive/include_directive.rb +5 -4
- data/lib/rails/graphql/directive/skip_directive.rb +5 -4
- data/lib/rails/graphql/directive.rb +118 -63
- data/lib/rails/graphql/errors.rb +33 -4
- data/lib/rails/graphql/event.rb +16 -5
- data/lib/rails/graphql/field/authorized_field.rb +19 -3
- data/lib/rails/graphql/field/input_field.rb +11 -10
- data/lib/rails/graphql/field/mutation_field.rb +42 -7
- data/lib/rails/graphql/field/output_field.rb +102 -13
- data/lib/rails/graphql/field/proxied_field.rb +31 -22
- data/lib/rails/graphql/field/resolved_field.rb +26 -24
- data/lib/rails/graphql/field/scoped_config.rb +10 -4
- data/lib/rails/graphql/field/subscription_field.rb +140 -0
- data/lib/rails/graphql/field/typed_field.rb +43 -22
- data/lib/rails/graphql/field.rb +70 -56
- data/lib/rails/graphql/global_id.rb +85 -0
- data/lib/rails/graphql/helpers/attribute_delegator.rb +5 -5
- data/lib/rails/graphql/helpers/inherited_collection/array.rb +50 -0
- data/lib/rails/graphql/helpers/inherited_collection/base.rb +43 -0
- data/lib/rails/graphql/helpers/inherited_collection/hash.rb +87 -0
- data/lib/rails/graphql/helpers/inherited_collection.rb +25 -76
- data/lib/rails/graphql/helpers/instantiable.rb +15 -0
- data/lib/rails/graphql/helpers/leaf_from_ar.rb +7 -7
- data/lib/rails/graphql/helpers/registerable.rb +44 -62
- data/lib/rails/graphql/helpers/unregisterable.rb +16 -0
- data/lib/rails/graphql/helpers/with_arguments.rb +31 -27
- data/lib/rails/graphql/helpers/with_assignment.rb +6 -6
- data/lib/rails/graphql/helpers/with_callbacks.rb +25 -8
- data/lib/rails/graphql/helpers/with_description.rb +71 -0
- data/lib/rails/graphql/helpers/with_directives.rb +54 -30
- data/lib/rails/graphql/helpers/with_events.rb +21 -23
- data/lib/rails/graphql/helpers/with_fields.rb +76 -22
- data/lib/rails/graphql/helpers/with_global_id.rb +22 -0
- data/lib/rails/graphql/helpers/with_name.rb +43 -0
- data/lib/rails/graphql/helpers/with_namespace.rb +7 -4
- data/lib/rails/graphql/helpers/with_owner.rb +8 -7
- data/lib/rails/graphql/helpers/with_schema_fields.rb +137 -55
- data/lib/rails/graphql/helpers/with_validator.rb +9 -9
- data/lib/rails/graphql/helpers.rb +10 -3
- data/lib/rails/graphql/introspection.rb +43 -36
- data/lib/rails/graphql/railtie.rb +88 -33
- data/lib/rails/graphql/railties/base_generator.rb +3 -9
- data/lib/rails/graphql/railties/channel.rb +157 -0
- data/lib/rails/graphql/railties/controller.rb +62 -17
- data/lib/rails/graphql/railties/controller_runtime.rb +5 -5
- data/lib/rails/graphql/railties/log_subscriber.rb +81 -14
- data/lib/rails/graphql/request/arguments.rb +24 -49
- data/lib/rails/graphql/request/backtrace.rb +191 -0
- data/lib/rails/graphql/request/component/field.rb +86 -65
- data/lib/rails/graphql/request/component/fragment.rb +72 -24
- data/lib/rails/graphql/request/component/operation/subscription.rb +164 -4
- data/lib/rails/graphql/request/component/operation.rb +63 -31
- data/lib/rails/graphql/request/component/spread.rb +68 -25
- data/lib/rails/graphql/request/component/typename.rb +27 -12
- data/lib/rails/graphql/request/component.rb +75 -36
- data/lib/rails/graphql/request/context.rb +18 -8
- data/lib/rails/graphql/request/errors.rb +16 -6
- data/lib/rails/graphql/request/event.rb +19 -8
- data/lib/rails/graphql/request/helpers/directives.rb +68 -27
- data/lib/rails/graphql/request/helpers/selection_set.rb +51 -25
- data/lib/rails/graphql/request/helpers/value_writers.rb +18 -16
- data/lib/rails/graphql/request/prepared_data.rb +98 -0
- data/lib/rails/graphql/request/steps/authorizable.rb +24 -14
- data/lib/rails/graphql/request/steps/organizable.rb +110 -48
- data/lib/rails/graphql/request/steps/{prepareable.rb → preparable.rb} +20 -7
- data/lib/rails/graphql/request/steps/{resolveable.rb → resolvable.rb} +15 -6
- data/lib/rails/graphql/request/strategy/cached_strategy.rb +64 -0
- data/lib/rails/graphql/request/strategy/dynamic_instance.rb +6 -6
- data/lib/rails/graphql/request/strategy/multi_query_strategy.rb +6 -13
- data/lib/rails/graphql/request/strategy/sequenced_strategy.rb +9 -9
- data/lib/rails/graphql/request/strategy.rb +131 -75
- data/lib/rails/graphql/request/subscription.rb +80 -0
- data/lib/rails/graphql/request.rb +305 -86
- data/lib/rails/graphql/schema.rb +240 -48
- data/lib/rails/graphql/shortcuts.rb +22 -3
- data/lib/rails/graphql/source/active_record/builders.rb +49 -35
- data/lib/rails/graphql/source/active_record_source.rb +70 -54
- data/lib/rails/graphql/source/base.rb +111 -0
- data/lib/rails/graphql/source/builder.rb +128 -0
- data/lib/rails/graphql/source/scoped_arguments.rb +31 -19
- data/lib/rails/graphql/source.rb +89 -213
- data/lib/rails/graphql/subscription/provider/action_cable.rb +112 -0
- data/lib/rails/graphql/subscription/provider/base.rb +191 -0
- data/lib/rails/graphql/subscription/provider.rb +18 -0
- data/lib/rails/graphql/subscription/store/base.rb +145 -0
- data/lib/rails/graphql/subscription/store/memory.rb +127 -0
- data/lib/rails/graphql/subscription/store.rb +19 -0
- data/lib/rails/graphql/subscription.rb +17 -0
- data/lib/rails/graphql/to_gql.rb +29 -32
- data/lib/rails/graphql/type/enum/directive_location_enum.rb +11 -11
- data/lib/rails/graphql/type/enum/type_kind_enum.rb +3 -3
- data/lib/rails/graphql/type/enum.rb +34 -48
- data/lib/rails/graphql/type/input.rb +74 -23
- data/lib/rails/graphql/type/interface.rb +16 -26
- data/lib/rails/graphql/type/object/directive_object.rb +4 -4
- data/lib/rails/graphql/type/object/enum_value_object.rb +3 -3
- data/lib/rails/graphql/type/object/field_object.rb +24 -6
- data/lib/rails/graphql/type/object/input_value_object.rb +3 -3
- data/lib/rails/graphql/type/object/schema_object.rb +5 -8
- data/lib/rails/graphql/type/object/type_object.rb +29 -19
- data/lib/rails/graphql/type/object.rb +26 -23
- data/lib/rails/graphql/type/scalar/any_scalar.rb +30 -0
- data/lib/rails/graphql/type/scalar/bigint_scalar.rb +5 -5
- data/lib/rails/graphql/type/scalar/binary_scalar.rb +3 -3
- data/lib/rails/graphql/type/scalar/boolean_scalar.rb +8 -8
- data/lib/rails/graphql/type/scalar/date_scalar.rb +3 -3
- data/lib/rails/graphql/type/scalar/date_time_scalar.rb +3 -3
- data/lib/rails/graphql/type/scalar/decimal_scalar.rb +3 -3
- data/lib/rails/graphql/type/scalar/float_scalar.rb +5 -5
- data/lib/rails/graphql/type/scalar/id_scalar.rb +6 -5
- data/lib/rails/graphql/type/scalar/int_scalar.rb +6 -5
- data/lib/rails/graphql/type/scalar/json_scalar.rb +39 -0
- data/lib/rails/graphql/type/scalar/string_scalar.rb +18 -4
- data/lib/rails/graphql/type/scalar/time_scalar.rb +5 -5
- data/lib/rails/graphql/type/scalar.rb +25 -22
- data/lib/rails/graphql/type/union.rb +14 -16
- data/lib/rails/graphql/type.rb +34 -25
- data/lib/rails/graphql/type_map.rb +256 -164
- data/lib/rails/graphql/uri.rb +166 -0
- data/lib/rails/graphql/version.rb +15 -3
- data/lib/rails/graphql.rake +3 -0
- data/lib/rails/graphql.rb +85 -52
- data/lib/rails-graphql.rb +1 -1
- data/test/assets/en.yml +29 -0
- data/test/assets/introspection-mem.txt +1 -1
- data/test/assets/mem.gql +18 -45
- data/test/assets/mysql.gql +392 -0
- data/test/assets/sqlite.gql +21 -12
- data/test/assets/translate.gql +335 -0
- data/test/config.rb +18 -8
- data/test/graphql/schema_test.rb +12 -19
- data/test/graphql/source_test.rb +8 -75
- data/test/graphql/type/enum_test.rb +207 -203
- data/test/graphql/type/input_test.rb +14 -9
- data/test/graphql/type/interface_test.rb +4 -4
- data/test/graphql/type/scalar/any_scalar_test.rb +38 -0
- data/test/graphql/type/scalar/boolean_scalar_test.rb +6 -3
- data/test/graphql/type/scalar/json_scalar_test.rb +23 -0
- data/test/graphql/type_map_test.rb +51 -66
- data/test/graphql/type_test.rb +0 -19
- data/test/graphql_test.rb +1 -1
- data/test/integration/{authorization/authorization_test.rb → authorization_test.rb} +40 -14
- data/test/integration/config.rb +36 -3
- data/test/integration/customization_test.rb +39 -0
- data/test/integration/global_id_test.rb +99 -0
- data/test/integration/memory/star_wars_introspection_test.rb +24 -16
- data/test/integration/memory/star_wars_query_test.rb +54 -3
- data/test/integration/memory/star_wars_validation_test.rb +1 -1
- data/test/integration/mysql/star_wars_introspection_test.rb +25 -0
- data/test/integration/persisted_query_test.rb +87 -0
- data/test/integration/resolver_precedence_test.rb +154 -0
- data/test/integration/schemas/memory.rb +22 -7
- data/test/integration/schemas/mysql.rb +62 -0
- data/test/integration/schemas/sqlite.rb +21 -12
- data/test/integration/sqlite/star_wars_global_id_test.rb +83 -0
- data/test/integration/sqlite/star_wars_introspection_test.rb +10 -0
- data/test/integration/sqlite/star_wars_query_test.rb +14 -1
- data/test/integration/translate_test.rb +61 -0
- data/test/test_ext.rb +16 -13
- metadata +108 -157
- data/ext/depend +0 -3
- data/ext/graphqlparser/Ast.cpp +0 -346
- data/ext/graphqlparser/Ast.h +0 -1214
- data/ext/graphqlparser/AstNode.h +0 -36
- data/ext/graphqlparser/AstVisitor.h +0 -137
- data/ext/graphqlparser/GraphQLParser.cpp +0 -76
- data/ext/graphqlparser/GraphQLParser.h +0 -55
- data/ext/graphqlparser/JsonVisitor.cpp +0 -161
- data/ext/graphqlparser/JsonVisitor.cpp.inc +0 -456
- data/ext/graphqlparser/JsonVisitor.h +0 -121
- data/ext/graphqlparser/JsonVisitor.h.inc +0 -110
- data/ext/graphqlparser/VERSION +0 -1
- data/ext/graphqlparser/c/GraphQLAst.cpp +0 -324
- data/ext/graphqlparser/c/GraphQLAst.h +0 -180
- data/ext/graphqlparser/c/GraphQLAstForEachConcreteType.h +0 -44
- data/ext/graphqlparser/c/GraphQLAstNode.cpp +0 -25
- data/ext/graphqlparser/c/GraphQLAstNode.h +0 -33
- data/ext/graphqlparser/c/GraphQLAstToJSON.cpp +0 -21
- data/ext/graphqlparser/c/GraphQLAstToJSON.h +0 -24
- data/ext/graphqlparser/c/GraphQLAstVisitor.cpp +0 -55
- data/ext/graphqlparser/c/GraphQLAstVisitor.h +0 -53
- data/ext/graphqlparser/c/GraphQLParser.cpp +0 -35
- data/ext/graphqlparser/c/GraphQLParser.h +0 -54
- data/ext/graphqlparser/dump_json_ast.cpp +0 -48
- data/ext/graphqlparser/lexer.lpp +0 -324
- data/ext/graphqlparser/parser.ypp +0 -693
- data/ext/graphqlparser/parsergen/lexer.cpp +0 -2633
- data/ext/graphqlparser/parsergen/lexer.h +0 -528
- data/ext/graphqlparser/parsergen/location.hh +0 -189
- data/ext/graphqlparser/parsergen/parser.tab.cpp +0 -3300
- data/ext/graphqlparser/parsergen/parser.tab.hpp +0 -646
- data/ext/graphqlparser/parsergen/position.hh +0 -179
- data/ext/graphqlparser/parsergen/stack.hh +0 -156
- data/ext/graphqlparser/syntaxdefs.h +0 -19
- data/ext/libgraphqlparser/AstNode.h +0 -36
- data/ext/libgraphqlparser/CMakeLists.txt +0 -148
- data/ext/libgraphqlparser/CONTRIBUTING.md +0 -23
- data/ext/libgraphqlparser/GraphQLParser.cpp +0 -76
- data/ext/libgraphqlparser/GraphQLParser.h +0 -55
- data/ext/libgraphqlparser/JsonVisitor.cpp +0 -161
- data/ext/libgraphqlparser/JsonVisitor.h +0 -121
- data/ext/libgraphqlparser/LICENSE +0 -22
- data/ext/libgraphqlparser/README.clang-tidy +0 -7
- data/ext/libgraphqlparser/README.md +0 -84
- data/ext/libgraphqlparser/ast/ast.ast +0 -203
- data/ext/libgraphqlparser/ast/ast.py +0 -61
- data/ext/libgraphqlparser/ast/c.py +0 -100
- data/ext/libgraphqlparser/ast/c.pyc +0 -0
- data/ext/libgraphqlparser/ast/c_impl.py +0 -61
- data/ext/libgraphqlparser/ast/c_impl.pyc +0 -0
- data/ext/libgraphqlparser/ast/c_visitor_impl.py +0 -39
- data/ext/libgraphqlparser/ast/c_visitor_impl.pyc +0 -0
- data/ext/libgraphqlparser/ast/casing.py +0 -26
- data/ext/libgraphqlparser/ast/casing.pyc +0 -0
- data/ext/libgraphqlparser/ast/cxx.py +0 -197
- data/ext/libgraphqlparser/ast/cxx.pyc +0 -0
- data/ext/libgraphqlparser/ast/cxx_impl.py +0 -61
- data/ext/libgraphqlparser/ast/cxx_impl.pyc +0 -0
- data/ext/libgraphqlparser/ast/cxx_json_visitor_header.py +0 -42
- data/ext/libgraphqlparser/ast/cxx_json_visitor_header.pyc +0 -0
- data/ext/libgraphqlparser/ast/cxx_json_visitor_impl.py +0 -80
- data/ext/libgraphqlparser/ast/cxx_json_visitor_impl.pyc +0 -0
- data/ext/libgraphqlparser/ast/cxx_visitor.py +0 -64
- data/ext/libgraphqlparser/ast/cxx_visitor.pyc +0 -0
- data/ext/libgraphqlparser/ast/js.py +0 -65
- data/ext/libgraphqlparser/ast/license.py +0 -10
- data/ext/libgraphqlparser/ast/license.pyc +0 -0
- data/ext/libgraphqlparser/c/GraphQLAstNode.cpp +0 -25
- data/ext/libgraphqlparser/c/GraphQLAstNode.h +0 -33
- data/ext/libgraphqlparser/c/GraphQLAstToJSON.cpp +0 -21
- data/ext/libgraphqlparser/c/GraphQLAstToJSON.h +0 -24
- data/ext/libgraphqlparser/c/GraphQLAstVisitor.cpp +0 -55
- data/ext/libgraphqlparser/c/GraphQLAstVisitor.h +0 -53
- data/ext/libgraphqlparser/c/GraphQLParser.cpp +0 -35
- data/ext/libgraphqlparser/c/GraphQLParser.h +0 -54
- data/ext/libgraphqlparser/clang-tidy-all.sh +0 -3
- data/ext/libgraphqlparser/cmake/version.cmake +0 -16
- data/ext/libgraphqlparser/dump_json_ast.cpp +0 -48
- data/ext/libgraphqlparser/go/README.md +0 -20
- data/ext/libgraphqlparser/go/callbacks.go +0 -18
- data/ext/libgraphqlparser/go/gotest.go +0 -64
- data/ext/libgraphqlparser/lexer.lpp +0 -324
- data/ext/libgraphqlparser/libgraphqlparser.pc.in +0 -11
- data/ext/libgraphqlparser/parser.ypp +0 -693
- data/ext/libgraphqlparser/parsergen/lexer.cpp +0 -2633
- data/ext/libgraphqlparser/parsergen/lexer.h +0 -528
- data/ext/libgraphqlparser/parsergen/location.hh +0 -189
- data/ext/libgraphqlparser/parsergen/parser.tab.cpp +0 -3300
- data/ext/libgraphqlparser/parsergen/parser.tab.hpp +0 -646
- data/ext/libgraphqlparser/parsergen/position.hh +0 -179
- data/ext/libgraphqlparser/parsergen/stack.hh +0 -156
- data/ext/libgraphqlparser/python/CMakeLists.txt +0 -14
- data/ext/libgraphqlparser/python/README.md +0 -5
- data/ext/libgraphqlparser/python/example.py +0 -31
- data/ext/libgraphqlparser/syntaxdefs.h +0 -19
- data/ext/libgraphqlparser/test/BuildCAPI.c +0 -5
- data/ext/libgraphqlparser/test/CMakeLists.txt +0 -25
- data/ext/libgraphqlparser/test/JsonVisitorTests.cpp +0 -28
- data/ext/libgraphqlparser/test/ParserTests.cpp +0 -352
- data/ext/libgraphqlparser/test/kitchen-sink.graphql +0 -59
- data/ext/libgraphqlparser/test/kitchen-sink.json +0 -1
- data/ext/libgraphqlparser/test/schema-kitchen-sink.graphql +0 -78
- data/ext/libgraphqlparser/test/schema-kitchen-sink.json +0 -1
- data/ext/libgraphqlparser/test/valgrind.supp +0 -33
- data/ext/version.cpp +0 -21
- data/lib/graphqlparser.so +0 -0
- data/lib/rails/graphql/native/functions.rb +0 -38
- data/lib/rails/graphql/native/location.rb +0 -41
- data/lib/rails/graphql/native/pointers.rb +0 -23
- data/lib/rails/graphql/native/visitor.rb +0 -349
- data/lib/rails/graphql/native.rb +0 -56
- data/test/integration/schemas/authorization.rb +0 -12
@@ -0,0 +1,335 @@
|
|
1
|
+
schema {
|
2
|
+
query: _Query
|
3
|
+
}
|
4
|
+
|
5
|
+
"The Boolean scalar type represents true or false."
|
6
|
+
scalar Boolean
|
7
|
+
|
8
|
+
"The Float scalar type represents signed double-precision fractional values."
|
9
|
+
scalar Float
|
10
|
+
|
11
|
+
"""
|
12
|
+
The ID scalar type represents a unique identifier and it is serialized in the same
|
13
|
+
way as a String but it accepts both numeric and string based values as input.
|
14
|
+
"""
|
15
|
+
scalar ID
|
16
|
+
|
17
|
+
"The Int scalar type represents a signed 32-bit numeric non-fractional value."
|
18
|
+
scalar Int
|
19
|
+
|
20
|
+
"Scalar"
|
21
|
+
scalar ScalarDesc
|
22
|
+
|
23
|
+
"""
|
24
|
+
The String scalar type represents textual data, represented as UTF-8 character
|
25
|
+
sequences.
|
26
|
+
"""
|
27
|
+
scalar String
|
28
|
+
|
29
|
+
"Enum"
|
30
|
+
enum EnumDesc {
|
31
|
+
|
32
|
+
}
|
33
|
+
|
34
|
+
"The valid locations that a directive may be placed."
|
35
|
+
enum __DirectiveLocation {
|
36
|
+
"Mark as a executable directive usable on query objects."
|
37
|
+
QUERY
|
38
|
+
|
39
|
+
"Mark as a executable directive usable on mutation objects."
|
40
|
+
MUTATION
|
41
|
+
|
42
|
+
"Mark as a executable directive usable on subscription objects."
|
43
|
+
SUBSCRIPTION
|
44
|
+
|
45
|
+
"Mark as a executable directive usable on field objects."
|
46
|
+
FIELD
|
47
|
+
|
48
|
+
"Mark as a executable directive usable on fragment definition objects."
|
49
|
+
FRAGMENT_DEFINITION
|
50
|
+
|
51
|
+
"Mark as a executable directive usable on fragment spread objects."
|
52
|
+
FRAGMENT_SPREAD
|
53
|
+
|
54
|
+
"Mark as a executable directive usable on inline fragment objects."
|
55
|
+
INLINE_FRAGMENT
|
56
|
+
|
57
|
+
"Mark as a type system directive usable on schema definitions."
|
58
|
+
SCHEMA
|
59
|
+
|
60
|
+
"Mark as a type system directive usable on scalar definitions."
|
61
|
+
SCALAR
|
62
|
+
|
63
|
+
"Mark as a type system directive usable on object definitions."
|
64
|
+
OBJECT
|
65
|
+
|
66
|
+
"Mark as a type system directive usable on field definitions."
|
67
|
+
FIELD_DEFINITION
|
68
|
+
|
69
|
+
"Mark as a type system directive usable on argument definitions."
|
70
|
+
ARGUMENT_DEFINITION
|
71
|
+
|
72
|
+
"Mark as a type system directive usable on interface definitions."
|
73
|
+
INTERFACE
|
74
|
+
|
75
|
+
"Mark as a type system directive usable on union definitions."
|
76
|
+
UNION
|
77
|
+
|
78
|
+
"Mark as a type system directive usable on enum definitions."
|
79
|
+
ENUM
|
80
|
+
|
81
|
+
"Mark as a type system directive usable on enum value definitions."
|
82
|
+
ENUM_VALUE
|
83
|
+
|
84
|
+
"Mark as a type system directive usable on input object definitions."
|
85
|
+
INPUT_OBJECT
|
86
|
+
|
87
|
+
"Mark as a type system directive usable on input field definitions."
|
88
|
+
INPUT_FIELD_DEFINITION
|
89
|
+
}
|
90
|
+
|
91
|
+
"""
|
92
|
+
The fundamental unit of any GraphQL Schema is the type.
|
93
|
+
This enum enlist all the valid base types.
|
94
|
+
"""
|
95
|
+
enum __TypeKind {
|
96
|
+
"Scalar types represent primitive leaf values in a GraphQL type system.\n"
|
97
|
+
SCALAR
|
98
|
+
|
99
|
+
"Objects represent a list of named fields, each of which yield a value of a\nspecific type.\n"
|
100
|
+
OBJECT
|
101
|
+
|
102
|
+
"Interfaces represent a list of named fields and their types.\n"
|
103
|
+
INTERFACE
|
104
|
+
|
105
|
+
"Unions represent an object that could be one of a list of GraphQL Object types.\n"
|
106
|
+
UNION
|
107
|
+
|
108
|
+
"Enum types, like scalar types, also represent leaf values in a GraphQL\ntype system. However Enum types describe the set of possible values.\n"
|
109
|
+
ENUM
|
110
|
+
|
111
|
+
"Objects represent a list of named fields, each of which yield a value of\na specific type.\n"
|
112
|
+
INPUT_OBJECT
|
113
|
+
|
114
|
+
"A GraphQL list is a special collection type which declares the type of\neach item in the List (referred to as the item type of the list).\n"
|
115
|
+
LIST
|
116
|
+
|
117
|
+
"This type wraps an underlying type, and this type acts identically to that wrapped\ntype, with the exception that null is not a valid response for the wrapping type.\n"
|
118
|
+
NON_NULL
|
119
|
+
}
|
120
|
+
|
121
|
+
"Input"
|
122
|
+
input InputDescInput {
|
123
|
+
|
124
|
+
}
|
125
|
+
|
126
|
+
"Interface"
|
127
|
+
interface InterfaceDesc {
|
128
|
+
|
129
|
+
}
|
130
|
+
|
131
|
+
"Union"
|
132
|
+
union UnionDesc =
|
133
|
+
|
134
|
+
"Object"
|
135
|
+
type ObjectDesc {
|
136
|
+
|
137
|
+
}
|
138
|
+
|
139
|
+
type _Query {
|
140
|
+
"Field"
|
141
|
+
sampleField: String
|
142
|
+
|
143
|
+
"A"
|
144
|
+
sampleA: String
|
145
|
+
|
146
|
+
"B"
|
147
|
+
sampleB: String
|
148
|
+
|
149
|
+
"C"
|
150
|
+
sampleC: String
|
151
|
+
|
152
|
+
"D"
|
153
|
+
sampleD: String
|
154
|
+
|
155
|
+
"E"
|
156
|
+
sampleE: String
|
157
|
+
|
158
|
+
"F"
|
159
|
+
sampleF: String
|
160
|
+
|
161
|
+
__schema: __Schema!
|
162
|
+
|
163
|
+
__type(name: String!): __Type
|
164
|
+
}
|
165
|
+
|
166
|
+
"""
|
167
|
+
Directives provide a way to describe alternate runtime execution
|
168
|
+
and type validation behavior in a GraphQL document.
|
169
|
+
|
170
|
+
In some cases, you need to provide options to alter GraphQL's execution
|
171
|
+
behavior in ways field arguments will not suffice, such as conditionally
|
172
|
+
including or skipping a field. Directives provide this by describing
|
173
|
+
additional information to the executor.
|
174
|
+
"""
|
175
|
+
# Assigned to Rails::GraphQL::Directive class
|
176
|
+
type __Directive {
|
177
|
+
name: String!
|
178
|
+
|
179
|
+
description: String
|
180
|
+
|
181
|
+
locations: [__DirectiveLocation!]!
|
182
|
+
|
183
|
+
args: [__InputValue!]!
|
184
|
+
}
|
185
|
+
|
186
|
+
"""
|
187
|
+
One of the values of an Enum object. It is unique within the Enum set
|
188
|
+
of values. It's a string representation, not a numeric representation,
|
189
|
+
of a value kept as all caps (ie. ONE_VALUE).
|
190
|
+
"""
|
191
|
+
type __EnumValue {
|
192
|
+
name: String!
|
193
|
+
|
194
|
+
description: String
|
195
|
+
|
196
|
+
isDeprecated: Boolean!
|
197
|
+
|
198
|
+
deprecationReason: String
|
199
|
+
}
|
200
|
+
|
201
|
+
"""
|
202
|
+
Fields are the elements that compose both Objects and Interfaces. Each
|
203
|
+
field in these other objects may contain arguments and always yields
|
204
|
+
a value of a specific type.
|
205
|
+
"""
|
206
|
+
# Assigned to Rails::GraphQL::Field class
|
207
|
+
type __Field {
|
208
|
+
name: String!
|
209
|
+
|
210
|
+
description: String
|
211
|
+
|
212
|
+
args: [__InputValue!]!
|
213
|
+
|
214
|
+
type: __Type!
|
215
|
+
|
216
|
+
isDeprecated: Boolean!
|
217
|
+
|
218
|
+
deprecationReason: String
|
219
|
+
}
|
220
|
+
|
221
|
+
"""
|
222
|
+
Alongside with scalars and enums, input value objects allow the user
|
223
|
+
to provide values to arguments on fields and directives. Different
|
224
|
+
from those, input values accepts a list of keyed values, instead of
|
225
|
+
a single value.
|
226
|
+
"""
|
227
|
+
# Assigned to Rails::GraphQL::Field::InputField class
|
228
|
+
type __InputValue {
|
229
|
+
name: String!
|
230
|
+
|
231
|
+
description: String
|
232
|
+
|
233
|
+
type: __Type!
|
234
|
+
|
235
|
+
defaultValue: String
|
236
|
+
}
|
237
|
+
|
238
|
+
"""
|
239
|
+
A GraphQL service's collective type system capabilities are referred
|
240
|
+
to as that service's "schema". A schema is defined in terms of the
|
241
|
+
types and directives it supports as well as the root operation types
|
242
|
+
for each kind of operation: query, mutation, and subscription; this
|
243
|
+
determines the place in the type system where those operations begin.
|
244
|
+
"""
|
245
|
+
# Assigned to Rails::GraphQL::Schema class
|
246
|
+
type __Schema {
|
247
|
+
types: [__Type!]!
|
248
|
+
|
249
|
+
queryType: __Type!
|
250
|
+
|
251
|
+
mutationType: __Type
|
252
|
+
|
253
|
+
subscriptionType: __Type
|
254
|
+
|
255
|
+
directives: [__Directive!]!
|
256
|
+
}
|
257
|
+
|
258
|
+
"""
|
259
|
+
The fundamental unit of any GraphQL Schema is the type. There are six
|
260
|
+
kinds of named type definitions in GraphQL, and two wrapping types.
|
261
|
+
|
262
|
+
The most basic type is a +Scalar+. A scalar represents a primitive value,
|
263
|
+
like a string or an integer.
|
264
|
+
|
265
|
+
+Scalars+ and +Enums+ form the leaves in response trees; the intermediate
|
266
|
+
levels are +Object+ types, which define a set of fields.
|
267
|
+
|
268
|
+
An +Interface+ defines a list of fields; +Object+ types that implement
|
269
|
+
that interface are guaranteed to implement those fields.
|
270
|
+
|
271
|
+
A +Union+ defines a list of possible types; similar to interfaces,
|
272
|
+
whenever the type system claims a union will be returned, one of the
|
273
|
+
possible types will be returned.
|
274
|
+
|
275
|
+
Finally, oftentimes it is useful to provide complex structs as inputs
|
276
|
+
to GraphQL field arguments or variables; the +Input Object+ type allows
|
277
|
+
the schema to define exactly what data is expected.
|
278
|
+
"""
|
279
|
+
# Assigned to Rails::GraphQL::Type class
|
280
|
+
type __Type {
|
281
|
+
kind: __TypeKind!
|
282
|
+
|
283
|
+
name: String
|
284
|
+
|
285
|
+
description: String
|
286
|
+
|
287
|
+
"OBJECT and INTERFACE only"
|
288
|
+
fields(includeDeprecated: Boolean = false): [__Field!]
|
289
|
+
|
290
|
+
"OBJECT only"
|
291
|
+
interfaces: [__Type!]
|
292
|
+
|
293
|
+
"INTERFACE and UNION only"
|
294
|
+
possibleTypes: [__Type!]
|
295
|
+
|
296
|
+
"ENUM only"
|
297
|
+
enumValues(includeDeprecated: Boolean = false): [__EnumValue!]
|
298
|
+
|
299
|
+
"INPUT_OBJECT only"
|
300
|
+
inputFields: [__InputValue!]
|
301
|
+
|
302
|
+
"NON_NULL and LIST only"
|
303
|
+
ofType: __Type
|
304
|
+
}
|
305
|
+
|
306
|
+
"""
|
307
|
+
Indicate deprecated portions of a GraphQL service's schema, such as deprecated
|
308
|
+
fields on a type or deprecated enum values.
|
309
|
+
"""
|
310
|
+
directive @deprecated(
|
311
|
+
|
312
|
+
"""
|
313
|
+
Explain why the underlying element was marked as deprecated. If possible,
|
314
|
+
indicate what element should be used instead. This description is formatted
|
315
|
+
using Markdown syntax (as specified by [CommonMark](http://commonmark.org/)).
|
316
|
+
"""
|
317
|
+
reason: String
|
318
|
+
|
319
|
+
) on FIELD_DEFINITION | ENUM_VALUE
|
320
|
+
|
321
|
+
"Allows for conditional inclusion during execution as described by the if argument."
|
322
|
+
directive @include(
|
323
|
+
|
324
|
+
"When false, the underlying element will be automatically marked as null."
|
325
|
+
if: Boolean!
|
326
|
+
|
327
|
+
) on FIELD | FRAGMENT_SPREAD | INLINE_FRAGMENT
|
328
|
+
|
329
|
+
"Allows for conditional exclusion during execution as described by the if argument."
|
330
|
+
directive @skip(
|
331
|
+
|
332
|
+
"When true, the underlying element will be automatically marked as null."
|
333
|
+
if: Boolean!
|
334
|
+
|
335
|
+
) on FIELD | FRAGMENT_SPREAD | INLINE_FRAGMENT
|
data/test/config.rb
CHANGED
@@ -4,24 +4,32 @@ SimpleCov.start do
|
|
4
4
|
|
5
5
|
add_filter '/test/'
|
6
6
|
|
7
|
-
add_group 'Definition', ['/graphql/type', '/graphql/
|
8
|
-
add_group '
|
9
|
-
add_group 'Native', '/graphql/native'
|
10
|
-
add_group 'Field', '/graphql/field'
|
7
|
+
add_group 'Definition', ['/graphql/type', '/graphql/directive']
|
8
|
+
add_group 'Field', ['/graphql/alternative', '/graphql/field']
|
11
9
|
add_group 'Helpers', '/graphql/helpers'
|
12
|
-
add_group '
|
10
|
+
add_group 'Rails', '/graphql/railties'
|
11
|
+
add_group 'Request', ['/graphql/collectors', '/graphql/request']
|
12
|
+
add_group 'Subscription', '/graphql/subscription'
|
13
|
+
add_group 'Source', ['/graphql/adapters', '/graphql/source']
|
13
14
|
end
|
14
15
|
|
15
16
|
require 'minitest/autorun'
|
16
17
|
require 'minitest/reporters'
|
18
|
+
require 'active_record'
|
17
19
|
require 'rails-graphql'
|
18
|
-
require '
|
20
|
+
require 'debug'
|
21
|
+
|
22
|
+
$config = Rails::GraphQL.config
|
23
|
+
$config.logger = ActiveSupport::TaggedLogging.new(Logger.new('/dev/null'))
|
24
|
+
Rails::GraphQL::Request::Backtrace.skip_base_class = NilClass
|
25
|
+
|
26
|
+
# ActiveRecord::Base.logger = Logger.new(STDOUT)
|
19
27
|
|
20
28
|
require_relative './test_ext'
|
21
29
|
|
22
30
|
Minitest::Reporters.use!(Minitest::Reporters::SpecReporter.new)
|
23
31
|
|
24
|
-
# Load all files for coverage
|
32
|
+
# Load all files for coverage insurance
|
25
33
|
Rails::GraphQL.eager_load!
|
26
34
|
|
27
35
|
module GraphQL
|
@@ -61,7 +69,9 @@ module GraphQL
|
|
61
69
|
end
|
62
70
|
|
63
71
|
def fake_type_map(pass = :fetch!, *others)
|
64
|
-
|
72
|
+
methods = others.unshift(pass).product([passthrough]).to_h
|
73
|
+
methods[:associated_namespace_of] ||= ->(*) { }
|
74
|
+
double(**methods)
|
65
75
|
end
|
66
76
|
|
67
77
|
def stubbed_type_map(*others, &block)
|
data/test/graphql/schema_test.rb
CHANGED
@@ -36,19 +36,21 @@ class GraphQL_SchemaTest < GraphQL::TestCase
|
|
36
36
|
end
|
37
37
|
|
38
38
|
def test_set_namespace
|
39
|
-
result = DESCRIBED_CLASS.get_reset_ivar(:@
|
40
|
-
assert_equal(
|
39
|
+
result = DESCRIBED_CLASS.get_reset_ivar(:@namespace) { set_namespace('a') }
|
40
|
+
assert_equal(:a, result)
|
41
41
|
|
42
|
-
result = DESCRIBED_CLASS.get_reset_ivar(:@
|
43
|
-
assert_equal(
|
42
|
+
result = DESCRIBED_CLASS.get_reset_ivar(:@namespace) { set_namespace('b', 'c') }
|
43
|
+
assert_equal(:b, result)
|
44
44
|
end
|
45
45
|
|
46
46
|
def test_namespace
|
47
|
-
|
47
|
+
assert_equal(:base, DESCRIBED_CLASS.namespace)
|
48
|
+
|
49
|
+
DESCRIBED_CLASS.stub_ivar(:@namespace, nil) do
|
48
50
|
assert_equal(:base, DESCRIBED_CLASS.namespace)
|
49
51
|
end
|
50
52
|
|
51
|
-
DESCRIBED_CLASS.
|
53
|
+
DESCRIBED_CLASS.stub_ivar(:@namespace, 1) do
|
52
54
|
assert_equal(1, DESCRIBED_CLASS.namespace)
|
53
55
|
end
|
54
56
|
|
@@ -64,16 +66,6 @@ class GraphQL_SchemaTest < GraphQL::TestCase
|
|
64
66
|
end
|
65
67
|
end
|
66
68
|
|
67
|
-
def test_gql_resolver_ask
|
68
|
-
refute(DESCRIBED_CLASS.gql_resolver?(:calculate))
|
69
|
-
|
70
|
-
DESCRIBED_CLASS.send(:define_method, :calculate) {}
|
71
|
-
assert(DESCRIBED_CLASS.gql_resolver?(:calculate))
|
72
|
-
|
73
|
-
DESCRIBED_CLASS.send(:undef_method, :calculate)
|
74
|
-
refute(DESCRIBED_CLASS.gql_resolver?(:calculate))
|
75
|
-
end
|
76
|
-
|
77
69
|
def test_find_type
|
78
70
|
DESCRIBED_CLASS.stub(:namespaces, :a) do
|
79
71
|
DESCRIBED_CLASS.stub(:type_map, double(fetch: passallthrough)) do
|
@@ -153,16 +145,17 @@ class GraphQL_SchemaTest < GraphQL::TestCase
|
|
153
145
|
|
154
146
|
def test_sources
|
155
147
|
result, passthrough = collect_all_through
|
148
|
+
xargs = { build: true }
|
156
149
|
DESCRIBED_CLASS.stub(:source, passthrough) do
|
157
150
|
result.clear && DESCRIBED_CLASS.send(:sources, :a, of_type: 1)
|
158
|
-
assert_equal([[:a, 1]], result)
|
151
|
+
assert_equal([[:a, 1, xargs]], result)
|
159
152
|
|
160
153
|
result.clear && DESCRIBED_CLASS.send(:sources, :a, :b, of_type: 1)
|
161
|
-
assert_equal([[:a, 1], [:b, 1]], result)
|
154
|
+
assert_equal([[:a, 1, xargs], [:b, 1, xargs]], result)
|
162
155
|
|
163
156
|
source_const.stub(:find_for!, 2) do
|
164
157
|
result.clear && DESCRIBED_CLASS.send(:sources, %i[c d e])
|
165
|
-
assert_equal([[:c, 2], [:d, 2], [:e, 2]], result)
|
158
|
+
assert_equal([[:c, 2, xargs], [:d, 2, xargs], [:e, 2, xargs]], result)
|
166
159
|
end
|
167
160
|
end
|
168
161
|
end
|
data/test/graphql/source_test.rb
CHANGED
@@ -24,21 +24,13 @@ class GraphQL_SourceTest < GraphQL::TestCase
|
|
24
24
|
end
|
25
25
|
|
26
26
|
def test_base_name
|
27
|
-
described_class.stub(:abstract?, true) do
|
28
|
-
assert_nil(described_class.base_name)
|
29
|
-
end
|
30
|
-
|
31
27
|
described_class.stub(:abstract?, false) do
|
32
28
|
assert_equal('DESCRIBED', described_class.base_name)
|
33
29
|
end
|
34
30
|
end
|
35
31
|
|
36
32
|
def test_inherited
|
37
|
-
|
38
|
-
|
39
|
-
other = unmapped_class(described_class)
|
40
|
-
refute_predicate(other, :abstract?)
|
41
|
-
assert_pending(described_class, other)
|
33
|
+
skip
|
42
34
|
end
|
43
35
|
|
44
36
|
def test_find_for_bang
|
@@ -66,32 +58,13 @@ class GraphQL_SourceTest < GraphQL::TestCase
|
|
66
58
|
end
|
67
59
|
|
68
60
|
def test_built_ask
|
69
|
-
|
70
|
-
|
71
|
-
described_class.stub_ivar(:@built, false) do
|
72
|
-
refute_predicate(described_class, :built?)
|
73
|
-
end
|
74
|
-
|
75
|
-
described_class.stub_ivar(:@built, true) do
|
76
|
-
assert_predicate(described_class, :built?)
|
77
|
-
end
|
61
|
+
skip
|
78
62
|
end
|
79
63
|
|
80
64
|
def test_attach_fields_bang
|
81
65
|
skip
|
82
66
|
end
|
83
67
|
|
84
|
-
def test_refresh_schemas_bang
|
85
|
-
described_class.stub(:namespaces, [:base]) do
|
86
|
-
schema = unmapped_class(Rails::GraphQL::Schema)
|
87
|
-
Rails::GraphQL::Schema.stub(:find, schema) do
|
88
|
-
described_class.refresh_schemas!
|
89
|
-
result = described_class.instance_variable_get(:@schemas)
|
90
|
-
assert_equal({ base: schema }, result)
|
91
|
-
end
|
92
|
-
end
|
93
|
-
end
|
94
|
-
|
95
68
|
def test_find_type_bang
|
96
69
|
described_class.stub(:namespaces, :a) do
|
97
70
|
Rails::GraphQL.stub(:type_map, double(fetch!: passallthrough)) do
|
@@ -122,16 +95,16 @@ class GraphQL_SourceTest < GraphQL::TestCase
|
|
122
95
|
skip
|
123
96
|
end
|
124
97
|
|
125
|
-
def
|
98
|
+
def test_skip_from
|
126
99
|
hash_list = Hash.new { |h, k| h[k] = Set.new }
|
127
100
|
described_class.stub(:segmented_skip_fields, -> { hash_list }) do
|
128
|
-
assert_equal(Set[:a], described_class.send(:
|
129
|
-
assert_equal(Set[:b], described_class.send(:
|
130
|
-
assert_equal(Set[:b, :c, :d], described_class.send(:
|
101
|
+
assert_equal(Set[:a], described_class.send(:skip_from, 1, :a))
|
102
|
+
assert_equal(Set[:b], described_class.send(:skip_from, 2, 'b'))
|
103
|
+
assert_equal(Set[:b, :c, :d], described_class.send(:skip_from, 2, 'c', :d))
|
131
104
|
end
|
132
105
|
end
|
133
106
|
|
134
|
-
def
|
107
|
+
def test_step
|
135
108
|
skip
|
136
109
|
end
|
137
110
|
|
@@ -147,7 +120,7 @@ class GraphQL_SourceTest < GraphQL::TestCase
|
|
147
120
|
def test_override
|
148
121
|
sequence = []
|
149
122
|
described_class.stub(:skip, ->(*args) { sequence += args }) do
|
150
|
-
described_class.stub(:
|
123
|
+
described_class.stub(:step, ->(*args, &block) { sequence += args << block }) do
|
151
124
|
described_class.send(:override, :start, &passthrough)
|
152
125
|
assert_equal(0, described_class.hooks[:start].size)
|
153
126
|
assert_equal([:start, :start, passthrough], sequence)
|
@@ -181,50 +154,10 @@ class GraphQL_SourceTest < GraphQL::TestCase
|
|
181
154
|
end
|
182
155
|
end
|
183
156
|
|
184
|
-
def test_skips_for
|
185
|
-
described_class.stub(:all_segmented_skip_fields, { input: Set[:a] }) do
|
186
|
-
described_class.stub(:all_skip_fields, Set[:b]) do
|
187
|
-
result = described_class.send(:skips_for, double(kind: :input_object))
|
188
|
-
assert_equal(Set[:b, :a], result)
|
189
|
-
|
190
|
-
result = described_class.send(:skips_for, double(kind: :object))
|
191
|
-
assert_equal(Set[:b], result)
|
192
|
-
end
|
193
|
-
end
|
194
|
-
end
|
195
|
-
|
196
|
-
def test_pending_ask
|
197
|
-
refute_predicate(source_const, :pending?)
|
198
|
-
|
199
|
-
sample = unmapped_class(source_const)
|
200
|
-
assert_predicate(source_const, :pending?)
|
201
|
-
end
|
202
|
-
|
203
|
-
def test_build_pending_bang
|
204
|
-
built = [false, false]
|
205
|
-
object1 = double(build!: -> { built[0] = true }, abstract?: false)
|
206
|
-
object2 = double(build!: -> { built[1] = true }, abstract?: true)
|
207
|
-
|
208
|
-
described_class.stub(:pending, [object1, object2]) do
|
209
|
-
described_class.send(:build_pending!)
|
210
|
-
assert_equal([true, false], built)
|
211
|
-
end
|
212
|
-
end
|
213
|
-
|
214
157
|
def test_build_bang
|
215
158
|
skip
|
216
159
|
end
|
217
160
|
|
218
|
-
def test_run_hooks
|
219
|
-
assert_respond_to(described_class, :run_start_hooks)
|
220
|
-
assert_respond_to(described_class, :run_finish_hooks)
|
221
|
-
assert_respond_to(described_class, :run_object_hooks)
|
222
|
-
assert_respond_to(described_class, :run_input_hooks)
|
223
|
-
assert_respond_to(described_class, :run_query_hooks)
|
224
|
-
assert_respond_to(described_class, :run_mutation_hooks)
|
225
|
-
assert_respond_to(described_class, :run_subscription_hooks)
|
226
|
-
end
|
227
|
-
|
228
161
|
protected
|
229
162
|
|
230
163
|
def assert_pending(*items)
|