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.
Files changed (297) hide show
  1. checksums.yaml +4 -4
  2. data/ext/console.rb +18 -0
  3. data/ext/extconf.h +3 -0
  4. data/ext/extconf.rb +1 -54
  5. data/ext/gql_parser.c +646 -0
  6. data/ext/shared.c +482 -0
  7. data/ext/shared.h +177 -0
  8. data/lib/gql_parser.so +0 -0
  9. data/lib/rails/graphql/adapters/mysql_adapter.rb +59 -0
  10. data/lib/rails/graphql/adapters/pg_adapter.rb +25 -22
  11. data/lib/rails/graphql/adapters/sqlite_adapter.rb +17 -14
  12. data/lib/rails/graphql/alternative/field_set.rb +36 -0
  13. data/lib/rails/graphql/alternative/mutation.rb +17 -0
  14. data/lib/rails/graphql/alternative/query.rb +93 -0
  15. data/lib/rails/graphql/alternative/subscription.rb +17 -0
  16. data/lib/rails/graphql/alternative.rb +20 -0
  17. data/lib/rails/graphql/argument.rb +21 -24
  18. data/lib/rails/graphql/callback.rb +24 -9
  19. data/lib/rails/graphql/collectors/hash_collector.rb +14 -6
  20. data/lib/rails/graphql/collectors/idented_collector.rb +10 -7
  21. data/lib/rails/graphql/collectors/json_collector.rb +22 -17
  22. data/lib/rails/graphql/collectors.rb +4 -4
  23. data/lib/rails/graphql/config.rb +130 -15
  24. data/lib/rails/graphql/directive/cached_directive.rb +33 -0
  25. data/lib/rails/graphql/directive/deprecated_directive.rb +10 -10
  26. data/lib/rails/graphql/directive/include_directive.rb +5 -4
  27. data/lib/rails/graphql/directive/skip_directive.rb +5 -4
  28. data/lib/rails/graphql/directive.rb +118 -63
  29. data/lib/rails/graphql/errors.rb +33 -4
  30. data/lib/rails/graphql/event.rb +16 -5
  31. data/lib/rails/graphql/field/authorized_field.rb +19 -3
  32. data/lib/rails/graphql/field/input_field.rb +11 -10
  33. data/lib/rails/graphql/field/mutation_field.rb +42 -7
  34. data/lib/rails/graphql/field/output_field.rb +102 -13
  35. data/lib/rails/graphql/field/proxied_field.rb +31 -22
  36. data/lib/rails/graphql/field/resolved_field.rb +26 -24
  37. data/lib/rails/graphql/field/scoped_config.rb +10 -4
  38. data/lib/rails/graphql/field/subscription_field.rb +140 -0
  39. data/lib/rails/graphql/field/typed_field.rb +43 -22
  40. data/lib/rails/graphql/field.rb +70 -56
  41. data/lib/rails/graphql/global_id.rb +85 -0
  42. data/lib/rails/graphql/helpers/attribute_delegator.rb +5 -5
  43. data/lib/rails/graphql/helpers/inherited_collection/array.rb +50 -0
  44. data/lib/rails/graphql/helpers/inherited_collection/base.rb +43 -0
  45. data/lib/rails/graphql/helpers/inherited_collection/hash.rb +87 -0
  46. data/lib/rails/graphql/helpers/inherited_collection.rb +25 -76
  47. data/lib/rails/graphql/helpers/instantiable.rb +15 -0
  48. data/lib/rails/graphql/helpers/leaf_from_ar.rb +7 -7
  49. data/lib/rails/graphql/helpers/registerable.rb +44 -62
  50. data/lib/rails/graphql/helpers/unregisterable.rb +16 -0
  51. data/lib/rails/graphql/helpers/with_arguments.rb +31 -27
  52. data/lib/rails/graphql/helpers/with_assignment.rb +6 -6
  53. data/lib/rails/graphql/helpers/with_callbacks.rb +25 -8
  54. data/lib/rails/graphql/helpers/with_description.rb +71 -0
  55. data/lib/rails/graphql/helpers/with_directives.rb +54 -30
  56. data/lib/rails/graphql/helpers/with_events.rb +21 -23
  57. data/lib/rails/graphql/helpers/with_fields.rb +76 -22
  58. data/lib/rails/graphql/helpers/with_global_id.rb +22 -0
  59. data/lib/rails/graphql/helpers/with_name.rb +43 -0
  60. data/lib/rails/graphql/helpers/with_namespace.rb +7 -4
  61. data/lib/rails/graphql/helpers/with_owner.rb +8 -7
  62. data/lib/rails/graphql/helpers/with_schema_fields.rb +137 -55
  63. data/lib/rails/graphql/helpers/with_validator.rb +9 -9
  64. data/lib/rails/graphql/helpers.rb +10 -3
  65. data/lib/rails/graphql/introspection.rb +43 -36
  66. data/lib/rails/graphql/railtie.rb +88 -33
  67. data/lib/rails/graphql/railties/base_generator.rb +3 -9
  68. data/lib/rails/graphql/railties/channel.rb +157 -0
  69. data/lib/rails/graphql/railties/controller.rb +62 -17
  70. data/lib/rails/graphql/railties/controller_runtime.rb +5 -5
  71. data/lib/rails/graphql/railties/log_subscriber.rb +81 -14
  72. data/lib/rails/graphql/request/arguments.rb +24 -49
  73. data/lib/rails/graphql/request/backtrace.rb +191 -0
  74. data/lib/rails/graphql/request/component/field.rb +86 -65
  75. data/lib/rails/graphql/request/component/fragment.rb +72 -24
  76. data/lib/rails/graphql/request/component/operation/subscription.rb +164 -4
  77. data/lib/rails/graphql/request/component/operation.rb +63 -31
  78. data/lib/rails/graphql/request/component/spread.rb +68 -25
  79. data/lib/rails/graphql/request/component/typename.rb +27 -12
  80. data/lib/rails/graphql/request/component.rb +75 -36
  81. data/lib/rails/graphql/request/context.rb +18 -8
  82. data/lib/rails/graphql/request/errors.rb +16 -6
  83. data/lib/rails/graphql/request/event.rb +19 -8
  84. data/lib/rails/graphql/request/helpers/directives.rb +68 -27
  85. data/lib/rails/graphql/request/helpers/selection_set.rb +51 -25
  86. data/lib/rails/graphql/request/helpers/value_writers.rb +18 -16
  87. data/lib/rails/graphql/request/prepared_data.rb +98 -0
  88. data/lib/rails/graphql/request/steps/authorizable.rb +24 -14
  89. data/lib/rails/graphql/request/steps/organizable.rb +110 -48
  90. data/lib/rails/graphql/request/steps/{prepareable.rb → preparable.rb} +20 -7
  91. data/lib/rails/graphql/request/steps/{resolveable.rb → resolvable.rb} +15 -6
  92. data/lib/rails/graphql/request/strategy/cached_strategy.rb +64 -0
  93. data/lib/rails/graphql/request/strategy/dynamic_instance.rb +6 -6
  94. data/lib/rails/graphql/request/strategy/multi_query_strategy.rb +6 -13
  95. data/lib/rails/graphql/request/strategy/sequenced_strategy.rb +9 -9
  96. data/lib/rails/graphql/request/strategy.rb +131 -75
  97. data/lib/rails/graphql/request/subscription.rb +80 -0
  98. data/lib/rails/graphql/request.rb +305 -86
  99. data/lib/rails/graphql/schema.rb +240 -48
  100. data/lib/rails/graphql/shortcuts.rb +22 -3
  101. data/lib/rails/graphql/source/active_record/builders.rb +49 -35
  102. data/lib/rails/graphql/source/active_record_source.rb +70 -54
  103. data/lib/rails/graphql/source/base.rb +111 -0
  104. data/lib/rails/graphql/source/builder.rb +128 -0
  105. data/lib/rails/graphql/source/scoped_arguments.rb +31 -19
  106. data/lib/rails/graphql/source.rb +89 -213
  107. data/lib/rails/graphql/subscription/provider/action_cable.rb +112 -0
  108. data/lib/rails/graphql/subscription/provider/base.rb +191 -0
  109. data/lib/rails/graphql/subscription/provider.rb +18 -0
  110. data/lib/rails/graphql/subscription/store/base.rb +145 -0
  111. data/lib/rails/graphql/subscription/store/memory.rb +127 -0
  112. data/lib/rails/graphql/subscription/store.rb +19 -0
  113. data/lib/rails/graphql/subscription.rb +17 -0
  114. data/lib/rails/graphql/to_gql.rb +29 -32
  115. data/lib/rails/graphql/type/enum/directive_location_enum.rb +11 -11
  116. data/lib/rails/graphql/type/enum/type_kind_enum.rb +3 -3
  117. data/lib/rails/graphql/type/enum.rb +34 -48
  118. data/lib/rails/graphql/type/input.rb +74 -23
  119. data/lib/rails/graphql/type/interface.rb +16 -26
  120. data/lib/rails/graphql/type/object/directive_object.rb +4 -4
  121. data/lib/rails/graphql/type/object/enum_value_object.rb +3 -3
  122. data/lib/rails/graphql/type/object/field_object.rb +24 -6
  123. data/lib/rails/graphql/type/object/input_value_object.rb +3 -3
  124. data/lib/rails/graphql/type/object/schema_object.rb +5 -8
  125. data/lib/rails/graphql/type/object/type_object.rb +29 -19
  126. data/lib/rails/graphql/type/object.rb +26 -23
  127. data/lib/rails/graphql/type/scalar/any_scalar.rb +30 -0
  128. data/lib/rails/graphql/type/scalar/bigint_scalar.rb +5 -5
  129. data/lib/rails/graphql/type/scalar/binary_scalar.rb +3 -3
  130. data/lib/rails/graphql/type/scalar/boolean_scalar.rb +8 -8
  131. data/lib/rails/graphql/type/scalar/date_scalar.rb +3 -3
  132. data/lib/rails/graphql/type/scalar/date_time_scalar.rb +3 -3
  133. data/lib/rails/graphql/type/scalar/decimal_scalar.rb +3 -3
  134. data/lib/rails/graphql/type/scalar/float_scalar.rb +5 -5
  135. data/lib/rails/graphql/type/scalar/id_scalar.rb +6 -5
  136. data/lib/rails/graphql/type/scalar/int_scalar.rb +6 -5
  137. data/lib/rails/graphql/type/scalar/json_scalar.rb +39 -0
  138. data/lib/rails/graphql/type/scalar/string_scalar.rb +18 -4
  139. data/lib/rails/graphql/type/scalar/time_scalar.rb +5 -5
  140. data/lib/rails/graphql/type/scalar.rb +25 -22
  141. data/lib/rails/graphql/type/union.rb +14 -16
  142. data/lib/rails/graphql/type.rb +34 -25
  143. data/lib/rails/graphql/type_map.rb +256 -164
  144. data/lib/rails/graphql/uri.rb +166 -0
  145. data/lib/rails/graphql/version.rb +15 -3
  146. data/lib/rails/graphql.rake +3 -0
  147. data/lib/rails/graphql.rb +85 -52
  148. data/lib/rails-graphql.rb +1 -1
  149. data/test/assets/en.yml +29 -0
  150. data/test/assets/introspection-mem.txt +1 -1
  151. data/test/assets/mem.gql +18 -45
  152. data/test/assets/mysql.gql +392 -0
  153. data/test/assets/sqlite.gql +21 -12
  154. data/test/assets/translate.gql +335 -0
  155. data/test/config.rb +18 -8
  156. data/test/graphql/schema_test.rb +12 -19
  157. data/test/graphql/source_test.rb +8 -75
  158. data/test/graphql/type/enum_test.rb +207 -203
  159. data/test/graphql/type/input_test.rb +14 -9
  160. data/test/graphql/type/interface_test.rb +4 -4
  161. data/test/graphql/type/scalar/any_scalar_test.rb +38 -0
  162. data/test/graphql/type/scalar/boolean_scalar_test.rb +6 -3
  163. data/test/graphql/type/scalar/json_scalar_test.rb +23 -0
  164. data/test/graphql/type_map_test.rb +51 -66
  165. data/test/graphql/type_test.rb +0 -19
  166. data/test/graphql_test.rb +1 -1
  167. data/test/integration/{authorization/authorization_test.rb → authorization_test.rb} +40 -14
  168. data/test/integration/config.rb +36 -3
  169. data/test/integration/customization_test.rb +39 -0
  170. data/test/integration/global_id_test.rb +99 -0
  171. data/test/integration/memory/star_wars_introspection_test.rb +24 -16
  172. data/test/integration/memory/star_wars_query_test.rb +54 -3
  173. data/test/integration/memory/star_wars_validation_test.rb +1 -1
  174. data/test/integration/mysql/star_wars_introspection_test.rb +25 -0
  175. data/test/integration/persisted_query_test.rb +87 -0
  176. data/test/integration/resolver_precedence_test.rb +154 -0
  177. data/test/integration/schemas/memory.rb +22 -7
  178. data/test/integration/schemas/mysql.rb +62 -0
  179. data/test/integration/schemas/sqlite.rb +21 -12
  180. data/test/integration/sqlite/star_wars_global_id_test.rb +83 -0
  181. data/test/integration/sqlite/star_wars_introspection_test.rb +10 -0
  182. data/test/integration/sqlite/star_wars_query_test.rb +14 -1
  183. data/test/integration/translate_test.rb +61 -0
  184. data/test/test_ext.rb +16 -13
  185. metadata +108 -157
  186. data/ext/depend +0 -3
  187. data/ext/graphqlparser/Ast.cpp +0 -346
  188. data/ext/graphqlparser/Ast.h +0 -1214
  189. data/ext/graphqlparser/AstNode.h +0 -36
  190. data/ext/graphqlparser/AstVisitor.h +0 -137
  191. data/ext/graphqlparser/GraphQLParser.cpp +0 -76
  192. data/ext/graphqlparser/GraphQLParser.h +0 -55
  193. data/ext/graphqlparser/JsonVisitor.cpp +0 -161
  194. data/ext/graphqlparser/JsonVisitor.cpp.inc +0 -456
  195. data/ext/graphqlparser/JsonVisitor.h +0 -121
  196. data/ext/graphqlparser/JsonVisitor.h.inc +0 -110
  197. data/ext/graphqlparser/VERSION +0 -1
  198. data/ext/graphqlparser/c/GraphQLAst.cpp +0 -324
  199. data/ext/graphqlparser/c/GraphQLAst.h +0 -180
  200. data/ext/graphqlparser/c/GraphQLAstForEachConcreteType.h +0 -44
  201. data/ext/graphqlparser/c/GraphQLAstNode.cpp +0 -25
  202. data/ext/graphqlparser/c/GraphQLAstNode.h +0 -33
  203. data/ext/graphqlparser/c/GraphQLAstToJSON.cpp +0 -21
  204. data/ext/graphqlparser/c/GraphQLAstToJSON.h +0 -24
  205. data/ext/graphqlparser/c/GraphQLAstVisitor.cpp +0 -55
  206. data/ext/graphqlparser/c/GraphQLAstVisitor.h +0 -53
  207. data/ext/graphqlparser/c/GraphQLParser.cpp +0 -35
  208. data/ext/graphqlparser/c/GraphQLParser.h +0 -54
  209. data/ext/graphqlparser/dump_json_ast.cpp +0 -48
  210. data/ext/graphqlparser/lexer.lpp +0 -324
  211. data/ext/graphqlparser/parser.ypp +0 -693
  212. data/ext/graphqlparser/parsergen/lexer.cpp +0 -2633
  213. data/ext/graphqlparser/parsergen/lexer.h +0 -528
  214. data/ext/graphqlparser/parsergen/location.hh +0 -189
  215. data/ext/graphqlparser/parsergen/parser.tab.cpp +0 -3300
  216. data/ext/graphqlparser/parsergen/parser.tab.hpp +0 -646
  217. data/ext/graphqlparser/parsergen/position.hh +0 -179
  218. data/ext/graphqlparser/parsergen/stack.hh +0 -156
  219. data/ext/graphqlparser/syntaxdefs.h +0 -19
  220. data/ext/libgraphqlparser/AstNode.h +0 -36
  221. data/ext/libgraphqlparser/CMakeLists.txt +0 -148
  222. data/ext/libgraphqlparser/CONTRIBUTING.md +0 -23
  223. data/ext/libgraphqlparser/GraphQLParser.cpp +0 -76
  224. data/ext/libgraphqlparser/GraphQLParser.h +0 -55
  225. data/ext/libgraphqlparser/JsonVisitor.cpp +0 -161
  226. data/ext/libgraphqlparser/JsonVisitor.h +0 -121
  227. data/ext/libgraphqlparser/LICENSE +0 -22
  228. data/ext/libgraphqlparser/README.clang-tidy +0 -7
  229. data/ext/libgraphqlparser/README.md +0 -84
  230. data/ext/libgraphqlparser/ast/ast.ast +0 -203
  231. data/ext/libgraphqlparser/ast/ast.py +0 -61
  232. data/ext/libgraphqlparser/ast/c.py +0 -100
  233. data/ext/libgraphqlparser/ast/c.pyc +0 -0
  234. data/ext/libgraphqlparser/ast/c_impl.py +0 -61
  235. data/ext/libgraphqlparser/ast/c_impl.pyc +0 -0
  236. data/ext/libgraphqlparser/ast/c_visitor_impl.py +0 -39
  237. data/ext/libgraphqlparser/ast/c_visitor_impl.pyc +0 -0
  238. data/ext/libgraphqlparser/ast/casing.py +0 -26
  239. data/ext/libgraphqlparser/ast/casing.pyc +0 -0
  240. data/ext/libgraphqlparser/ast/cxx.py +0 -197
  241. data/ext/libgraphqlparser/ast/cxx.pyc +0 -0
  242. data/ext/libgraphqlparser/ast/cxx_impl.py +0 -61
  243. data/ext/libgraphqlparser/ast/cxx_impl.pyc +0 -0
  244. data/ext/libgraphqlparser/ast/cxx_json_visitor_header.py +0 -42
  245. data/ext/libgraphqlparser/ast/cxx_json_visitor_header.pyc +0 -0
  246. data/ext/libgraphqlparser/ast/cxx_json_visitor_impl.py +0 -80
  247. data/ext/libgraphqlparser/ast/cxx_json_visitor_impl.pyc +0 -0
  248. data/ext/libgraphqlparser/ast/cxx_visitor.py +0 -64
  249. data/ext/libgraphqlparser/ast/cxx_visitor.pyc +0 -0
  250. data/ext/libgraphqlparser/ast/js.py +0 -65
  251. data/ext/libgraphqlparser/ast/license.py +0 -10
  252. data/ext/libgraphqlparser/ast/license.pyc +0 -0
  253. data/ext/libgraphqlparser/c/GraphQLAstNode.cpp +0 -25
  254. data/ext/libgraphqlparser/c/GraphQLAstNode.h +0 -33
  255. data/ext/libgraphqlparser/c/GraphQLAstToJSON.cpp +0 -21
  256. data/ext/libgraphqlparser/c/GraphQLAstToJSON.h +0 -24
  257. data/ext/libgraphqlparser/c/GraphQLAstVisitor.cpp +0 -55
  258. data/ext/libgraphqlparser/c/GraphQLAstVisitor.h +0 -53
  259. data/ext/libgraphqlparser/c/GraphQLParser.cpp +0 -35
  260. data/ext/libgraphqlparser/c/GraphQLParser.h +0 -54
  261. data/ext/libgraphqlparser/clang-tidy-all.sh +0 -3
  262. data/ext/libgraphqlparser/cmake/version.cmake +0 -16
  263. data/ext/libgraphqlparser/dump_json_ast.cpp +0 -48
  264. data/ext/libgraphqlparser/go/README.md +0 -20
  265. data/ext/libgraphqlparser/go/callbacks.go +0 -18
  266. data/ext/libgraphqlparser/go/gotest.go +0 -64
  267. data/ext/libgraphqlparser/lexer.lpp +0 -324
  268. data/ext/libgraphqlparser/libgraphqlparser.pc.in +0 -11
  269. data/ext/libgraphqlparser/parser.ypp +0 -693
  270. data/ext/libgraphqlparser/parsergen/lexer.cpp +0 -2633
  271. data/ext/libgraphqlparser/parsergen/lexer.h +0 -528
  272. data/ext/libgraphqlparser/parsergen/location.hh +0 -189
  273. data/ext/libgraphqlparser/parsergen/parser.tab.cpp +0 -3300
  274. data/ext/libgraphqlparser/parsergen/parser.tab.hpp +0 -646
  275. data/ext/libgraphqlparser/parsergen/position.hh +0 -179
  276. data/ext/libgraphqlparser/parsergen/stack.hh +0 -156
  277. data/ext/libgraphqlparser/python/CMakeLists.txt +0 -14
  278. data/ext/libgraphqlparser/python/README.md +0 -5
  279. data/ext/libgraphqlparser/python/example.py +0 -31
  280. data/ext/libgraphqlparser/syntaxdefs.h +0 -19
  281. data/ext/libgraphqlparser/test/BuildCAPI.c +0 -5
  282. data/ext/libgraphqlparser/test/CMakeLists.txt +0 -25
  283. data/ext/libgraphqlparser/test/JsonVisitorTests.cpp +0 -28
  284. data/ext/libgraphqlparser/test/ParserTests.cpp +0 -352
  285. data/ext/libgraphqlparser/test/kitchen-sink.graphql +0 -59
  286. data/ext/libgraphqlparser/test/kitchen-sink.json +0 -1
  287. data/ext/libgraphqlparser/test/schema-kitchen-sink.graphql +0 -78
  288. data/ext/libgraphqlparser/test/schema-kitchen-sink.json +0 -1
  289. data/ext/libgraphqlparser/test/valgrind.supp +0 -33
  290. data/ext/version.cpp +0 -21
  291. data/lib/graphqlparser.so +0 -0
  292. data/lib/rails/graphql/native/functions.rb +0 -38
  293. data/lib/rails/graphql/native/location.rb +0 -41
  294. data/lib/rails/graphql/native/pointers.rb +0 -23
  295. data/lib/rails/graphql/native/visitor.rb +0 -349
  296. data/lib/rails/graphql/native.rb +0 -56
  297. 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/introspection', '/graphql/schema']
8
- add_group 'Source', '/graphql/source'
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 'Request', '/graphql/request'
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 'pry'
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 ensurance
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
- double(**others.unshift(pass).map { |m| [m, passthrough] }.to_h)
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)
@@ -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(:@namespaces) { set_namespace('a') }
40
- assert_equal(Set[:a], result)
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(:@namespaces) { set_namespace('b', 'c') }
43
- assert_equal(Set[:b], result)
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
- DESCRIBED_CLASS.stub(:namespaces, []) do
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.stub(:namespaces, [1]) do
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
@@ -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
- assert_pending([])
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
- refute_predicate(described_class, :built?)
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 test_skip_on
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(:skip_on, 1, :a))
129
- assert_equal(Set[:b], described_class.send(:skip_on, 2, 'b'))
130
- assert_equal(Set[:b, :c, :d], described_class.send(:skip_on, 2, 'c', :d))
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 test_on
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(:on, ->(*args, &block) { sequence += args << block }) do
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)