graphql 1.10.2 → 2.0.21

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.

Files changed (402) hide show
  1. checksums.yaml +4 -4
  2. data/lib/generators/graphql/core.rb +21 -10
  3. data/lib/generators/graphql/enum_generator.rb +4 -10
  4. data/lib/generators/graphql/field_extractor.rb +31 -0
  5. data/lib/generators/graphql/input_generator.rb +50 -0
  6. data/lib/generators/graphql/install/mutation_root_generator.rb +34 -0
  7. data/lib/generators/graphql/{templates → install/templates}/base_mutation.erb +2 -0
  8. data/lib/generators/graphql/{templates → install/templates}/mutation_type.erb +2 -0
  9. data/lib/generators/graphql/install_generator.rb +45 -8
  10. data/lib/generators/graphql/interface_generator.rb +7 -7
  11. data/lib/generators/graphql/loader_generator.rb +1 -0
  12. data/lib/generators/graphql/mutation_create_generator.rb +22 -0
  13. data/lib/generators/graphql/mutation_delete_generator.rb +22 -0
  14. data/lib/generators/graphql/mutation_generator.rb +6 -30
  15. data/lib/generators/graphql/mutation_update_generator.rb +22 -0
  16. data/lib/generators/graphql/object_generator.rb +28 -12
  17. data/lib/generators/graphql/orm_mutations_base.rb +40 -0
  18. data/lib/generators/graphql/relay.rb +49 -0
  19. data/lib/generators/graphql/relay_generator.rb +21 -0
  20. data/lib/generators/graphql/scalar_generator.rb +4 -2
  21. data/lib/generators/graphql/templates/base_argument.erb +2 -0
  22. data/lib/generators/graphql/templates/base_connection.erb +8 -0
  23. data/lib/generators/graphql/templates/base_edge.erb +8 -0
  24. data/lib/generators/graphql/templates/base_enum.erb +2 -0
  25. data/lib/generators/graphql/templates/base_field.erb +2 -0
  26. data/lib/generators/graphql/templates/base_input_object.erb +2 -0
  27. data/lib/generators/graphql/templates/base_interface.erb +2 -0
  28. data/lib/generators/graphql/templates/base_object.erb +2 -0
  29. data/lib/generators/graphql/templates/base_scalar.erb +2 -0
  30. data/lib/generators/graphql/templates/base_union.erb +2 -0
  31. data/lib/generators/graphql/templates/enum.erb +7 -1
  32. data/lib/generators/graphql/templates/graphql_controller.erb +16 -12
  33. data/lib/generators/graphql/templates/input.erb +9 -0
  34. data/lib/generators/graphql/templates/interface.erb +6 -2
  35. data/lib/generators/graphql/templates/loader.erb +2 -0
  36. data/lib/generators/graphql/templates/mutation.erb +3 -1
  37. data/lib/generators/graphql/templates/mutation_create.erb +20 -0
  38. data/lib/generators/graphql/templates/mutation_delete.erb +20 -0
  39. data/lib/generators/graphql/templates/mutation_update.erb +21 -0
  40. data/lib/generators/graphql/templates/node_type.erb +9 -0
  41. data/lib/generators/graphql/templates/object.erb +7 -3
  42. data/lib/generators/graphql/templates/query_type.erb +3 -3
  43. data/lib/generators/graphql/templates/scalar.erb +5 -1
  44. data/lib/generators/graphql/templates/schema.erb +24 -33
  45. data/lib/generators/graphql/templates/union.erb +6 -2
  46. data/lib/generators/graphql/type_generator.rb +47 -10
  47. data/lib/generators/graphql/union_generator.rb +5 -5
  48. data/lib/graphql/analysis/ast/field_usage.rb +30 -1
  49. data/lib/graphql/analysis/ast/max_query_complexity.rb +0 -1
  50. data/lib/graphql/analysis/ast/query_complexity.rb +125 -117
  51. data/lib/graphql/analysis/ast/query_depth.rb +0 -1
  52. data/lib/graphql/analysis/ast/visitor.rb +52 -36
  53. data/lib/graphql/analysis/ast.rb +7 -8
  54. data/lib/graphql/analysis.rb +0 -7
  55. data/lib/graphql/backtrace/inspect_result.rb +0 -1
  56. data/lib/graphql/backtrace/table.rb +31 -18
  57. data/lib/graphql/backtrace/trace.rb +96 -0
  58. data/lib/graphql/backtrace/traced_error.rb +0 -1
  59. data/lib/graphql/backtrace/tracer.rb +39 -9
  60. data/lib/graphql/backtrace.rb +26 -18
  61. data/lib/graphql/dataloader/null_dataloader.rb +24 -0
  62. data/lib/graphql/dataloader/request.rb +19 -0
  63. data/lib/graphql/dataloader/request_all.rb +19 -0
  64. data/lib/graphql/dataloader/source.rb +164 -0
  65. data/lib/graphql/dataloader.rb +311 -0
  66. data/lib/graphql/date_encoding_error.rb +16 -0
  67. data/lib/graphql/deprecation.rb +9 -0
  68. data/lib/graphql/dig.rb +1 -1
  69. data/lib/graphql/execution/errors.rb +77 -44
  70. data/lib/graphql/execution/interpreter/argument_value.rb +28 -0
  71. data/lib/graphql/execution/interpreter/arguments.rb +88 -0
  72. data/lib/graphql/execution/interpreter/arguments_cache.rb +104 -0
  73. data/lib/graphql/execution/interpreter/handles_raw_value.rb +18 -0
  74. data/lib/graphql/execution/interpreter/resolve.rb +62 -24
  75. data/lib/graphql/execution/interpreter/runtime.rb +826 -464
  76. data/lib/graphql/execution/interpreter.rb +206 -68
  77. data/lib/graphql/execution/lazy.rb +11 -21
  78. data/lib/graphql/execution/lookahead.rb +55 -136
  79. data/lib/graphql/execution/multiplex.rb +6 -162
  80. data/lib/graphql/execution.rb +11 -4
  81. data/lib/graphql/filter.rb +7 -2
  82. data/lib/graphql/integer_decoding_error.rb +17 -0
  83. data/lib/graphql/integer_encoding_error.rb +18 -2
  84. data/lib/graphql/introspection/directive_location_enum.rb +2 -2
  85. data/lib/graphql/introspection/directive_type.rb +11 -5
  86. data/lib/graphql/introspection/dynamic_fields.rb +3 -8
  87. data/lib/graphql/introspection/entry_points.rb +4 -17
  88. data/lib/graphql/introspection/enum_value_type.rb +2 -2
  89. data/lib/graphql/introspection/field_type.rb +9 -5
  90. data/lib/graphql/introspection/input_value_type.rb +15 -3
  91. data/lib/graphql/introspection/introspection_query.rb +6 -92
  92. data/lib/graphql/introspection/schema_type.rb +11 -6
  93. data/lib/graphql/introspection/type_type.rb +31 -14
  94. data/lib/graphql/introspection.rb +100 -0
  95. data/lib/graphql/invalid_null_error.rb +18 -0
  96. data/lib/graphql/language/block_string.rb +20 -5
  97. data/lib/graphql/language/cache.rb +37 -0
  98. data/lib/graphql/language/document_from_schema_definition.rb +96 -44
  99. data/lib/graphql/language/lexer.rb +216 -1462
  100. data/lib/graphql/language/nodes.rb +126 -129
  101. data/lib/graphql/language/parser.rb +997 -933
  102. data/lib/graphql/language/parser.y +148 -118
  103. data/lib/graphql/language/printer.rb +48 -23
  104. data/lib/graphql/language/sanitized_printer.rb +222 -0
  105. data/lib/graphql/language/token.rb +0 -4
  106. data/lib/graphql/language/visitor.rb +192 -84
  107. data/lib/graphql/language.rb +2 -0
  108. data/lib/graphql/name_validator.rb +2 -7
  109. data/lib/graphql/pagination/active_record_relation_connection.rb +45 -3
  110. data/lib/graphql/pagination/array_connection.rb +6 -4
  111. data/lib/graphql/pagination/connection.rb +105 -23
  112. data/lib/graphql/pagination/connections.rb +62 -35
  113. data/lib/graphql/pagination/relation_connection.rb +88 -36
  114. data/lib/graphql/parse_error.rb +0 -1
  115. data/lib/graphql/query/context.rb +203 -198
  116. data/lib/graphql/query/fingerprint.rb +26 -0
  117. data/lib/graphql/query/input_validation_result.rb +33 -7
  118. data/lib/graphql/query/null_context.rb +22 -9
  119. data/lib/graphql/query/validation_pipeline.rb +16 -38
  120. data/lib/graphql/query/variable_validation_error.rb +3 -3
  121. data/lib/graphql/query/variables.rb +36 -12
  122. data/lib/graphql/query.rb +92 -44
  123. data/lib/graphql/railtie.rb +6 -102
  124. data/lib/graphql/rake_task/validate.rb +1 -1
  125. data/lib/graphql/rake_task.rb +41 -10
  126. data/lib/graphql/relay/range_add.rb +17 -10
  127. data/lib/graphql/relay.rb +0 -15
  128. data/lib/graphql/rubocop/graphql/base_cop.rb +36 -0
  129. data/lib/graphql/rubocop/graphql/default_null_true.rb +43 -0
  130. data/lib/graphql/rubocop/graphql/default_required_true.rb +43 -0
  131. data/lib/graphql/rubocop.rb +4 -0
  132. data/lib/graphql/schema/addition.rb +245 -0
  133. data/lib/graphql/schema/argument.rb +250 -46
  134. data/lib/graphql/schema/base_64_encoder.rb +2 -0
  135. data/lib/graphql/schema/build_from_definition/resolve_map.rb +3 -1
  136. data/lib/graphql/schema/build_from_definition.rb +243 -89
  137. data/lib/graphql/schema/directive/deprecated.rb +1 -1
  138. data/lib/graphql/schema/directive/feature.rb +1 -1
  139. data/lib/graphql/schema/directive/flagged.rb +57 -0
  140. data/lib/graphql/schema/directive/include.rb +1 -1
  141. data/lib/graphql/schema/directive/one_of.rb +12 -0
  142. data/lib/graphql/schema/directive/skip.rb +1 -1
  143. data/lib/graphql/schema/directive/transform.rb +14 -2
  144. data/lib/graphql/schema/directive.rb +108 -20
  145. data/lib/graphql/schema/enum.rb +105 -44
  146. data/lib/graphql/schema/enum_value.rb +15 -25
  147. data/lib/graphql/schema/field/connection_extension.rb +50 -30
  148. data/lib/graphql/schema/field/scope_extension.rb +1 -1
  149. data/lib/graphql/schema/field.rb +476 -331
  150. data/lib/graphql/schema/field_extension.rb +86 -2
  151. data/lib/graphql/schema/find_inherited_value.rb +6 -8
  152. data/lib/graphql/schema/finder.rb +5 -5
  153. data/lib/graphql/schema/input_object.rb +133 -121
  154. data/lib/graphql/schema/interface.rb +17 -45
  155. data/lib/graphql/schema/introspection_system.rb +3 -8
  156. data/lib/graphql/schema/late_bound_type.rb +8 -2
  157. data/lib/graphql/schema/list.rb +25 -8
  158. data/lib/graphql/schema/loader.rb +139 -103
  159. data/lib/graphql/schema/member/base_dsl_methods.rb +29 -35
  160. data/lib/graphql/schema/member/build_type.rb +19 -14
  161. data/lib/graphql/schema/member/has_arguments.rb +310 -26
  162. data/lib/graphql/schema/member/has_ast_node.rb +16 -1
  163. data/lib/graphql/schema/member/has_deprecation_reason.rb +24 -0
  164. data/lib/graphql/schema/member/has_directives.rb +118 -0
  165. data/lib/graphql/schema/member/has_fields.rb +164 -42
  166. data/lib/graphql/schema/member/has_interfaces.rb +129 -0
  167. data/lib/graphql/schema/member/has_unresolved_type_error.rb +15 -0
  168. data/lib/graphql/schema/member/has_validators.rb +57 -0
  169. data/lib/graphql/schema/member/relay_shortcuts.rb +47 -2
  170. data/lib/graphql/schema/member/type_system_helpers.rb +20 -3
  171. data/lib/graphql/schema/member/validates_input.rb +3 -3
  172. data/lib/graphql/schema/member.rb +6 -6
  173. data/lib/graphql/schema/mutation.rb +4 -9
  174. data/lib/graphql/schema/non_null.rb +12 -7
  175. data/lib/graphql/schema/object.rb +35 -69
  176. data/lib/graphql/schema/printer.rb +16 -34
  177. data/lib/graphql/schema/relay_classic_mutation.rb +90 -43
  178. data/lib/graphql/schema/resolver/has_payload_type.rb +51 -11
  179. data/lib/graphql/schema/resolver.rb +144 -79
  180. data/lib/graphql/schema/scalar.rb +27 -18
  181. data/lib/graphql/schema/subscription.rb +55 -26
  182. data/lib/graphql/schema/timeout.rb +45 -35
  183. data/lib/graphql/schema/type_expression.rb +1 -1
  184. data/lib/graphql/schema/type_membership.rb +21 -4
  185. data/lib/graphql/schema/union.rb +48 -13
  186. data/lib/graphql/schema/unique_within_type.rb +1 -2
  187. data/lib/graphql/schema/validator/allow_blank_validator.rb +29 -0
  188. data/lib/graphql/schema/validator/allow_null_validator.rb +26 -0
  189. data/lib/graphql/schema/validator/exclusion_validator.rb +33 -0
  190. data/lib/graphql/schema/validator/format_validator.rb +48 -0
  191. data/lib/graphql/schema/validator/inclusion_validator.rb +35 -0
  192. data/lib/graphql/schema/validator/length_validator.rb +59 -0
  193. data/lib/graphql/schema/validator/numericality_validator.rb +82 -0
  194. data/lib/graphql/schema/validator/required_validator.rb +82 -0
  195. data/lib/graphql/schema/validator.rb +171 -0
  196. data/lib/graphql/schema/warden.rb +185 -32
  197. data/lib/graphql/schema/wrapper.rb +0 -5
  198. data/lib/graphql/schema.rb +471 -1116
  199. data/lib/graphql/static_validation/all_rules.rb +3 -0
  200. data/lib/graphql/static_validation/base_visitor.rb +13 -27
  201. data/lib/graphql/static_validation/definition_dependencies.rb +7 -2
  202. data/lib/graphql/static_validation/error.rb +3 -1
  203. data/lib/graphql/static_validation/literal_validator.rb +69 -26
  204. data/lib/graphql/static_validation/rules/argument_literals_are_compatible.rb +44 -87
  205. data/lib/graphql/static_validation/rules/argument_literals_are_compatible_error.rb +22 -6
  206. data/lib/graphql/static_validation/rules/arguments_are_defined.rb +28 -22
  207. data/lib/graphql/static_validation/rules/arguments_are_defined_error.rb +4 -2
  208. data/lib/graphql/static_validation/rules/directives_are_defined.rb +12 -6
  209. data/lib/graphql/static_validation/rules/directives_are_in_valid_locations.rb +13 -13
  210. data/lib/graphql/static_validation/rules/fields_have_appropriate_selections.rb +12 -4
  211. data/lib/graphql/static_validation/rules/fields_will_merge.rb +92 -49
  212. data/lib/graphql/static_validation/rules/fields_will_merge_error.rb +25 -4
  213. data/lib/graphql/static_validation/rules/fragments_are_finite.rb +2 -2
  214. data/lib/graphql/static_validation/rules/input_object_names_are_unique.rb +30 -0
  215. data/lib/graphql/static_validation/rules/input_object_names_are_unique_error.rb +30 -0
  216. data/lib/graphql/static_validation/rules/one_of_input_objects_are_valid.rb +66 -0
  217. data/lib/graphql/static_validation/rules/one_of_input_objects_are_valid_error.rb +29 -0
  218. data/lib/graphql/static_validation/rules/query_root_exists.rb +17 -0
  219. data/lib/graphql/static_validation/rules/query_root_exists_error.rb +26 -0
  220. data/lib/graphql/static_validation/rules/required_arguments_are_present.rb +4 -2
  221. data/lib/graphql/static_validation/rules/required_input_object_attributes_are_present.rb +6 -7
  222. data/lib/graphql/static_validation/rules/unique_directives_per_location.rb +13 -7
  223. data/lib/graphql/static_validation/rules/variable_default_values_are_correctly_typed.rb +9 -10
  224. data/lib/graphql/static_validation/rules/variable_usages_are_allowed.rb +14 -8
  225. data/lib/graphql/static_validation/rules/variables_are_used_and_defined.rb +4 -2
  226. data/lib/graphql/static_validation/validation_context.rb +13 -3
  227. data/lib/graphql/static_validation/validation_timeout_error.rb +25 -0
  228. data/lib/graphql/static_validation/validator.rb +32 -20
  229. data/lib/graphql/static_validation.rb +1 -2
  230. data/lib/graphql/string_encoding_error.rb +13 -3
  231. data/lib/graphql/subscriptions/action_cable_subscriptions.rb +126 -19
  232. data/lib/graphql/subscriptions/broadcast_analyzer.rb +81 -0
  233. data/lib/graphql/subscriptions/default_subscription_resolve_extension.rb +58 -0
  234. data/lib/graphql/subscriptions/event.rb +81 -35
  235. data/lib/graphql/subscriptions/instrumentation.rb +0 -52
  236. data/lib/graphql/subscriptions/serialize.rb +53 -6
  237. data/lib/graphql/subscriptions.rb +113 -58
  238. data/lib/graphql/tracing/active_support_notifications_trace.rb +16 -0
  239. data/lib/graphql/tracing/active_support_notifications_tracing.rb +8 -21
  240. data/lib/graphql/tracing/appoptics_trace.rb +231 -0
  241. data/lib/graphql/tracing/appoptics_tracing.rb +173 -0
  242. data/lib/graphql/tracing/appsignal_trace.rb +77 -0
  243. data/lib/graphql/tracing/appsignal_tracing.rb +15 -0
  244. data/lib/graphql/tracing/data_dog_trace.rb +148 -0
  245. data/lib/graphql/tracing/data_dog_tracing.rb +26 -2
  246. data/lib/graphql/tracing/legacy_trace.rb +65 -0
  247. data/lib/graphql/tracing/new_relic_trace.rb +75 -0
  248. data/lib/graphql/tracing/new_relic_tracing.rb +1 -12
  249. data/lib/graphql/tracing/notifications_trace.rb +42 -0
  250. data/lib/graphql/tracing/notifications_tracing.rb +59 -0
  251. data/lib/graphql/tracing/platform_trace.rb +109 -0
  252. data/lib/graphql/tracing/platform_tracing.rb +64 -43
  253. data/lib/graphql/tracing/prometheus_trace.rb +89 -0
  254. data/lib/graphql/tracing/prometheus_tracing/graphql_collector.rb +5 -2
  255. data/lib/graphql/tracing/prometheus_tracing.rb +3 -3
  256. data/lib/graphql/tracing/scout_trace.rb +72 -0
  257. data/lib/graphql/tracing/scout_tracing.rb +11 -0
  258. data/lib/graphql/tracing/statsd_trace.rb +56 -0
  259. data/lib/graphql/tracing/statsd_tracing.rb +42 -0
  260. data/lib/graphql/tracing/trace.rb +75 -0
  261. data/lib/graphql/tracing.rb +23 -71
  262. data/lib/graphql/type_kinds.rb +6 -3
  263. data/lib/graphql/types/big_int.rb +5 -1
  264. data/lib/graphql/types/int.rb +10 -3
  265. data/lib/graphql/types/iso_8601_date.rb +20 -9
  266. data/lib/graphql/types/iso_8601_date_time.rb +36 -10
  267. data/lib/graphql/types/relay/base_connection.rb +18 -92
  268. data/lib/graphql/types/relay/base_edge.rb +2 -34
  269. data/lib/graphql/types/relay/connection_behaviors.rb +176 -0
  270. data/lib/graphql/types/relay/edge_behaviors.rb +75 -0
  271. data/lib/graphql/types/relay/has_node_field.rb +41 -0
  272. data/lib/graphql/types/relay/has_nodes_field.rb +41 -0
  273. data/lib/graphql/types/relay/node.rb +2 -4
  274. data/lib/graphql/types/relay/node_behaviors.rb +25 -0
  275. data/lib/graphql/types/relay/page_info.rb +2 -14
  276. data/lib/graphql/types/relay/page_info_behaviors.rb +30 -0
  277. data/lib/graphql/types/relay.rb +10 -5
  278. data/lib/graphql/types/string.rb +8 -2
  279. data/lib/graphql/unauthorized_error.rb +2 -2
  280. data/lib/graphql/version.rb +1 -1
  281. data/lib/graphql.rb +54 -65
  282. data/readme.md +3 -6
  283. metadata +116 -236
  284. data/lib/graphql/analysis/analyze_query.rb +0 -91
  285. data/lib/graphql/analysis/field_usage.rb +0 -45
  286. data/lib/graphql/analysis/max_query_complexity.rb +0 -26
  287. data/lib/graphql/analysis/max_query_depth.rb +0 -26
  288. data/lib/graphql/analysis/query_complexity.rb +0 -88
  289. data/lib/graphql/analysis/query_depth.rb +0 -43
  290. data/lib/graphql/analysis/reducer_state.rb +0 -48
  291. data/lib/graphql/argument.rb +0 -131
  292. data/lib/graphql/authorization.rb +0 -82
  293. data/lib/graphql/backwards_compatibility.rb +0 -60
  294. data/lib/graphql/base_type.rb +0 -230
  295. data/lib/graphql/boolean_type.rb +0 -2
  296. data/lib/graphql/compatibility/execution_specification/counter_schema.rb +0 -53
  297. data/lib/graphql/compatibility/execution_specification/specification_schema.rb +0 -200
  298. data/lib/graphql/compatibility/execution_specification.rb +0 -435
  299. data/lib/graphql/compatibility/lazy_execution_specification/lazy_schema.rb +0 -111
  300. data/lib/graphql/compatibility/lazy_execution_specification.rb +0 -213
  301. data/lib/graphql/compatibility/query_parser_specification/parse_error_specification.rb +0 -87
  302. data/lib/graphql/compatibility/query_parser_specification/query_assertions.rb +0 -79
  303. data/lib/graphql/compatibility/query_parser_specification.rb +0 -264
  304. data/lib/graphql/compatibility/schema_parser_specification.rb +0 -680
  305. data/lib/graphql/compatibility.rb +0 -5
  306. data/lib/graphql/define/assign_argument.rb +0 -12
  307. data/lib/graphql/define/assign_connection.rb +0 -13
  308. data/lib/graphql/define/assign_enum_value.rb +0 -18
  309. data/lib/graphql/define/assign_global_id_field.rb +0 -11
  310. data/lib/graphql/define/assign_mutation_function.rb +0 -34
  311. data/lib/graphql/define/assign_object_field.rb +0 -42
  312. data/lib/graphql/define/defined_object_proxy.rb +0 -53
  313. data/lib/graphql/define/instance_definable.rb +0 -210
  314. data/lib/graphql/define/no_definition_error.rb +0 -7
  315. data/lib/graphql/define/non_null_with_bang.rb +0 -16
  316. data/lib/graphql/define/type_definer.rb +0 -31
  317. data/lib/graphql/define.rb +0 -31
  318. data/lib/graphql/deprecated_dsl.rb +0 -42
  319. data/lib/graphql/directive/deprecated_directive.rb +0 -2
  320. data/lib/graphql/directive/include_directive.rb +0 -2
  321. data/lib/graphql/directive/skip_directive.rb +0 -2
  322. data/lib/graphql/directive.rb +0 -107
  323. data/lib/graphql/enum_type.rb +0 -127
  324. data/lib/graphql/execution/execute.rb +0 -326
  325. data/lib/graphql/execution/flatten.rb +0 -40
  326. data/lib/graphql/execution/instrumentation.rb +0 -92
  327. data/lib/graphql/execution/interpreter/hash_response.rb +0 -46
  328. data/lib/graphql/execution/lazy/resolve.rb +0 -91
  329. data/lib/graphql/execution/typecast.rb +0 -50
  330. data/lib/graphql/field/resolve.rb +0 -59
  331. data/lib/graphql/field.rb +0 -222
  332. data/lib/graphql/float_type.rb +0 -2
  333. data/lib/graphql/function.rb +0 -124
  334. data/lib/graphql/id_type.rb +0 -2
  335. data/lib/graphql/input_object_type.rb +0 -132
  336. data/lib/graphql/int_type.rb +0 -2
  337. data/lib/graphql/interface_type.rb +0 -65
  338. data/lib/graphql/internal_representation/document.rb +0 -27
  339. data/lib/graphql/internal_representation/node.rb +0 -206
  340. data/lib/graphql/internal_representation/print.rb +0 -51
  341. data/lib/graphql/internal_representation/rewrite.rb +0 -184
  342. data/lib/graphql/internal_representation/scope.rb +0 -88
  343. data/lib/graphql/internal_representation/visit.rb +0 -36
  344. data/lib/graphql/internal_representation.rb +0 -7
  345. data/lib/graphql/language/lexer.rl +0 -258
  346. data/lib/graphql/list_type.rb +0 -80
  347. data/lib/graphql/literal_validation_error.rb +0 -6
  348. data/lib/graphql/non_null_type.rb +0 -71
  349. data/lib/graphql/object_type.rb +0 -121
  350. data/lib/graphql/query/arguments.rb +0 -188
  351. data/lib/graphql/query/arguments_cache.rb +0 -25
  352. data/lib/graphql/query/executor.rb +0 -53
  353. data/lib/graphql/query/literal_input.rb +0 -136
  354. data/lib/graphql/query/serial_execution/field_resolution.rb +0 -92
  355. data/lib/graphql/query/serial_execution/operation_resolution.rb +0 -19
  356. data/lib/graphql/query/serial_execution/selection_resolution.rb +0 -23
  357. data/lib/graphql/query/serial_execution/value_resolution.rb +0 -87
  358. data/lib/graphql/query/serial_execution.rb +0 -39
  359. data/lib/graphql/relay/array_connection.rb +0 -85
  360. data/lib/graphql/relay/base_connection.rb +0 -176
  361. data/lib/graphql/relay/connection_instrumentation.rb +0 -54
  362. data/lib/graphql/relay/connection_resolve.rb +0 -43
  363. data/lib/graphql/relay/connection_type.rb +0 -41
  364. data/lib/graphql/relay/edge.rb +0 -27
  365. data/lib/graphql/relay/edge_type.rb +0 -19
  366. data/lib/graphql/relay/edges_instrumentation.rb +0 -40
  367. data/lib/graphql/relay/global_id_resolve.rb +0 -18
  368. data/lib/graphql/relay/mongo_relation_connection.rb +0 -50
  369. data/lib/graphql/relay/mutation/instrumentation.rb +0 -23
  370. data/lib/graphql/relay/mutation/resolve.rb +0 -56
  371. data/lib/graphql/relay/mutation/result.rb +0 -38
  372. data/lib/graphql/relay/mutation.rb +0 -105
  373. data/lib/graphql/relay/node.rb +0 -36
  374. data/lib/graphql/relay/page_info.rb +0 -7
  375. data/lib/graphql/relay/relation_connection.rb +0 -190
  376. data/lib/graphql/relay/type_extensions.rb +0 -30
  377. data/lib/graphql/scalar_type.rb +0 -76
  378. data/lib/graphql/schema/catchall_middleware.rb +0 -35
  379. data/lib/graphql/schema/default_parse_error.rb +0 -10
  380. data/lib/graphql/schema/default_type_error.rb +0 -15
  381. data/lib/graphql/schema/member/accepts_definition.rb +0 -152
  382. data/lib/graphql/schema/member/cached_graphql_definition.rb +0 -31
  383. data/lib/graphql/schema/member/instrumentation.rb +0 -132
  384. data/lib/graphql/schema/middleware_chain.rb +0 -82
  385. data/lib/graphql/schema/possible_types.rb +0 -39
  386. data/lib/graphql/schema/rescue_middleware.rb +0 -60
  387. data/lib/graphql/schema/timeout_middleware.rb +0 -86
  388. data/lib/graphql/schema/traversal.rb +0 -228
  389. data/lib/graphql/schema/validation.rb +0 -303
  390. data/lib/graphql/static_validation/default_visitor.rb +0 -15
  391. data/lib/graphql/static_validation/no_validate_visitor.rb +0 -10
  392. data/lib/graphql/string_type.rb +0 -2
  393. data/lib/graphql/subscriptions/subscription_root.rb +0 -65
  394. data/lib/graphql/tracing/skylight_tracing.rb +0 -70
  395. data/lib/graphql/types/relay/base_field.rb +0 -22
  396. data/lib/graphql/types/relay/base_interface.rb +0 -29
  397. data/lib/graphql/types/relay/base_object.rb +0 -26
  398. data/lib/graphql/types/relay/node_field.rb +0 -43
  399. data/lib/graphql/types/relay/nodes_field.rb +0 -45
  400. data/lib/graphql/union_type.rb +0 -113
  401. data/lib/graphql/upgrader/member.rb +0 -936
  402. data/lib/graphql/upgrader/schema.rb +0 -37
@@ -1,213 +0,0 @@
1
- # frozen_string_literal: true
2
- require "graphql/compatibility/lazy_execution_specification/lazy_schema"
3
-
4
- module GraphQL
5
- module Compatibility
6
- module LazyExecutionSpecification
7
- # @param execution_strategy [<#new, #execute>] An execution strategy class
8
- # @return [Class<Minitest::Test>] A test suite for this execution strategy
9
- def self.build_suite(execution_strategy)
10
- Class.new(Minitest::Test) do
11
- class << self
12
- attr_accessor :lazy_schema
13
- end
14
-
15
- self.lazy_schema = LazySchema.build(execution_strategy)
16
-
17
- def test_it_resolves_lazy_values
18
- pushes = []
19
- query_str = %|
20
- {
21
- p1: push(value: 1) {
22
- value
23
- }
24
- p2: push(value: 2) {
25
- push(value: 3) {
26
- value
27
- push(value: 21) {
28
- value
29
- }
30
- }
31
- }
32
- p3: push(value: 4) {
33
- push(value: 5) {
34
- value
35
- push(value: 22) {
36
- value
37
- }
38
- }
39
- }
40
- }
41
- |
42
- res = self.class.lazy_schema.execute(query_str, context: {pushes: pushes})
43
-
44
- expected_data = {
45
- "p1"=>{"value"=>1},
46
- "p2"=>{"push"=>{"value"=>3, "push"=>{"value"=>21}}},
47
- "p3"=>{"push"=>{"value"=>5, "push"=>{"value"=>22}}},
48
- }
49
- assert_equal expected_data, res["data"]
50
-
51
- expected_pushes = [
52
- [1,2,4], # first level
53
- [3,5], # second level
54
- [21, 22],
55
- ]
56
- assert_equal expected_pushes, pushes
57
- end
58
-
59
- def test_it_maintains_path
60
- query_str = %|
61
- {
62
- push(value: 2) {
63
- push(value: 3) {
64
- fail1: push(value: 14) {
65
- value
66
- }
67
- fail2: push(value: 14) {
68
- value
69
- }
70
- }
71
- }
72
- }
73
- |
74
- res = self.class.lazy_schema.execute(query_str, context: {pushes: []})
75
- assert_equal nil, res["data"]
76
- # The first fail causes the second field to never resolve
77
- assert_equal 1, res["errors"].length
78
- assert_equal ["push", "push", "fail1", "value"], res["errors"][0]["path"]
79
- end
80
-
81
- def test_it_resolves_mutation_values_eagerly
82
- pushes = []
83
- query_str = %|
84
- mutation {
85
- p1: push(value: 1) {
86
- value
87
- }
88
- p2: push(value: 2) {
89
- push(value: 3) {
90
- value
91
- }
92
- }
93
- p3: push(value: 4) {
94
- p5: push(value: 5) {
95
- value
96
- }
97
- p6: push(value: 6) {
98
- value
99
- }
100
- }
101
- }
102
- |
103
- res = self.class.lazy_schema.execute(query_str, context: {pushes: pushes})
104
-
105
- expected_data = {
106
- "p1"=>{"value"=>1},
107
- "p2"=>{"push"=>{"value"=>3}},
108
- "p3"=>{"p5"=>{"value"=>5},"p6"=>{"value"=>6}},
109
- }
110
- assert_equal expected_data, res["data"]
111
-
112
- expected_pushes = [
113
- [1], # first operation
114
- [2], [3], # second operation
115
- [4], [5, 6], # third operation
116
- ]
117
- assert_equal expected_pushes, pushes
118
- end
119
-
120
- def test_it_resolves_lazy_connections
121
- pushes = []
122
- query_str = %|
123
- {
124
- pushes(values: [1,2,3]) {
125
- edges {
126
- node {
127
- value
128
- push(value: 4) {
129
- value
130
- }
131
- }
132
- }
133
- }
134
- }
135
- |
136
- res = self.class.lazy_schema.execute(query_str, context: {pushes: pushes})
137
-
138
- expected_edges = [
139
- {"node"=>{"value"=>1, "push"=>{"value"=>4}}},
140
- {"node"=>{"value"=>2, "push"=>{"value"=>4}}},
141
- {"node"=>{"value"=>3, "push"=>{"value"=>4}}},
142
- ]
143
- assert_equal expected_edges, res["data"]["pushes"]["edges"]
144
- assert_equal [[1, 2, 3], [4, 4, 4]], pushes
145
- end
146
-
147
- def test_it_calls_lazy_resolve_instrumentation
148
- query_str = %|
149
- {
150
- p1: push(value: 1) {
151
- value
152
- }
153
- p2: push(value: 2) {
154
- push(value: 3) {
155
- value
156
- }
157
- }
158
- pushes(values: [1,2,3]) {
159
- edges {
160
- node {
161
- value
162
- push(value: 4) {
163
- value
164
- }
165
- }
166
- }
167
- }
168
- }
169
- |
170
-
171
- log = []
172
- self.class.lazy_schema.execute(query_str, context: {lazy_instrumentation: log, pushes: []})
173
- expected_log = [
174
- "PUSH",
175
- "Query.push: 1",
176
- "Query.push: 2",
177
- "Query.pushes: [1, 2, 3]",
178
- "PUSH",
179
- "LazyPush.push: 3",
180
- "LazyPushEdge.node: 1",
181
- "LazyPushEdge.node: 2",
182
- "LazyPushEdge.node: 3",
183
- "PUSH",
184
- "LazyPush.push: 4",
185
- "LazyPush.push: 4",
186
- "LazyPush.push: 4",
187
- ]
188
- assert_equal expected_log, log
189
- end
190
-
191
- def test_it_skips_ctx_skip
192
- query_string = <<-GRAPHQL
193
- {
194
- p0: push(value: 15) { value }
195
- p1: push(value: 1) { value }
196
- p2: push(value: 2) {
197
- value
198
- p3: push(value: 15) {
199
- value
200
- }
201
- }
202
- }
203
- GRAPHQL
204
- pushes = []
205
- res = self.class.lazy_schema.execute(query_string, context: {pushes: pushes})
206
- assert_equal [[1,2]], pushes
207
- assert_equal({"data"=>{"p1"=>{"value"=>1}, "p2"=>{"value"=>2}}}, res)
208
- end
209
- end
210
- end
211
- end
212
- end
213
- end
@@ -1,87 +0,0 @@
1
- # frozen_string_literal: true
2
- module GraphQL
3
- module Compatibility
4
- module QueryParserSpecification
5
- module ParseErrorSpecification
6
- def assert_raises_parse_error(query_string)
7
- assert_raises(GraphQL::ParseError) {
8
- parse(query_string)
9
- }
10
- end
11
-
12
- def test_it_includes_line_and_column
13
- err = assert_raises_parse_error("
14
- query getCoupons {
15
- allCoupons: {data{id}}
16
- }
17
- ")
18
-
19
- assert_includes(err.message, '{')
20
- assert_equal(3, err.line)
21
- assert_equal(27, err.col)
22
- end
23
-
24
- def test_it_rejects_unterminated_strings
25
- assert_raises_parse_error('{ " }')
26
- assert_raises_parse_error(%|{ "\n" }|)
27
- end
28
-
29
- def test_it_rejects_unexpected_ends
30
- assert_raises_parse_error("query { stuff { thing }")
31
- end
32
-
33
- def assert_rejects_character(char)
34
- err = assert_raises_parse_error("{ field#{char} }")
35
- expected_char = char.inspect.gsub('"', '').downcase
36
- msg_downcase = err.message.downcase
37
- # Case-insensitive for UTF-8 printing
38
- assert_includes(msg_downcase, expected_char, "The message includes the invalid character")
39
- end
40
-
41
- def test_it_rejects_invalid_characters
42
- assert_rejects_character(";")
43
- assert_rejects_character("\a")
44
- assert_rejects_character("\xef")
45
- assert_rejects_character("\v")
46
- assert_rejects_character("\f")
47
- assert_rejects_character("\xa0")
48
- end
49
-
50
- def test_it_rejects_bad_unicode
51
- assert_raises_parse_error(%|{ field(arg:"\\x") }|)
52
- assert_raises_parse_error(%|{ field(arg:"\\u1") }|)
53
- assert_raises_parse_error(%|{ field(arg:"\\u0XX1") }|)
54
- assert_raises_parse_error(%|{ field(arg:"\\uXXXX") }|)
55
- assert_raises_parse_error(%|{ field(arg:"\\uFXXX") }|)
56
- assert_raises_parse_error(%|{ field(arg:"\\uXXXF") }|)
57
- end
58
-
59
- def test_it_rejects_empty_inline_fragments
60
- assert_raises_parse_error("
61
- query {
62
- viewer {
63
- login {
64
- ... on String {
65
-
66
- }
67
- }
68
- }
69
- }
70
- ")
71
- end
72
-
73
- def test_it_rejects_blank_queries
74
- assert_raises_parse_error("")
75
- assert_raises_parse_error(" ")
76
- assert_raises_parse_error("\t \t")
77
- assert_raises_parse_error(" # comment ")
78
- end
79
-
80
- def test_it_restricts_on
81
- assert_raises_parse_error("{ ...on }")
82
- assert_raises_parse_error("fragment on on Type { field }")
83
- end
84
- end
85
- end
86
- end
87
- end
@@ -1,79 +0,0 @@
1
- # frozen_string_literal: true
2
- module GraphQL
3
- module Compatibility
4
- module QueryParserSpecification
5
- module QueryAssertions
6
- def assert_valid_query(query)
7
- assert query.is_a?(GraphQL::Language::Nodes::OperationDefinition)
8
- assert_equal "getStuff", query.name
9
- assert_equal "query", query.operation_type
10
- assert_equal 2, query.variables.length
11
- assert_equal 4, query.selections.length
12
- assert_equal 1, query.directives.length
13
- assert_equal [2, 13], [query.line, query.col]
14
- end
15
-
16
- def assert_valid_fragment(fragment_def)
17
- assert fragment_def.is_a?(GraphQL::Language::Nodes::FragmentDefinition)
18
- assert_equal "moreNestedFields", fragment_def.name
19
- assert_equal 1, fragment_def.selections.length
20
- assert_equal "NestedType", fragment_def.type.name
21
- assert_equal 1, fragment_def.directives.length
22
- assert_equal [20, 13], fragment_def.position
23
- end
24
-
25
- def assert_valid_variable(variable)
26
- assert_equal "someVar", variable.name
27
- assert_equal "Int", variable.type.name
28
- assert_equal 1, variable.default_value
29
- assert_equal [2, 28], variable.position
30
- end
31
-
32
- def assert_valid_field(field)
33
- assert_equal "someField", field.name
34
- assert_equal "myField", field.alias
35
- assert_equal 2, field.directives.length
36
- assert_equal 2, field.arguments.length
37
- assert_equal 0, field.selections.length
38
- assert_equal [3, 15], field.position
39
- end
40
-
41
- def assert_valid_literal_argument(argument)
42
- assert_equal "ok", argument.name
43
- assert_equal 1.4, argument.value
44
- end
45
-
46
- def assert_valid_variable_argument(argument)
47
- assert_equal "someArg", argument.name
48
- assert_equal "someVar", argument.value.name
49
- end
50
-
51
- def assert_valid_fragment_spread(fragment_spread)
52
- assert_equal "moreNestedFields", fragment_spread.name
53
- assert_equal 1, fragment_spread.directives.length
54
- assert_equal [7, 17], fragment_spread.position
55
- end
56
-
57
- def assert_valid_directive(directive)
58
- assert_equal "skip", directive.name
59
- assert_equal "if", directive.arguments.first.name
60
- assert_equal 1, directive.arguments.length
61
- assert_equal [3, 62], directive.position
62
- end
63
-
64
- def assert_valid_typed_inline_fragment(inline_fragment)
65
- assert_equal "OtherType", inline_fragment.type.name
66
- assert_equal 2, inline_fragment.selections.length
67
- assert_equal 1, inline_fragment.directives.length
68
- assert_equal [10, 15], inline_fragment.position
69
- end
70
-
71
- def assert_valid_typeless_inline_fragment(inline_fragment)
72
- assert_equal nil, inline_fragment.type
73
- assert_equal 1, inline_fragment.selections.length
74
- assert_equal 0, inline_fragment.directives.length
75
- end
76
- end
77
- end
78
- end
79
- end
@@ -1,264 +0,0 @@
1
- # frozen_string_literal: true
2
- require "graphql/compatibility/query_parser_specification/query_assertions"
3
- require "graphql/compatibility/query_parser_specification/parse_error_specification"
4
-
5
- module GraphQL
6
- module Compatibility
7
- # This asserts that a given parse function turns a string into
8
- # the proper tree of {{GraphQL::Language::Nodes}}.
9
- module QueryParserSpecification
10
- # @yieldparam query_string [String] A query string to parse
11
- # @yieldreturn [GraphQL::Language::Nodes::Document]
12
- # @return [Class<Minitest::Test>] A test suite for this parse function
13
- def self.build_suite(&block)
14
- Class.new(Minitest::Test) do
15
- include QueryAssertions
16
- include ParseErrorSpecification
17
-
18
- @@parse_fn = block
19
-
20
- def parse(query_string)
21
- @@parse_fn.call(query_string)
22
- end
23
-
24
- def test_it_parses_queries
25
- document = parse(QUERY_STRING)
26
- query = document.definitions.first
27
- assert_valid_query(query)
28
- assert_valid_fragment(document.definitions.last)
29
- assert_valid_variable(query.variables.first)
30
- field = query.selections.first
31
- assert_valid_field(field)
32
- assert_valid_variable_argument(field.arguments.first)
33
- assert_valid_literal_argument(field.arguments.last)
34
- assert_valid_directive(field.directives.first)
35
- fragment_spread = query.selections[1].selections.last
36
- assert_valid_fragment_spread(fragment_spread)
37
- assert_valid_typed_inline_fragment(query.selections[2])
38
- assert_valid_typeless_inline_fragment(query.selections[3])
39
- end
40
-
41
- def test_it_parses_unnamed_queries
42
- document = parse("{ name, age, height }")
43
- operation = document.definitions.first
44
- assert_equal 1, document.definitions.length
45
- assert_equal "query", operation.operation_type
46
- assert_equal nil, operation.name
47
- assert_equal 3, operation.selections.length
48
- end
49
-
50
- def test_it_parses_the_introspection_query
51
- parse(GraphQL::Introspection::INTROSPECTION_QUERY)
52
- end
53
-
54
- def test_it_parses_inputs
55
- query_string = %|
56
- {
57
- field(
58
- int: 3,
59
- float: 4.7e-24,
60
- bool: false,
61
- string: "☀︎🏆 \\b \\f \\n \\r \\t \\" \u00b6 \\u00b6 / \\/",
62
- enum: ENUM_NAME,
63
- array: [7, 8, 9]
64
- object: {a: [1,2,3], b: {c: "4"}}
65
- unicode_bom: "\xef\xbb\xbfquery"
66
- keywordEnum: on
67
- nullValue: null
68
- nullValueInObject: {a: null, b: "b"}
69
- nullValueInArray: ["a", null, "b"]
70
- blockString: """
71
- Hello,
72
- World
73
- """
74
- )
75
- }
76
- |
77
- document = parse(query_string)
78
- inputs = document.definitions.first.selections.first.arguments
79
- assert_equal 3, inputs[0].value, "Integers"
80
- assert_equal 0.47e-23, inputs[1].value, "Floats"
81
- assert_equal false, inputs[2].value, "Booleans"
82
- assert_equal %|☀︎🏆 \b \f \n \r \t " ¶ ¶ / /|, inputs[3].value, "Strings"
83
- assert_instance_of GraphQL::Language::Nodes::Enum, inputs[4].value
84
- assert_equal "ENUM_NAME", inputs[4].value.name, "Enums"
85
- assert_equal [7,8,9], inputs[5].value, "Lists"
86
-
87
- obj = inputs[6].value
88
- assert_equal "a", obj.arguments[0].name
89
- assert_equal [1,2,3], obj.arguments[0].value
90
- assert_equal "b", obj.arguments[1].name
91
- assert_equal "c", obj.arguments[1].value.arguments[0].name
92
- assert_equal "4", obj.arguments[1].value.arguments[0].value
93
-
94
- assert_equal %|\xef\xbb\xbfquery|, inputs[7].value, "Unicode BOM"
95
- assert_equal "on", inputs[8].value.name, "Enum value 'on'"
96
-
97
- assert_instance_of GraphQL::Language::Nodes::NullValue, inputs[9].value
98
-
99
- args = inputs[10].value.arguments
100
- assert_instance_of GraphQL::Language::Nodes::NullValue, args.find{ |arg| arg.name == 'a' }.value
101
- assert_equal 'b', args.find{ |arg| arg.name == 'b' }.value
102
-
103
- values = inputs[11].value
104
- assert_equal 'a', values[0]
105
- assert_instance_of GraphQL::Language::Nodes::NullValue, values[1]
106
- assert_equal 'b', values[2]
107
-
108
- block_str_value = inputs[12].value
109
- assert_equal "Hello,\n World", block_str_value
110
- end
111
-
112
- def test_it_doesnt_parse_nonsense_variables
113
- query_string_1 = "query Vars($var1) { cheese(id: $var1) { flavor } }"
114
- query_string_2 = "query Vars2($var1: Int = $var1) { cheese(id: $var1) { flavor } }"
115
-
116
- err_1 = assert_raises(GraphQL::ParseError) do
117
- parse(query_string_1)
118
- end
119
- assert_equal [1,17], [err_1.line, err_1.col]
120
-
121
- err_2 = assert_raises(GraphQL::ParseError) do
122
- parse(query_string_2)
123
- end
124
- assert_equal [1,26], [err_2.line, err_2.col]
125
- end
126
-
127
- def test_enum_value_definitions_have_a_position
128
- document = parse("""
129
- enum Enum {
130
- VALUE
131
- }
132
- """)
133
-
134
- assert_equal [3, 17], document.definitions[0].values[0].position
135
- end
136
-
137
- def test_field_definitions_have_a_position
138
- document = parse("""
139
- type A {
140
- field: String
141
- }
142
- """)
143
-
144
- assert_equal [3, 17], document.definitions[0].fields[0].position
145
- end
146
-
147
- def test_input_value_definitions_have_a_position
148
- document = parse("""
149
- input A {
150
- field: String
151
- }
152
- """)
153
-
154
- assert_equal [3, 17], document.definitions[0].fields[0].position
155
- end
156
-
157
- def test_parses_when_there_are_no_interfaces
158
- schema = "
159
- type A {
160
- a: String
161
- }
162
- "
163
-
164
- document = parse(schema)
165
-
166
- assert_equal [], document.definitions[0].interfaces.map(&:name)
167
- end
168
-
169
- def test_parses_implements_with_leading_ampersand
170
- schema = "
171
- type A implements & B {
172
- a: String
173
- }
174
- "
175
-
176
- document = parse(schema)
177
-
178
- assert_equal ["B"], document.definitions[0].interfaces.map(&:name)
179
- assert_equal [2, 35], document.definitions[0].interfaces[0].position
180
- end
181
-
182
- def test_parses_implements_with_leading_ampersand_and_multiple_interfaces
183
- schema = "
184
- type A implements & B & C {
185
- a: String
186
- }
187
- "
188
-
189
- document = parse(schema)
190
-
191
- assert_equal ["B", "C"], document.definitions[0].interfaces.map(&:name)
192
- assert_equal [2, 35], document.definitions[0].interfaces[0].position
193
- assert_equal [2, 39], document.definitions[0].interfaces[1].position
194
- end
195
-
196
- def test_parses_implements_without_leading_ampersand
197
- schema = "
198
- type A implements B {
199
- a: String
200
- }
201
- "
202
-
203
- document = parse(schema)
204
-
205
- assert_equal ["B"], document.definitions[0].interfaces.map(&:name)
206
- assert_equal [2, 33], document.definitions[0].interfaces[0].position
207
- end
208
-
209
- def test_parses_implements_without_leading_ampersand_and_multiple_interfaces
210
- schema = "
211
- type A implements B & C {
212
- a: String
213
- }
214
- "
215
-
216
- document = parse(schema)
217
-
218
- assert_equal ["B", "C"], document.definitions[0].interfaces.map(&:name)
219
- assert_equal [2, 33], document.definitions[0].interfaces[0].position
220
- assert_equal [2, 37], document.definitions[0].interfaces[1].position
221
- end
222
-
223
- def test_supports_old_syntax_for_parsing_multiple_interfaces
224
- schema = "
225
- type A implements B, C {
226
- a: String
227
- }
228
- "
229
-
230
- document = parse(schema)
231
-
232
- assert_equal ["B", "C"], document.definitions[0].interfaces.map(&:name)
233
- assert_equal [2, 33], document.definitions[0].interfaces[0].position
234
- assert_equal [2, 36], document.definitions[0].interfaces[1].position
235
- end
236
- end
237
- end
238
-
239
- QUERY_STRING = %|
240
- query getStuff($someVar: Int = 1, $anotherVar: [String!] ) @skip(if: false) {
241
- myField: someField(someArg: $someVar, ok: 1.4) @skip(if: $anotherVar) @thing(or: "Whatever")
242
-
243
- anotherField(someArg: [1,2,3]) {
244
- nestedField
245
- ... moreNestedFields @skip(if: true)
246
- }
247
-
248
- ... on OtherType @include(unless: false){
249
- field(arg: [{key: "value", anotherKey: 0.9, anotherAnotherKey: WHATEVER}])
250
- anotherField
251
- }
252
-
253
- ... {
254
- id
255
- }
256
- }
257
-
258
- fragment moreNestedFields on NestedType @or(something: "ok") {
259
- anotherNestedField @enum(directive: true)
260
- }
261
- |
262
- end
263
- end
264
- end