graphql 1.9.5 → 1.13.19

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 (659) hide show
  1. checksums.yaml +5 -5
  2. data/lib/generators/graphql/core.rb +21 -9
  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/install/templates/base_mutation.erb +10 -0
  8. data/lib/generators/graphql/{templates → install/templates}/mutation_type.erb +2 -0
  9. data/lib/generators/graphql/install_generator.rb +48 -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 +63 -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 +6 -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 +7 -0
  26. data/lib/generators/graphql/templates/base_input_object.erb +3 -0
  27. data/lib/generators/graphql/templates/base_interface.erb +4 -0
  28. data/lib/generators/graphql/templates/base_object.erb +3 -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 +21 -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 +23 -28
  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/analyze_query.rb +7 -0
  49. data/lib/graphql/analysis/ast/analyzer.rb +34 -12
  50. data/lib/graphql/analysis/ast/field_usage.rb +29 -2
  51. data/lib/graphql/analysis/ast/max_query_complexity.rb +3 -3
  52. data/lib/graphql/analysis/ast/max_query_depth.rb +7 -3
  53. data/lib/graphql/analysis/ast/query_complexity.rb +179 -64
  54. data/lib/graphql/analysis/ast/query_depth.rb +16 -26
  55. data/lib/graphql/analysis/ast/visitor.rb +46 -32
  56. data/lib/graphql/analysis/ast.rb +23 -14
  57. data/lib/graphql/analysis/query_depth.rb +4 -17
  58. data/lib/graphql/argument.rb +16 -38
  59. data/lib/graphql/backtrace/inspect_result.rb +0 -1
  60. data/lib/graphql/backtrace/legacy_tracer.rb +56 -0
  61. data/lib/graphql/backtrace/table.rb +44 -5
  62. data/lib/graphql/backtrace/traced_error.rb +0 -1
  63. data/lib/graphql/backtrace/tracer.rb +40 -9
  64. data/lib/graphql/backtrace.rb +28 -19
  65. data/lib/graphql/backwards_compatibility.rb +2 -1
  66. data/lib/graphql/base_type.rb +11 -5
  67. data/lib/graphql/boolean_type.rb +1 -1
  68. data/lib/graphql/coercion_error.rb +8 -0
  69. data/lib/graphql/compatibility/execution_specification/specification_schema.rb +2 -2
  70. data/lib/graphql/compatibility/execution_specification.rb +1 -0
  71. data/lib/graphql/compatibility/lazy_execution_specification/lazy_schema.rb +1 -1
  72. data/lib/graphql/compatibility/lazy_execution_specification.rb +2 -0
  73. data/lib/graphql/compatibility/query_parser_specification/parse_error_specification.rb +5 -9
  74. data/lib/graphql/compatibility/query_parser_specification.rb +2 -0
  75. data/lib/graphql/compatibility/schema_parser_specification.rb +2 -0
  76. data/lib/graphql/dataloader/null_dataloader.rb +22 -0
  77. data/lib/graphql/dataloader/request.rb +19 -0
  78. data/lib/graphql/dataloader/request_all.rb +19 -0
  79. data/lib/graphql/dataloader/source.rb +155 -0
  80. data/lib/graphql/dataloader.rb +308 -0
  81. data/lib/graphql/date_encoding_error.rb +16 -0
  82. data/lib/graphql/define/assign_enum_value.rb +1 -1
  83. data/lib/graphql/define/assign_global_id_field.rb +2 -2
  84. data/lib/graphql/define/assign_object_field.rb +3 -3
  85. data/lib/graphql/define/defined_object_proxy.rb +3 -0
  86. data/lib/graphql/define/instance_definable.rb +65 -110
  87. data/lib/graphql/define/type_definer.rb +5 -5
  88. data/lib/graphql/deprecated_dsl.rb +18 -5
  89. data/lib/graphql/deprecation.rb +9 -0
  90. data/lib/graphql/directive/deprecated_directive.rb +1 -12
  91. data/lib/graphql/directive/include_directive.rb +1 -1
  92. data/lib/graphql/directive/skip_directive.rb +1 -1
  93. data/lib/graphql/directive.rb +9 -6
  94. data/lib/graphql/enum_type.rb +14 -74
  95. data/lib/graphql/execution/directive_checks.rb +2 -2
  96. data/lib/graphql/execution/errors.rb +163 -0
  97. data/lib/graphql/execution/execute.rb +10 -3
  98. data/lib/graphql/execution/instrumentation.rb +1 -1
  99. data/lib/graphql/execution/interpreter/argument_value.rb +28 -0
  100. data/lib/graphql/execution/interpreter/arguments.rb +88 -0
  101. data/lib/graphql/execution/interpreter/arguments_cache.rb +105 -0
  102. data/lib/graphql/execution/interpreter/handles_raw_value.rb +18 -0
  103. data/lib/graphql/execution/interpreter/resolve.rb +37 -25
  104. data/lib/graphql/execution/interpreter/runtime.rb +737 -376
  105. data/lib/graphql/execution/interpreter.rb +42 -19
  106. data/lib/graphql/execution/lazy/lazy_method_map.rb +4 -0
  107. data/lib/graphql/execution/lazy.rb +5 -1
  108. data/lib/graphql/execution/lookahead.rb +39 -114
  109. data/lib/graphql/execution/multiplex.rb +58 -29
  110. data/lib/graphql/execution.rb +1 -0
  111. data/lib/graphql/execution_error.rb +3 -2
  112. data/lib/graphql/field.rb +15 -119
  113. data/lib/graphql/filter.rb +1 -1
  114. data/lib/graphql/float_type.rb +1 -1
  115. data/lib/graphql/function.rb +6 -31
  116. data/lib/graphql/id_type.rb +1 -1
  117. data/lib/graphql/input_object_type.rb +11 -26
  118. data/lib/graphql/int_type.rb +1 -1
  119. data/lib/graphql/integer_decoding_error.rb +17 -0
  120. data/lib/graphql/integer_encoding_error.rb +18 -2
  121. data/lib/graphql/interface_type.rb +10 -24
  122. data/lib/graphql/internal_representation/document.rb +2 -2
  123. data/lib/graphql/internal_representation/rewrite.rb +1 -1
  124. data/lib/graphql/internal_representation/scope.rb +2 -2
  125. data/lib/graphql/internal_representation/visit.rb +2 -2
  126. data/lib/graphql/introspection/base_object.rb +2 -5
  127. data/lib/graphql/introspection/directive_location_enum.rb +2 -2
  128. data/lib/graphql/introspection/directive_type.rb +12 -6
  129. data/lib/graphql/introspection/entry_points.rb +9 -8
  130. data/lib/graphql/introspection/enum_value_type.rb +2 -2
  131. data/lib/graphql/introspection/field_type.rb +9 -5
  132. data/lib/graphql/introspection/input_value_type.rb +41 -11
  133. data/lib/graphql/introspection/introspection_query.rb +6 -92
  134. data/lib/graphql/introspection/schema_type.rb +13 -12
  135. data/lib/graphql/introspection/type_type.rb +27 -17
  136. data/lib/graphql/introspection.rb +99 -0
  137. data/lib/graphql/invalid_null_error.rb +18 -0
  138. data/lib/graphql/language/block_string.rb +22 -7
  139. data/lib/graphql/language/cache.rb +37 -0
  140. data/lib/graphql/language/definition_slice.rb +21 -10
  141. data/lib/graphql/language/document_from_schema_definition.rb +126 -67
  142. data/lib/graphql/language/lexer.rb +180 -141
  143. data/lib/graphql/language/lexer.rl +75 -51
  144. data/lib/graphql/language/nodes.rb +92 -108
  145. data/lib/graphql/language/parser.rb +933 -897
  146. data/lib/graphql/language/parser.y +129 -103
  147. data/lib/graphql/language/printer.rb +11 -2
  148. data/lib/graphql/language/sanitized_printer.rb +222 -0
  149. data/lib/graphql/language/token.rb +1 -1
  150. data/lib/graphql/language/visitor.rb +11 -8
  151. data/lib/graphql/language.rb +3 -1
  152. data/lib/graphql/name_validator.rb +2 -7
  153. data/lib/graphql/non_null_type.rb +0 -10
  154. data/lib/graphql/object_type.rb +47 -58
  155. data/lib/graphql/pagination/active_record_relation_connection.rb +85 -0
  156. data/lib/graphql/pagination/array_connection.rb +77 -0
  157. data/lib/graphql/pagination/connection.rb +226 -0
  158. data/lib/graphql/pagination/connections.rb +160 -0
  159. data/lib/graphql/pagination/mongoid_relation_connection.rb +25 -0
  160. data/lib/graphql/pagination/relation_connection.rb +226 -0
  161. data/lib/graphql/pagination/sequel_dataset_connection.rb +28 -0
  162. data/lib/graphql/pagination.rb +6 -0
  163. data/lib/graphql/parse_error.rb +0 -1
  164. data/lib/graphql/query/arguments.rb +29 -19
  165. data/lib/graphql/query/arguments_cache.rb +1 -2
  166. data/lib/graphql/query/context.rb +81 -14
  167. data/lib/graphql/query/executor.rb +0 -1
  168. data/lib/graphql/query/fingerprint.rb +26 -0
  169. data/lib/graphql/query/input_validation_result.rb +32 -6
  170. data/lib/graphql/query/literal_input.rb +31 -10
  171. data/lib/graphql/query/null_context.rb +28 -8
  172. data/lib/graphql/query/serial_execution/field_resolution.rb +1 -1
  173. data/lib/graphql/query/serial_execution.rb +1 -0
  174. data/lib/graphql/query/validation_pipeline.rb +6 -4
  175. data/lib/graphql/query/variable_validation_error.rb +3 -3
  176. data/lib/graphql/query/variables.rb +51 -9
  177. data/lib/graphql/query.rb +97 -23
  178. data/lib/graphql/railtie.rb +9 -1
  179. data/lib/graphql/rake_task/validate.rb +3 -0
  180. data/lib/graphql/rake_task.rb +12 -9
  181. data/lib/graphql/relay/array_connection.rb +11 -13
  182. data/lib/graphql/relay/base_connection.rb +33 -16
  183. data/lib/graphql/relay/connection_instrumentation.rb +4 -4
  184. data/lib/graphql/relay/connection_type.rb +18 -4
  185. data/lib/graphql/relay/edge_type.rb +1 -0
  186. data/lib/graphql/relay/edges_instrumentation.rb +1 -2
  187. data/lib/graphql/relay/global_id_resolve.rb +1 -2
  188. data/lib/graphql/relay/mutation.rb +3 -87
  189. data/lib/graphql/relay/node.rb +5 -2
  190. data/lib/graphql/relay/page_info.rb +1 -1
  191. data/lib/graphql/relay/range_add.rb +27 -9
  192. data/lib/graphql/relay/relation_connection.rb +17 -15
  193. data/lib/graphql/relay/type_extensions.rb +2 -0
  194. data/lib/graphql/rubocop/graphql/base_cop.rb +36 -0
  195. data/lib/graphql/rubocop/graphql/default_null_true.rb +43 -0
  196. data/lib/graphql/rubocop/graphql/default_required_true.rb +43 -0
  197. data/lib/graphql/rubocop.rb +4 -0
  198. data/lib/graphql/scalar_type.rb +18 -62
  199. data/lib/graphql/schema/addition.rb +247 -0
  200. data/lib/graphql/schema/argument.rb +289 -11
  201. data/lib/graphql/schema/base_64_bp.rb +3 -2
  202. data/lib/graphql/schema/base_64_encoder.rb +2 -0
  203. data/lib/graphql/schema/build_from_definition/resolve_map/default_resolve.rb +1 -1
  204. data/lib/graphql/schema/build_from_definition/resolve_map.rb +13 -5
  205. data/lib/graphql/schema/build_from_definition.rb +323 -203
  206. data/lib/graphql/schema/built_in_types.rb +5 -5
  207. data/lib/graphql/schema/default_type_error.rb +2 -0
  208. data/lib/graphql/schema/directive/deprecated.rb +18 -0
  209. data/lib/graphql/schema/directive/feature.rb +2 -2
  210. data/lib/graphql/schema/directive/flagged.rb +57 -0
  211. data/lib/graphql/schema/directive/include.rb +2 -2
  212. data/lib/graphql/schema/directive/skip.rb +2 -2
  213. data/lib/graphql/schema/directive/transform.rb +14 -2
  214. data/lib/graphql/schema/directive.rb +136 -6
  215. data/lib/graphql/schema/enum.rb +121 -12
  216. data/lib/graphql/schema/enum_value.rb +23 -6
  217. data/lib/graphql/schema/field/connection_extension.rb +46 -20
  218. data/lib/graphql/schema/field/scope_extension.rb +1 -1
  219. data/lib/graphql/schema/field.rb +515 -191
  220. data/lib/graphql/schema/field_extension.rb +89 -2
  221. data/lib/graphql/schema/find_inherited_value.rb +36 -0
  222. data/lib/graphql/schema/finder.rb +16 -14
  223. data/lib/graphql/schema/input_object.rb +178 -34
  224. data/lib/graphql/schema/interface.rb +35 -25
  225. data/lib/graphql/schema/introspection_system.rb +111 -35
  226. data/lib/graphql/schema/late_bound_type.rb +3 -2
  227. data/lib/graphql/schema/list.rb +65 -1
  228. data/lib/graphql/schema/loader.rb +147 -97
  229. data/lib/graphql/schema/member/accepts_definition.rb +15 -3
  230. data/lib/graphql/schema/member/base_dsl_methods.rb +40 -45
  231. data/lib/graphql/schema/member/build_type.rb +19 -8
  232. data/lib/graphql/schema/member/cached_graphql_definition.rb +34 -2
  233. data/lib/graphql/schema/member/has_arguments.rb +212 -22
  234. data/lib/graphql/schema/member/has_ast_node.rb +20 -0
  235. data/lib/graphql/schema/member/has_deprecation_reason.rb +25 -0
  236. data/lib/graphql/schema/member/has_directives.rb +98 -0
  237. data/lib/graphql/schema/member/has_fields.rb +113 -28
  238. data/lib/graphql/schema/member/has_interfaces.rb +100 -0
  239. data/lib/graphql/schema/member/has_unresolved_type_error.rb +15 -0
  240. data/lib/graphql/schema/member/has_validators.rb +31 -0
  241. data/lib/graphql/schema/member/instrumentation.rb +6 -2
  242. data/lib/graphql/schema/member/relay_shortcuts.rb +2 -2
  243. data/lib/graphql/schema/member/type_system_helpers.rb +3 -3
  244. data/lib/graphql/schema/member/validates_input.rb +33 -0
  245. data/lib/graphql/schema/member.rb +11 -0
  246. data/lib/graphql/schema/middleware_chain.rb +1 -1
  247. data/lib/graphql/schema/mutation.rb +5 -1
  248. data/lib/graphql/schema/non_null.rb +37 -1
  249. data/lib/graphql/schema/object.rb +52 -37
  250. data/lib/graphql/schema/possible_types.rb +12 -7
  251. data/lib/graphql/schema/printer.rb +17 -34
  252. data/lib/graphql/schema/relay_classic_mutation.rb +51 -7
  253. data/lib/graphql/schema/resolver/has_payload_type.rb +36 -5
  254. data/lib/graphql/schema/resolver.rb +159 -59
  255. data/lib/graphql/schema/scalar.rb +43 -3
  256. data/lib/graphql/schema/subscription.rb +83 -25
  257. data/lib/graphql/schema/timeout.rb +123 -0
  258. data/lib/graphql/schema/timeout_middleware.rb +6 -3
  259. data/lib/graphql/schema/traversal.rb +2 -2
  260. data/lib/graphql/schema/type_expression.rb +21 -13
  261. data/lib/graphql/schema/type_membership.rb +48 -0
  262. data/lib/graphql/schema/union.rb +67 -6
  263. data/lib/graphql/schema/unique_within_type.rb +1 -2
  264. data/lib/graphql/schema/validation.rb +30 -8
  265. data/lib/graphql/schema/validator/allow_blank_validator.rb +29 -0
  266. data/lib/graphql/schema/validator/allow_null_validator.rb +26 -0
  267. data/lib/graphql/schema/validator/exclusion_validator.rb +33 -0
  268. data/lib/graphql/schema/validator/format_validator.rb +48 -0
  269. data/lib/graphql/schema/validator/inclusion_validator.rb +35 -0
  270. data/lib/graphql/schema/validator/length_validator.rb +59 -0
  271. data/lib/graphql/schema/validator/numericality_validator.rb +82 -0
  272. data/lib/graphql/schema/validator/required_validator.rb +82 -0
  273. data/lib/graphql/schema/validator.rb +171 -0
  274. data/lib/graphql/schema/warden.rb +263 -30
  275. data/lib/graphql/schema/wrapper.rb +1 -1
  276. data/lib/graphql/schema.rb +1016 -256
  277. data/lib/graphql/static_validation/all_rules.rb +2 -0
  278. data/lib/graphql/static_validation/base_visitor.rb +17 -10
  279. data/lib/graphql/static_validation/definition_dependencies.rb +21 -13
  280. data/lib/graphql/static_validation/error.rb +3 -1
  281. data/lib/graphql/static_validation/literal_validator.rb +52 -27
  282. data/lib/graphql/static_validation/rules/argument_literals_are_compatible.rb +46 -79
  283. data/lib/graphql/static_validation/rules/argument_literals_are_compatible_error.rb +23 -6
  284. data/lib/graphql/static_validation/rules/arguments_are_defined.rb +35 -26
  285. data/lib/graphql/static_validation/rules/arguments_are_defined_error.rb +4 -2
  286. data/lib/graphql/static_validation/rules/directives_are_defined.rb +1 -1
  287. data/lib/graphql/static_validation/rules/directives_are_in_valid_locations.rb +2 -2
  288. data/lib/graphql/static_validation/rules/fields_are_defined_on_type.rb +4 -4
  289. data/lib/graphql/static_validation/rules/fields_have_appropriate_selections.rb +5 -5
  290. data/lib/graphql/static_validation/rules/fields_will_merge.rb +105 -55
  291. data/lib/graphql/static_validation/rules/fields_will_merge_error.rb +25 -4
  292. data/lib/graphql/static_validation/rules/fragment_spreads_are_possible.rb +3 -3
  293. data/lib/graphql/static_validation/rules/fragments_are_finite.rb +2 -2
  294. data/lib/graphql/static_validation/rules/input_object_names_are_unique.rb +30 -0
  295. data/lib/graphql/static_validation/rules/input_object_names_are_unique_error.rb +30 -0
  296. data/lib/graphql/static_validation/rules/query_root_exists.rb +17 -0
  297. data/lib/graphql/static_validation/rules/query_root_exists_error.rb +26 -0
  298. data/lib/graphql/static_validation/rules/required_arguments_are_present.rb +5 -3
  299. data/lib/graphql/static_validation/rules/required_input_object_attributes_are_present.rb +9 -10
  300. data/lib/graphql/static_validation/rules/unique_directives_per_location.rb +1 -1
  301. data/lib/graphql/static_validation/rules/variable_default_values_are_correctly_typed.rb +12 -13
  302. data/lib/graphql/static_validation/rules/variable_usages_are_allowed.rb +19 -14
  303. data/lib/graphql/static_validation/rules/variables_are_input_types.rb +1 -1
  304. data/lib/graphql/static_validation/rules/variables_are_used_and_defined.rb +5 -3
  305. data/lib/graphql/static_validation/type_stack.rb +2 -2
  306. data/lib/graphql/static_validation/validation_context.rb +13 -3
  307. data/lib/graphql/static_validation/validation_timeout_error.rb +25 -0
  308. data/lib/graphql/static_validation/validator.rb +43 -9
  309. data/lib/graphql/static_validation.rb +1 -0
  310. data/lib/graphql/string_encoding_error.rb +13 -3
  311. data/lib/graphql/string_type.rb +1 -1
  312. data/lib/graphql/subscriptions/action_cable_subscriptions.rb +123 -22
  313. data/lib/graphql/subscriptions/broadcast_analyzer.rb +81 -0
  314. data/lib/graphql/subscriptions/default_subscription_resolve_extension.rb +21 -0
  315. data/lib/graphql/subscriptions/event.rb +94 -26
  316. data/lib/graphql/subscriptions/instrumentation.rb +10 -6
  317. data/lib/graphql/subscriptions/serialize.rb +53 -6
  318. data/lib/graphql/subscriptions/subscription_root.rb +15 -5
  319. data/lib/graphql/subscriptions.rb +122 -54
  320. data/lib/graphql/tracing/active_support_notifications_tracing.rb +8 -17
  321. data/lib/graphql/tracing/appoptics_tracing.rb +173 -0
  322. data/lib/graphql/tracing/appsignal_tracing.rb +23 -0
  323. data/lib/graphql/tracing/data_dog_tracing.rb +32 -2
  324. data/lib/graphql/tracing/new_relic_tracing.rb +9 -12
  325. data/lib/graphql/tracing/notifications_tracing.rb +59 -0
  326. data/lib/graphql/tracing/platform_tracing.rb +66 -7
  327. data/lib/graphql/tracing/prometheus_tracing/graphql_collector.rb +4 -1
  328. data/lib/graphql/tracing/prometheus_tracing.rb +8 -0
  329. data/lib/graphql/tracing/scout_tracing.rb +19 -0
  330. data/lib/graphql/tracing/skylight_tracing.rb +9 -0
  331. data/lib/graphql/tracing/statsd_tracing.rb +42 -0
  332. data/lib/graphql/tracing.rb +15 -35
  333. data/lib/graphql/types/big_int.rb +5 -1
  334. data/lib/graphql/types/int.rb +10 -3
  335. data/lib/graphql/types/iso_8601_date.rb +42 -0
  336. data/lib/graphql/types/iso_8601_date_time.rb +32 -8
  337. data/lib/graphql/types/relay/base_connection.rb +6 -88
  338. data/lib/graphql/types/relay/base_edge.rb +2 -37
  339. data/lib/graphql/types/relay/connection_behaviors.rb +174 -0
  340. data/lib/graphql/types/relay/default_relay.rb +31 -0
  341. data/lib/graphql/types/relay/edge_behaviors.rb +64 -0
  342. data/lib/graphql/types/relay/has_node_field.rb +41 -0
  343. data/lib/graphql/types/relay/has_nodes_field.rb +41 -0
  344. data/lib/graphql/types/relay/node.rb +2 -4
  345. data/lib/graphql/types/relay/node_behaviors.rb +15 -0
  346. data/lib/graphql/types/relay/node_field.rb +4 -23
  347. data/lib/graphql/types/relay/nodes_field.rb +16 -18
  348. data/lib/graphql/types/relay/page_info.rb +2 -14
  349. data/lib/graphql/types/relay/page_info_behaviors.rb +25 -0
  350. data/lib/graphql/types/relay.rb +11 -3
  351. data/lib/graphql/types/string.rb +8 -2
  352. data/lib/graphql/types.rb +1 -0
  353. data/lib/graphql/unauthorized_error.rb +2 -2
  354. data/lib/graphql/union_type.rb +61 -46
  355. data/lib/graphql/unresolved_type_error.rb +2 -2
  356. data/lib/graphql/upgrader/member.rb +150 -112
  357. data/lib/graphql/upgrader/schema.rb +1 -0
  358. data/lib/graphql/version.rb +1 -1
  359. data/lib/graphql.rb +89 -18
  360. data/readme.md +4 -7
  361. metadata +115 -703
  362. data/lib/graphql/execution/interpreter/hash_response.rb +0 -46
  363. data/lib/graphql/literal_validation_error.rb +0 -6
  364. data/lib/graphql/types/relay/base_field.rb +0 -22
  365. data/lib/graphql/types/relay/base_interface.rb +0 -29
  366. data/lib/graphql/types/relay/base_object.rb +0 -26
  367. data/spec/dummy/Gemfile +0 -12
  368. data/spec/dummy/Gemfile.lock +0 -157
  369. data/spec/dummy/README.md +0 -24
  370. data/spec/dummy/Rakefile +0 -7
  371. data/spec/dummy/app/assets/config/manifest.js +0 -1
  372. data/spec/dummy/app/assets/javascripts/application.js +0 -66
  373. data/spec/dummy/app/channels/application_cable/channel.rb +0 -5
  374. data/spec/dummy/app/channels/application_cable/connection.rb +0 -5
  375. data/spec/dummy/app/channels/graphql_channel.rb +0 -116
  376. data/spec/dummy/app/controllers/application_controller.rb +0 -4
  377. data/spec/dummy/app/controllers/pages_controller.rb +0 -5
  378. data/spec/dummy/app/helpers/application_helper.rb +0 -3
  379. data/spec/dummy/app/jobs/application_job.rb +0 -3
  380. data/spec/dummy/app/views/layouts/application.html.erb +0 -12
  381. data/spec/dummy/app/views/pages/show.html +0 -16
  382. data/spec/dummy/bin/bundle +0 -4
  383. data/spec/dummy/bin/rails +0 -5
  384. data/spec/dummy/bin/rake +0 -5
  385. data/spec/dummy/bin/setup +0 -31
  386. data/spec/dummy/bin/update +0 -27
  387. data/spec/dummy/bin/yarn +0 -12
  388. data/spec/dummy/config/application.rb +0 -30
  389. data/spec/dummy/config/boot.rb +0 -4
  390. data/spec/dummy/config/cable.yml +0 -10
  391. data/spec/dummy/config/environment.rb +0 -6
  392. data/spec/dummy/config/environments/development.rb +0 -40
  393. data/spec/dummy/config/environments/production.rb +0 -76
  394. data/spec/dummy/config/environments/test.rb +0 -37
  395. data/spec/dummy/config/initializers/application_controller_renderer.rb +0 -9
  396. data/spec/dummy/config/initializers/backtrace_silencers.rb +0 -8
  397. data/spec/dummy/config/initializers/cookies_serializer.rb +0 -6
  398. data/spec/dummy/config/initializers/filter_parameter_logging.rb +0 -5
  399. data/spec/dummy/config/initializers/inflections.rb +0 -17
  400. data/spec/dummy/config/initializers/mime_types.rb +0 -5
  401. data/spec/dummy/config/initializers/wrap_parameters.rb +0 -10
  402. data/spec/dummy/config/locales/en.yml +0 -33
  403. data/spec/dummy/config/puma.rb +0 -57
  404. data/spec/dummy/config/routes.rb +0 -4
  405. data/spec/dummy/config/secrets.yml +0 -32
  406. data/spec/dummy/config.ru +0 -6
  407. data/spec/dummy/log/test.log +0 -199
  408. data/spec/dummy/package.json +0 -5
  409. data/spec/dummy/public/404.html +0 -67
  410. data/spec/dummy/public/422.html +0 -67
  411. data/spec/dummy/public/500.html +0 -66
  412. data/spec/dummy/public/apple-touch-icon-precomposed.png +0 -0
  413. data/spec/dummy/public/apple-touch-icon.png +0 -0
  414. data/spec/dummy/public/favicon.ico +0 -0
  415. data/spec/dummy/public/robots.txt +0 -1
  416. data/spec/dummy/test/application_system_test_case.rb +0 -6
  417. data/spec/dummy/test/system/action_cable_subscription_test.rb +0 -45
  418. data/spec/dummy/test/test_helper.rb +0 -4
  419. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/4w/4wzXRZrAkwKdgYaSE0pid5eB-fer8vSfSku_NPg4rMA.cache +0 -0
  420. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/7I/7IHVBiJT06QSpgLpLoJIxboQ0B-D_tMTxsvoezBTV3Q.cache +0 -1
  421. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/8w/8wY_SKagj8wHuwGNAAf6JnQ8joMbC6cEYpHrTAI8Urc.cache +0 -1
  422. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/AK/AKzz1u6bGb4auXcrObA_g5LL-oV0ejNGa448AgAi_WQ.cache +0 -1
  423. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/ET/ETW4uxvaYpruL8y6_ZptUH82ZowMaHIqvg5WexBFdEM.cache +0 -3
  424. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/F1/F1TWpjjyA56k9Z90n5B3xRn7DUdGjX73QCkYC6k07JQ.cache +0 -0
  425. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/F8/F8MUNRzORGFgr329fNM0xLaoWCXdv3BIalT7dsvLfjs.cache +0 -2
  426. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/KB/KB07ZaKNC5uXJ7TjLi-WqnY6g7dq8wWp_8N3HNjBNxg.cache +0 -2
  427. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Ms/MsKSimH_UCB-H1tLvDABDHuvGciuoW6kVqQWDrXU5FQ.cache +0 -0
  428. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Mt/Mtci-Kim50aPOmeClD4AIicKn1d1WJ0n454IjSd94sk.cache +0 -0
  429. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/QH/QHt3Tc1Y6M66Oo_pDuMyWrQNs4Pp3SMeZR5K1wJj2Ts.cache +0 -1
  430. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/XU/XU4k1OXnfMils5SrirorPvDSyDSqiOWLZNtmAH1HH8k.cache +0 -0
  431. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/ZI/ZIof7mZxWWCnraIFOCuV6a8QRWzKJXJnx2Xd7C0ZyX0.cache +0 -1
  432. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/cG/cGc_puuPS5pZKgUcy1Y_i1L6jl5UtsiIrMH59rTzR6c.cache +0 -3
  433. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/df/dfro_B6bx3KP1Go-7jEOqqZ2j4hVRseXIc3es9PKQno.cache +0 -1
  434. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/jO/jO1DfbqnG0mTULsjJJANc3fefrG2zt7DIMmcptMT628.cache +0 -1
  435. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/pE/pE7gO6pQ-z187Swb4hT554wmqsq-cNzgPWLrCz-LQQQ.cache +0 -0
  436. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/r9/r9iU1l58a6rxkZSW5RSC52_tD-_UQuHxoMVnkfJ7Mhs.cache +0 -1
  437. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/xi/xitPPFfPIyDMpaznV0sBBcw8eSCV8PJcLLWin78sCgE.cache +0 -0
  438. data/spec/dummy/tmp/screenshots/failures_test_it_handles_subscriptions.png +0 -0
  439. data/spec/fixtures/upgrader/account.original.rb +0 -19
  440. data/spec/fixtures/upgrader/account.transformed.rb +0 -20
  441. data/spec/fixtures/upgrader/blame_range.original.rb +0 -43
  442. data/spec/fixtures/upgrader/blame_range.transformed.rb +0 -30
  443. data/spec/fixtures/upgrader/date_time.original.rb +0 -24
  444. data/spec/fixtures/upgrader/date_time.transformed.rb +0 -23
  445. data/spec/fixtures/upgrader/delete_project.original.rb +0 -28
  446. data/spec/fixtures/upgrader/delete_project.transformed.rb +0 -27
  447. data/spec/fixtures/upgrader/gist_order_field.original.rb +0 -14
  448. data/spec/fixtures/upgrader/gist_order_field.transformed.rb +0 -13
  449. data/spec/fixtures/upgrader/increment_count.original.rb +0 -59
  450. data/spec/fixtures/upgrader/increment_count.transformed.rb +0 -50
  451. data/spec/fixtures/upgrader/photo.original.rb +0 -10
  452. data/spec/fixtures/upgrader/photo.transformed.rb +0 -12
  453. data/spec/fixtures/upgrader/release_order.original.rb +0 -15
  454. data/spec/fixtures/upgrader/release_order.transformed.rb +0 -14
  455. data/spec/fixtures/upgrader/starrable.original.rb +0 -49
  456. data/spec/fixtures/upgrader/starrable.transformed.rb +0 -46
  457. data/spec/fixtures/upgrader/subscribable.original.rb +0 -55
  458. data/spec/fixtures/upgrader/subscribable.transformed.rb +0 -51
  459. data/spec/fixtures/upgrader/type_x.original.rb +0 -65
  460. data/spec/fixtures/upgrader/type_x.transformed.rb +0 -56
  461. data/spec/graphql/analysis/analyze_query_spec.rb +0 -272
  462. data/spec/graphql/analysis/ast/field_usage_spec.rb +0 -51
  463. data/spec/graphql/analysis/ast/max_query_complexity_spec.rb +0 -120
  464. data/spec/graphql/analysis/ast/max_query_depth_spec.rb +0 -114
  465. data/spec/graphql/analysis/ast/query_complexity_spec.rb +0 -299
  466. data/spec/graphql/analysis/ast/query_depth_spec.rb +0 -108
  467. data/spec/graphql/analysis/ast_spec.rb +0 -269
  468. data/spec/graphql/analysis/field_usage_spec.rb +0 -62
  469. data/spec/graphql/analysis/max_query_complexity_spec.rb +0 -102
  470. data/spec/graphql/analysis/max_query_depth_spec.rb +0 -101
  471. data/spec/graphql/analysis/query_complexity_spec.rb +0 -301
  472. data/spec/graphql/analysis/query_depth_spec.rb +0 -81
  473. data/spec/graphql/argument_spec.rb +0 -159
  474. data/spec/graphql/authorization_spec.rb +0 -974
  475. data/spec/graphql/backtrace_spec.rb +0 -206
  476. data/spec/graphql/base_type_spec.rb +0 -171
  477. data/spec/graphql/boolean_type_spec.rb +0 -21
  478. data/spec/graphql/compatibility/execution_specification_spec.rb +0 -4
  479. data/spec/graphql/compatibility/lazy_execution_specification_spec.rb +0 -4
  480. data/spec/graphql/compatibility/query_parser_specification_spec.rb +0 -6
  481. data/spec/graphql/compatibility/schema_parser_specification_spec.rb +0 -6
  482. data/spec/graphql/define/assign_argument_spec.rb +0 -61
  483. data/spec/graphql/define/instance_definable_spec.rb +0 -203
  484. data/spec/graphql/directive/skip_directive_spec.rb +0 -9
  485. data/spec/graphql/directive_spec.rb +0 -295
  486. data/spec/graphql/enum_type_spec.rb +0 -158
  487. data/spec/graphql/execution/execute_spec.rb +0 -303
  488. data/spec/graphql/execution/instrumentation_spec.rb +0 -184
  489. data/spec/graphql/execution/interpreter_spec.rb +0 -485
  490. data/spec/graphql/execution/lazy/lazy_method_map_spec.rb +0 -57
  491. data/spec/graphql/execution/lazy_spec.rb +0 -247
  492. data/spec/graphql/execution/lookahead_spec.rb +0 -390
  493. data/spec/graphql/execution/multiplex_spec.rb +0 -211
  494. data/spec/graphql/execution/typecast_spec.rb +0 -47
  495. data/spec/graphql/execution_error_spec.rb +0 -325
  496. data/spec/graphql/field_spec.rb +0 -246
  497. data/spec/graphql/float_type_spec.rb +0 -16
  498. data/spec/graphql/function_spec.rb +0 -152
  499. data/spec/graphql/id_type_spec.rb +0 -33
  500. data/spec/graphql/input_object_type_spec.rb +0 -25
  501. data/spec/graphql/int_type_spec.rb +0 -35
  502. data/spec/graphql/interface_type_spec.rb +0 -196
  503. data/spec/graphql/internal_representation/print_spec.rb +0 -41
  504. data/spec/graphql/internal_representation/rewrite_spec.rb +0 -376
  505. data/spec/graphql/introspection/directive_type_spec.rb +0 -61
  506. data/spec/graphql/introspection/input_value_type_spec.rb +0 -144
  507. data/spec/graphql/introspection/introspection_query_spec.rb +0 -59
  508. data/spec/graphql/introspection/schema_type_spec.rb +0 -56
  509. data/spec/graphql/introspection/type_type_spec.rb +0 -155
  510. data/spec/graphql/language/block_string_spec.rb +0 -70
  511. data/spec/graphql/language/definition_slice_spec.rb +0 -226
  512. data/spec/graphql/language/document_from_schema_definition_spec.rb +0 -770
  513. data/spec/graphql/language/equality_spec.rb +0 -84
  514. data/spec/graphql/language/generation_spec.rb +0 -38
  515. data/spec/graphql/language/lexer_spec.rb +0 -135
  516. data/spec/graphql/language/nodes_spec.rb +0 -67
  517. data/spec/graphql/language/parser_spec.rb +0 -183
  518. data/spec/graphql/language/printer_spec.rb +0 -215
  519. data/spec/graphql/language/visitor_spec.rb +0 -419
  520. data/spec/graphql/list_type_spec.rb +0 -57
  521. data/spec/graphql/non_null_type_spec.rb +0 -48
  522. data/spec/graphql/object_type_spec.rb +0 -197
  523. data/spec/graphql/query/arguments_spec.rb +0 -346
  524. data/spec/graphql/query/context_spec.rb +0 -292
  525. data/spec/graphql/query/executor_spec.rb +0 -341
  526. data/spec/graphql/query/literal_input_spec.rb +0 -91
  527. data/spec/graphql/query/result_spec.rb +0 -29
  528. data/spec/graphql/query/serial_execution/value_resolution_spec.rb +0 -109
  529. data/spec/graphql/query_spec.rb +0 -800
  530. data/spec/graphql/rake_task_spec.rb +0 -59
  531. data/spec/graphql/scalar_type_spec.rb +0 -66
  532. data/spec/graphql/schema/argument_spec.rb +0 -152
  533. data/spec/graphql/schema/build_from_definition_spec.rb +0 -1187
  534. data/spec/graphql/schema/catchall_middleware_spec.rb +0 -35
  535. data/spec/graphql/schema/directive/feature_spec.rb +0 -81
  536. data/spec/graphql/schema/directive/transform_spec.rb +0 -39
  537. data/spec/graphql/schema/enum_spec.rb +0 -83
  538. data/spec/graphql/schema/enum_value_spec.rb +0 -24
  539. data/spec/graphql/schema/field_extension_spec.rb +0 -137
  540. data/spec/graphql/schema/field_spec.rb +0 -301
  541. data/spec/graphql/schema/finder_spec.rb +0 -135
  542. data/spec/graphql/schema/input_object_spec.rb +0 -347
  543. data/spec/graphql/schema/instrumentation_spec.rb +0 -43
  544. data/spec/graphql/schema/interface_spec.rb +0 -215
  545. data/spec/graphql/schema/introspection_system_spec.rb +0 -56
  546. data/spec/graphql/schema/list_spec.rb +0 -46
  547. data/spec/graphql/schema/loader_spec.rb +0 -286
  548. data/spec/graphql/schema/member/accepts_definition_spec.rb +0 -115
  549. data/spec/graphql/schema/member/build_type_spec.rb +0 -63
  550. data/spec/graphql/schema/member/scoped_spec.rb +0 -217
  551. data/spec/graphql/schema/member/type_system_helpers_spec.rb +0 -63
  552. data/spec/graphql/schema/middleware_chain_spec.rb +0 -57
  553. data/spec/graphql/schema/mutation_spec.rb +0 -150
  554. data/spec/graphql/schema/non_null_spec.rb +0 -46
  555. data/spec/graphql/schema/object_spec.rb +0 -315
  556. data/spec/graphql/schema/printer_spec.rb +0 -869
  557. data/spec/graphql/schema/relay_classic_mutation_spec.rb +0 -252
  558. data/spec/graphql/schema/rescue_middleware_spec.rb +0 -88
  559. data/spec/graphql/schema/resolver_spec.rb +0 -714
  560. data/spec/graphql/schema/scalar_spec.rb +0 -101
  561. data/spec/graphql/schema/subscription_spec.rb +0 -440
  562. data/spec/graphql/schema/timeout_middleware_spec.rb +0 -188
  563. data/spec/graphql/schema/traversal_spec.rb +0 -222
  564. data/spec/graphql/schema/type_expression_spec.rb +0 -39
  565. data/spec/graphql/schema/union_spec.rb +0 -72
  566. data/spec/graphql/schema/unique_within_type_spec.rb +0 -44
  567. data/spec/graphql/schema/validation_spec.rb +0 -355
  568. data/spec/graphql/schema/warden_spec.rb +0 -926
  569. data/spec/graphql/static_validation/rules/argument_literals_are_compatible_spec.rb +0 -413
  570. data/spec/graphql/static_validation/rules/argument_names_are_unique_spec.rb +0 -44
  571. data/spec/graphql/static_validation/rules/arguments_are_defined_spec.rb +0 -112
  572. data/spec/graphql/static_validation/rules/directives_are_defined_spec.rb +0 -35
  573. data/spec/graphql/static_validation/rules/directives_are_in_valid_locations_spec.rb +0 -42
  574. data/spec/graphql/static_validation/rules/fields_are_defined_on_type_spec.rb +0 -167
  575. data/spec/graphql/static_validation/rules/fields_have_appropriate_selections_spec.rb +0 -66
  576. data/spec/graphql/static_validation/rules/fields_will_merge_spec.rb +0 -740
  577. data/spec/graphql/static_validation/rules/fragment_names_are_unique_spec.rb +0 -28
  578. data/spec/graphql/static_validation/rules/fragment_spreads_are_possible_spec.rb +0 -52
  579. data/spec/graphql/static_validation/rules/fragment_types_exist_spec.rb +0 -42
  580. data/spec/graphql/static_validation/rules/fragments_are_finite_spec.rb +0 -123
  581. data/spec/graphql/static_validation/rules/fragments_are_named_spec.rb +0 -24
  582. data/spec/graphql/static_validation/rules/fragments_are_on_composite_types_spec.rb +0 -56
  583. data/spec/graphql/static_validation/rules/fragments_are_used_spec.rb +0 -61
  584. data/spec/graphql/static_validation/rules/mutation_root_exists_spec.rb +0 -39
  585. data/spec/graphql/static_validation/rules/no_definitions_are_present_spec.rb +0 -62
  586. data/spec/graphql/static_validation/rules/operation_names_are_valid_spec.rb +0 -82
  587. data/spec/graphql/static_validation/rules/required_arguments_are_present_spec.rb +0 -73
  588. data/spec/graphql/static_validation/rules/required_input_object_attributes_are_present_spec.rb +0 -86
  589. data/spec/graphql/static_validation/rules/subscription_root_exists_spec.rb +0 -34
  590. data/spec/graphql/static_validation/rules/unique_directives_per_location_spec.rb +0 -188
  591. data/spec/graphql/static_validation/rules/variable_default_values_are_correctly_typed_spec.rb +0 -196
  592. data/spec/graphql/static_validation/rules/variable_names_are_unique_spec.rb +0 -23
  593. data/spec/graphql/static_validation/rules/variable_usages_are_allowed_spec.rb +0 -236
  594. data/spec/graphql/static_validation/rules/variables_are_input_types_spec.rb +0 -78
  595. data/spec/graphql/static_validation/rules/variables_are_used_and_defined_spec.rb +0 -81
  596. data/spec/graphql/static_validation/type_stack_spec.rb +0 -29
  597. data/spec/graphql/static_validation/validator_spec.rb +0 -204
  598. data/spec/graphql/string_type_spec.rb +0 -80
  599. data/spec/graphql/subscriptions/serialize_spec.rb +0 -49
  600. data/spec/graphql/subscriptions_spec.rb +0 -540
  601. data/spec/graphql/tracing/new_relic_tracing_spec.rb +0 -84
  602. data/spec/graphql/tracing/platform_tracing_spec.rb +0 -141
  603. data/spec/graphql/tracing/prometheus_tracing_spec.rb +0 -42
  604. data/spec/graphql/tracing/scout_tracing_spec.rb +0 -17
  605. data/spec/graphql/tracing/skylight_tracing_spec.rb +0 -63
  606. data/spec/graphql/tracing_spec.rb +0 -52
  607. data/spec/graphql/types/big_int_spec.rb +0 -24
  608. data/spec/graphql/types/iso_8601_date_time_spec.rb +0 -137
  609. data/spec/graphql/types/relay/base_edge_spec.rb +0 -33
  610. data/spec/graphql/union_type_spec.rb +0 -211
  611. data/spec/graphql/upgrader/member_spec.rb +0 -583
  612. data/spec/graphql/upgrader/schema_spec.rb +0 -82
  613. data/spec/integration/mongoid/graphql/relay/mongo_relation_connection_spec.rb +0 -528
  614. data/spec/integration/mongoid/spec_helper.rb +0 -2
  615. data/spec/integration/mongoid/star_trek/data.rb +0 -126
  616. data/spec/integration/mongoid/star_trek/schema.rb +0 -425
  617. data/spec/integration/rails/data.rb +0 -110
  618. data/spec/integration/rails/generators/base_generator_test.rb +0 -7
  619. data/spec/integration/rails/generators/graphql/enum_generator_spec.rb +0 -30
  620. data/spec/integration/rails/generators/graphql/install_generator_spec.rb +0 -218
  621. data/spec/integration/rails/generators/graphql/interface_generator_spec.rb +0 -34
  622. data/spec/integration/rails/generators/graphql/loader_generator_spec.rb +0 -59
  623. data/spec/integration/rails/generators/graphql/mutation_generator_spec.rb +0 -71
  624. data/spec/integration/rails/generators/graphql/object_generator_spec.rb +0 -54
  625. data/spec/integration/rails/generators/graphql/scalar_generator_spec.rb +0 -28
  626. data/spec/integration/rails/generators/graphql/union_generator_spec.rb +0 -67
  627. data/spec/integration/rails/graphql/input_object_type_spec.rb +0 -364
  628. data/spec/integration/rails/graphql/query/variables_spec.rb +0 -375
  629. data/spec/integration/rails/graphql/relay/array_connection_spec.rb +0 -290
  630. data/spec/integration/rails/graphql/relay/base_connection_spec.rb +0 -101
  631. data/spec/integration/rails/graphql/relay/connection_instrumentation_spec.rb +0 -80
  632. data/spec/integration/rails/graphql/relay/connection_resolve_spec.rb +0 -79
  633. data/spec/integration/rails/graphql/relay/connection_type_spec.rb +0 -106
  634. data/spec/integration/rails/graphql/relay/edge_spec.rb +0 -10
  635. data/spec/integration/rails/graphql/relay/mutation_spec.rb +0 -387
  636. data/spec/integration/rails/graphql/relay/node_spec.rb +0 -263
  637. data/spec/integration/rails/graphql/relay/page_info_spec.rb +0 -111
  638. data/spec/integration/rails/graphql/relay/range_add_spec.rb +0 -117
  639. data/spec/integration/rails/graphql/relay/relation_connection_spec.rb +0 -837
  640. data/spec/integration/rails/graphql/schema_spec.rb +0 -489
  641. data/spec/integration/rails/graphql/tracing/active_support_notifications_tracing_spec.rb +0 -62
  642. data/spec/integration/rails/spec_helper.rb +0 -25
  643. data/spec/integration/tmp/app/graphql/types/bird_type.rb +0 -7
  644. data/spec/spec_helper.rb +0 -116
  645. data/spec/support/dummy/data.rb +0 -45
  646. data/spec/support/dummy/schema.rb +0 -511
  647. data/spec/support/error_bubbling_helpers.rb +0 -23
  648. data/spec/support/global_id.rb +0 -23
  649. data/spec/support/jazz.rb +0 -772
  650. data/spec/support/lazy_helpers.rb +0 -192
  651. data/spec/support/magic_cards/schema.graphql +0 -33
  652. data/spec/support/minimum_input_object.rb +0 -21
  653. data/spec/support/new_relic.rb +0 -27
  654. data/spec/support/parser/filename_example.graphql +0 -5
  655. data/spec/support/parser/filename_example_error_1.graphql +0 -4
  656. data/spec/support/parser/filename_example_error_2.graphql +0 -5
  657. data/spec/support/skylight.rb +0 -39
  658. data/spec/support/star_wars/schema.rb +0 -465
  659. data/spec/support/static_validation_helpers.rb +0 -32
@@ -1,489 +0,0 @@
1
- # frozen_string_literal: true
2
- require "spec_helper"
3
-
4
- describe GraphQL::Schema do
5
- let(:schema) { Dummy::Schema }
6
- let(:admin_schema) { Dummy::AdminSchema }
7
- let(:relay_schema) { StarWars::Schema }
8
- let(:empty_schema) { GraphQL::Schema.define }
9
-
10
- describe "#graphql_definition" do
11
- it "returns itself" do
12
- assert_equal empty_schema, empty_schema.graphql_definition
13
- end
14
- end
15
-
16
- describe "#rescue_from" do
17
- it "adds handlers to the rescue middleware" do
18
- schema_defn = schema.graphql_definition
19
- rescue_middleware = schema_defn.middleware.first
20
- assert_equal(1, rescue_middleware.rescue_table.length)
21
- # normally, you'd use a real class, not a symbol:
22
- schema_defn.rescue_from(:error_class, :another_err_class) { "my custom message" }
23
- assert_equal(3, rescue_middleware.rescue_table.length)
24
- end
25
- end
26
-
27
- describe "#find" do
28
- it "finds a member using a string path" do
29
- field = schema.find("Edible.fatContent")
30
- assert_equal "fatContent", field.name
31
- end
32
- end
33
-
34
- describe "#union_memberships" do
35
- it "returns a list of unions that include the type" do
36
- assert_equal [schema.types["Animal"], schema.types["AnimalAsCow"]], schema.union_memberships(schema.types["Cow"])
37
- end
38
- end
39
-
40
- describe "#to_document" do
41
- it "returns the AST for the schema IDL" do
42
- expected = GraphQL::Language::DocumentFromSchemaDefinition.new(schema).document
43
- assert expected.eql?(schema.to_document)
44
- end
45
- end
46
-
47
- describe "#root_types" do
48
- it "returns a list of the schema's root types" do
49
- assert_equal(
50
- [
51
- Dummy::DairyAppQuery.graphql_definition,
52
- Dummy::DairyAppMutation.graphql_definition.graphql_definition,
53
- Dummy::Subscription.graphql_definition
54
- ],
55
- schema.root_types
56
- )
57
- end
58
- end
59
-
60
- describe "#references_to" do
61
- it "returns a list of Field and Arguments of that type" do
62
- cow_field = schema.get_field("Query", "cow")
63
- assert_equal [cow_field], schema.references_to("Cow")
64
- end
65
-
66
- it "returns an empty list when type is not referenced by any field or argument" do
67
- assert_equal [], schema.references_to("Goat")
68
- end
69
- end
70
-
71
- describe "#to_definition" do
72
- it "prints out the schema definition" do
73
- assert_equal schema.to_definition, GraphQL::Schema::Printer.print_schema(schema)
74
- end
75
- end
76
-
77
- # Interpreter has subscription support hardcoded, it doesn't just call through.
78
- if !TESTING_INTERPRETER
79
- describe "#subscription" do
80
- it "calls fields on the subscription type" do
81
- res = schema.execute("subscription { test }")
82
- assert_equal("Test", res["data"]["test"])
83
- end
84
- end
85
- end
86
-
87
- describe "#resolve_type" do
88
- describe "when the return value is nil" do
89
- it "returns nil" do
90
- result = relay_schema.resolve_type(123, nil)
91
- assert_equal(nil, result)
92
- end
93
- end
94
-
95
- describe "when the return value is not a BaseType" do
96
- it "raises an error " do
97
- err = assert_raises(RuntimeError) {
98
- relay_schema.resolve_type(:test_error, nil)
99
- }
100
- assert_includes err.message, "not_a_type (Symbol)"
101
- end
102
- end
103
-
104
- describe "when the hook wasn't implemented" do
105
- it "raises not implemented" do
106
- assert_raises(NotImplementedError) {
107
- empty_schema.resolve_type(nil, nil)
108
- }
109
- end
110
- end
111
-
112
- describe "when a schema is defined with abstract types, but no resolve type hook" do
113
- it "raises not implemented" do
114
- interface = GraphQL::InterfaceType.define do
115
- name "SomeInterface"
116
- end
117
-
118
- query_type = GraphQL::ObjectType.define do
119
- name "Query"
120
- field :something, interface
121
- end
122
-
123
- assert_raises(NotImplementedError) {
124
- GraphQL::Schema.define do
125
- query(query_type)
126
- end
127
- }
128
- end
129
- end
130
- end
131
-
132
- describe "object_from_id" do
133
- describe "when the hook wasn't implemented" do
134
- it "raises not implemented" do
135
- assert_raises(NotImplementedError) {
136
- empty_schema.object_from_id(nil, nil)
137
- }
138
- end
139
- end
140
-
141
- describe "when a schema is defined with a relay ID field, but no hook" do
142
- it "raises not implemented" do
143
- thing_type = GraphQL::ObjectType.define do
144
- name "Thing"
145
- global_id_field :id
146
- end
147
-
148
- query_type = GraphQL::ObjectType.define do
149
- name "Query"
150
- field :thing, thing_type
151
- end
152
-
153
- assert_raises(NotImplementedError) {
154
- GraphQL::Schema.define do
155
- query(query_type)
156
- resolve_type NO_OP_RESOLVE_TYPE
157
- end
158
- }
159
- end
160
- end
161
- end
162
-
163
- describe "id_from_object" do
164
- describe "when the hook wasn't implemented" do
165
- it "raises not implemented" do
166
- assert_raises(NotImplementedError) {
167
- empty_schema.id_from_object(nil, nil, nil)
168
- }
169
- end
170
- end
171
-
172
- describe "when a schema is defined with a node field, but no hook" do
173
- it "raises not implemented" do
174
- query_type = GraphQL::ObjectType.define do
175
- name "Query"
176
- field :node, GraphQL::Relay::Node.field
177
- end
178
-
179
- assert_raises(NotImplementedError) {
180
- GraphQL::Schema.define do
181
- query(query_type)
182
- resolve_type NO_OP_RESOLVE_TYPE
183
- end
184
- }
185
- end
186
- end
187
- end
188
-
189
- describe "directives" do
190
- describe "when directives are not overwritten" do
191
- it "contains built-in directives" do
192
- schema = GraphQL::Schema.define
193
-
194
- assert_equal ['deprecated', 'include', 'skip'], schema.directives.keys.sort
195
-
196
- assert_equal GraphQL::Directive::DeprecatedDirective, schema.directives['deprecated']
197
- assert_equal GraphQL::Directive::IncludeDirective, schema.directives['include']
198
- assert_equal GraphQL::Directive::SkipDirective, schema.directives['skip']
199
- end
200
- end
201
-
202
- describe "when directives are overwritten" do
203
- it "contains only specified directives" do
204
- schema = GraphQL::Schema.define do
205
- directives [GraphQL::Directive::DeprecatedDirective]
206
- end
207
-
208
- assert_equal ['deprecated'], schema.directives.keys.sort
209
- assert_equal GraphQL::Directive::DeprecatedDirective, schema.directives['deprecated']
210
- end
211
- end
212
- end
213
-
214
- describe ".from_definition" do
215
- it "uses BuildFromSchema to build a schema from a definition string" do
216
- schema = <<-SCHEMA
217
- type Query {
218
- str: String
219
- }
220
- SCHEMA
221
-
222
- built_schema = GraphQL::Schema.from_definition(schema)
223
- assert_equal schema.chop, GraphQL::Schema::Printer.print_schema(built_schema)
224
- end
225
-
226
- it "builds from a file" do
227
- schema = GraphQL::Schema.from_definition("spec/support/magic_cards/schema.graphql")
228
- assert_instance_of GraphQL::Schema, schema
229
- expected_types = ["Card", "Color", "Expansion", "Printing"]
230
- assert_equal expected_types, (expected_types & schema.types.keys)
231
- end
232
- end
233
-
234
- describe ".from_introspection" do
235
- let(:schema) {
236
- query_root = GraphQL::ObjectType.define do
237
- name 'Query'
238
- field :str, types.String
239
- end
240
-
241
- GraphQL::Schema.define do
242
- query query_root
243
- end
244
- }
245
- let(:schema_json) {
246
- schema.execute(GraphQL::Introspection::INTROSPECTION_QUERY)
247
- }
248
- it "uses Schema::Loader to build a schema from an introspection result" do
249
- built_schema = GraphQL::Schema.from_introspection(schema_json)
250
- assert_equal GraphQL::Schema::Printer.print_schema(schema), GraphQL::Schema::Printer.print_schema(built_schema)
251
- end
252
- end
253
-
254
- describe "#instrument" do
255
- class MultiplyInstrumenter
256
- def initialize(multiplier)
257
- @multiplier = multiplier
258
- end
259
-
260
- def instrument(type_defn, field_defn)
261
- if type_defn.name == "Query" && field_defn.name == "int"
262
- prev_proc = field_defn.resolve_proc
263
- new_resolve_proc = ->(obj, args, ctx) {
264
- inner_value = prev_proc.call(obj, args, ctx)
265
- inner_value * @multiplier
266
- }
267
-
268
- field_defn.redefine do
269
- resolve(new_resolve_proc)
270
- end
271
- else
272
- field_defn
273
- end
274
- end
275
- end
276
-
277
- class VariableCountInstrumenter
278
- attr_reader :counts
279
- def initialize
280
- @counts = []
281
- end
282
-
283
- def before_query(query)
284
- @counts << query.variables.length
285
- end
286
-
287
- def after_query(query)
288
- @counts << :end
289
- end
290
- end
291
-
292
- # Use this to assert instrumenters are called as a stack
293
- class StackCheckInstrumenter
294
- def initialize(counter)
295
- @counter = counter
296
- end
297
-
298
- def before_query(query)
299
- @counter.counts << :in
300
- end
301
-
302
- def after_query(query)
303
- @counter.counts << :out
304
- end
305
- end
306
-
307
- let(:variable_counter) {
308
- VariableCountInstrumenter.new
309
- }
310
- let(:query_type) {
311
- GraphQL::ObjectType.define do
312
- name "Query"
313
- field :int, types.Int do
314
- argument :value, types.Int
315
- resolve ->(obj, args, ctx) { args[:value] == 13 ? raise("13 is unlucky") : args[:value] }
316
- end
317
- end
318
- }
319
-
320
- let(:schema) {
321
- spec = self
322
- GraphQL::Schema.define do
323
- query(spec.query_type)
324
- instrument(:field, MultiplyInstrumenter.new(3))
325
- instrument(:query, StackCheckInstrumenter.new(spec.variable_counter))
326
- instrument(:query, spec.variable_counter)
327
- end
328
- }
329
-
330
- it "can modify field definitions" do
331
- res = schema.execute(" { int(value: 2) } ")
332
- assert_equal 6, res["data"]["int"]
333
- end
334
-
335
- it "can wrap query execution" do
336
- schema.execute("query getInt($val: Int = 5){ int(value: $val) } ")
337
- schema.execute("query getInt($val: Int = 5, $val2: Int = 3){ int(value: $val) int2: int(value: $val2) } ")
338
- assert_equal [:in, 1, :end, :out, :in, 2, :end, :out], variable_counter.counts
339
- end
340
-
341
- it "runs even when a runtime error occurs" do
342
- schema.execute("query getInt($val: Int = 5){ int(value: $val) } ")
343
- assert_raises(RuntimeError) {
344
- schema.execute("query getInt($val: Int = 13){ int(value: $val) } ")
345
- }
346
- assert_equal [:in, 1, :end, :out, :in, 1, :end, :out], variable_counter.counts
347
- end
348
-
349
- it "can be applied after the fact" do
350
- res = schema.execute("query { int(value: 2) } ")
351
- assert_equal 6, res["data"]["int"]
352
-
353
- schema.instrument(:field, MultiplyInstrumenter.new(4))
354
- res = schema.execute("query { int(value: 2) } ")
355
- assert_equal 24, res["data"]["int"]
356
- end
357
-
358
- class CyclicalDependencyInstrumentation
359
- def initialize(schema)
360
- @schema = schema
361
- end
362
-
363
- def instrument(type, field)
364
- @schema.types # infinite loop
365
- field
366
- end
367
- end
368
-
369
- describe "field instrumenters which cause loops" do
370
- it "has a nice error message" do
371
- assert_raises(GraphQL::Schema::CyclicalDefinitionError) do
372
- schema.redefine {
373
- instrument(:field, CyclicalDependencyInstrumentation.new(self.target))
374
- }
375
- end
376
- end
377
- end
378
- end
379
-
380
- describe "#lazy? / #lazy_method_name" do
381
- class LazyObj; end
382
- class LazyObjChild < LazyObj; end
383
-
384
- let(:schema) {
385
- query_type = GraphQL::ObjectType.define(name: "Query")
386
- GraphQL::Schema.define do
387
- query(query_type)
388
- lazy_resolve(Integer, :itself)
389
- lazy_resolve(LazyObj, :dup)
390
- end
391
- }
392
-
393
- it "returns registered lazy method names by class/superclass, or returns nil" do
394
- assert_equal :itself, schema.lazy_method_name(68)
395
- assert_equal true, schema.lazy?(77)
396
- assert_equal :dup, schema.lazy_method_name(LazyObj.new)
397
- assert_equal true, schema.lazy?(LazyObj.new)
398
- assert_equal :dup, schema.lazy_method_name(LazyObjChild.new)
399
- assert_equal true, schema.lazy?(LazyObjChild.new)
400
- assert_nil schema.lazy_method_name({})
401
- assert_equal false, schema.lazy?({})
402
- end
403
- end
404
-
405
- describe "#dup" do
406
- it "copies internal state" do
407
- schema_1 = schema.graphql_definition
408
- schema_2 = schema_1.dup
409
- refute schema_2.types.equal?(schema_1.types)
410
-
411
- refute schema_2.instrumenters.equal?(schema_1.instrumenters)
412
- assert_equal schema_2.instrumenters, schema_1.instrumenters
413
-
414
- refute schema_2.middleware.equal?(schema_1.middleware)
415
- assert_equal schema_2.middleware, schema_1.middleware
416
-
417
- schema_2.middleware << ->(*args) { :noop }
418
- refute_equal schema_2.middleware, schema_1.middleware
419
- end
420
- end
421
-
422
- describe "#validate" do
423
- it "returns errors on the query string" do
424
- errors = schema.validate("{ cheese(id: 1) { flavor flavor: id } }")
425
- assert_equal 1, errors.length
426
- assert_equal "Field 'flavor' has a field conflict: flavor or id?", errors.first.message
427
-
428
- errors = schema.validate("{ cheese(id: 1) { flavor id } }")
429
- assert_equal [], errors
430
- end
431
-
432
- it "accepts a list of custom rules" do
433
- custom_rules = GraphQL::StaticValidation::ALL_RULES - [GraphQL::StaticValidation::FragmentsAreNamed]
434
- errors = schema.validate("fragment on Cheese { id }", rules: custom_rules)
435
- assert_equal([], errors)
436
- end
437
-
438
- it "accepts a context hash" do
439
- context = { admin: false }
440
- # AdminSchema is a barebones dummy schema, where fields are visible only with context[:admin] == true
441
- errors = admin_schema.validate('query { adminOnlyMessage }', context: context)
442
- assert_equal 1, errors.length
443
- assert_equal("Field 'adminOnlyMessage' doesn't exist on type 'AdminDairyAppQuery'", errors.first.message)
444
-
445
- context = { admin: true }
446
- errors = admin_schema.validate('query { adminOnlyMessage }', context: context)
447
- assert_equal([], errors)
448
- end
449
- end
450
-
451
- describe "#as_json / #to_json" do
452
- it "returns the instrospection result" do
453
- result = schema.execute(GraphQL::Introspection::INTROSPECTION_QUERY)
454
- assert_equal result, schema.as_json
455
- assert_equal result, JSON.parse(schema.to_json)
456
- end
457
- end
458
-
459
- describe "#as_json" do
460
- it "returns a hash" do
461
- result = schema.execute(GraphQL::Introspection::INTROSPECTION_QUERY)
462
- assert_equal result.as_json.class, Hash
463
- end
464
- end
465
-
466
- describe "#get_field" do
467
- it "returns fields by type or type name" do
468
- field = schema.get_field("Cheese", "id")
469
- assert_instance_of GraphQL::Field, field
470
- field_2 = schema.get_field(Dummy::Cheese.graphql_definition, "id")
471
- assert_equal field, field_2
472
- end
473
- end
474
-
475
- describe "class-based schemas" do
476
- it "delegates to the graphql definition" do
477
- # Not delegated:
478
- assert_equal Jazz::Query.graphql_definition, Jazz::Schema.query
479
- assert Jazz::Schema.respond_to?(:query)
480
- # Delegated
481
- assert_equal [], Jazz::Schema.tracers
482
- assert Jazz::Schema.respond_to?(:tracers)
483
- end
484
-
485
- it "works with plugins" do
486
- assert_equal "xyz", Jazz::Schema.metadata[:plugin_key]
487
- end
488
- end
489
- end
@@ -1,62 +0,0 @@
1
- # frozen_string_literal: true
2
- require "spec_helper"
3
-
4
- describe GraphQL::Tracing::ActiveSupportNotificationsTracing do
5
- let(:schema) {
6
- StarWars::Schema.redefine {
7
- tracer GraphQL::Tracing::ActiveSupportNotificationsTracing
8
- }
9
- }
10
-
11
- it "pushes through AS::N" do
12
- traces = []
13
-
14
- callback = ->(name, started, finished, id, data) {
15
- path_str = if data.key?(:field)
16
- " (#{data[:field].path})"
17
- elsif data.key?(:context)
18
- " (#{data[:context].irep_node.owner_type}.#{data[:context].field.name})"
19
- else
20
- ""
21
- end
22
- traces << "#{name}#{path_str}"
23
- }
24
-
25
- query_string = <<-GRAPHQL
26
- query Bases($id1: ID!, $id2: ID!){
27
- b1: batchedBase(id: $id1) { name }
28
- b2: batchedBase(id: $id2) { name }
29
- }
30
- GRAPHQL
31
- first_id = StarWars::Base.first.id
32
- last_id = StarWars::Base.last.id
33
-
34
- ActiveSupport::Notifications.subscribed(callback, /^graphql/) do
35
- schema.execute(query_string, variables: {
36
- "id1" => first_id,
37
- "id2" => last_id,
38
- })
39
- end
40
-
41
- expected_traces = [
42
- "graphql.lex",
43
- "graphql.parse",
44
- "graphql.validate",
45
- "graphql.analyze_query",
46
- "graphql.analyze_multiplex",
47
- "graphql.execute_field (Query.batchedBase)",
48
- "graphql.execute_field (Query.batchedBase)",
49
- "graphql.execute_query",
50
- "graphql.lazy_loader",
51
- "graphql.execute_field_lazy (Query.batchedBase)",
52
- "graphql.execute_field (Base.name)",
53
- "graphql.execute_field_lazy (Query.batchedBase)",
54
- "graphql.execute_field (Base.name)",
55
- "graphql.execute_field_lazy (Base.name)",
56
- "graphql.execute_field_lazy (Base.name)",
57
- "graphql.execute_query_lazy",
58
- "graphql.execute_multiplex",
59
- ]
60
- assert_equal expected_traces, traces
61
- end
62
- end
@@ -1,25 +0,0 @@
1
- # frozen_string_literal: true
2
- require "rake"
3
- require "rails/all"
4
- require "rails/generators"
5
- require "sequel"
6
-
7
- if ENV['DATABASE'] == 'POSTGRESQL'
8
- require 'pg'
9
- else
10
- require "jdbc/sqlite3" if RUBY_ENGINE == 'jruby'
11
- require "sqlite3" if RUBY_ENGINE == 'ruby'
12
- end
13
-
14
- require_relative "generators/base_generator_test"
15
- require_relative "data"
16
-
17
- def with_active_record_log
18
- io = StringIO.new
19
- prev_logger = ActiveRecord::Base.logger
20
- ActiveRecord::Base.logger = Logger.new(io)
21
- yield
22
- io.string
23
- ensure
24
- ActiveRecord::Base.logger = prev_logger
25
- end
@@ -1,7 +0,0 @@
1
- module Types
2
- module BirdType
3
- include Types::BaseInterface
4
- field :wingspan, Integer, null: false
5
- field :foliage, [Types::ColorType], null: true
6
- end
7
- end
data/spec/spec_helper.rb DELETED
@@ -1,116 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rubygems'
4
- require 'bundler'
5
- Bundler.require
6
-
7
- # Print full backtrace for failiures:
8
- ENV["BACKTRACE"] = "1"
9
- # Set this env var to use Interpreter for fixture schemas.
10
- # Eventually, interpreter will be the default.
11
- TESTING_INTERPRETER = ENV["TESTING_INTERPRETER"]
12
- TESTING_RESCUE_FROM = !TESTING_INTERPRETER
13
-
14
- require "codeclimate-test-reporter"
15
- CodeClimate::TestReporter.start
16
-
17
- require "graphql"
18
- require "rake"
19
- require "graphql/rake_task"
20
- require "benchmark"
21
- require "pry"
22
- require "minitest/autorun"
23
- require "minitest/focus"
24
- require "minitest/reporters"
25
-
26
- Minitest::Reporters.use! Minitest::Reporters::DefaultReporter.new(color: true)
27
-
28
- Minitest::Spec.make_my_diffs_pretty!
29
-
30
- # Filter out Minitest backtrace while allowing backtrace from other libraries
31
- # to be shown.
32
- Minitest.backtrace_filter = Minitest::BacktraceFilter.new
33
-
34
- # This is for convenient access to metadata in test definitions
35
- assign_metadata_key = ->(target, key, value) { target.metadata[key] = value }
36
- assign_metadata_flag = ->(target, flag) { target.metadata[flag] = true }
37
- GraphQL::Schema.accepts_definitions(set_metadata: assign_metadata_key)
38
- GraphQL::BaseType.accepts_definitions(metadata: assign_metadata_key)
39
- GraphQL::BaseType.accepts_definitions(metadata2: assign_metadata_key)
40
- GraphQL::Field.accepts_definitions(metadata: assign_metadata_key)
41
- GraphQL::Argument.accepts_definitions(metadata: assign_metadata_key)
42
- GraphQL::Argument.accepts_definitions(metadata_flag: assign_metadata_flag)
43
- GraphQL::EnumType::EnumValue.accepts_definitions(metadata: assign_metadata_key)
44
-
45
- # Can be used as a GraphQL::Schema::Warden for some purposes, but allows nothing
46
- module NothingWarden
47
- def self.enum_values(enum_type)
48
- []
49
- end
50
- end
51
-
52
- # Use this when a schema requires a `resolve_type` hook
53
- # but you know it won't be called
54
- NO_OP_RESOLVE_TYPE = ->(type, obj, ctx) {
55
- raise "this should never be called"
56
- }
57
-
58
- # Load dependencies
59
- ['Mongoid', 'Rails'].each do |integration|
60
- begin
61
- Object.const_get(integration)
62
- Dir["#{File.dirname(__FILE__)}/integration/#{integration.downcase}/**/*.rb"].each do |f|
63
- require f
64
- end
65
- rescue NameError
66
- # ignore
67
- end
68
- end
69
-
70
- # Load support files
71
- Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each do |f|
72
- require f
73
- end
74
-
75
- def star_trek_query(string, variables={}, context: {})
76
- StarTrek::Schema.execute(string, variables: variables, context: context)
77
- end
78
-
79
- def star_wars_query(string, variables={}, context: {})
80
- StarWars::Schema.execute(string, variables: variables, context: context)
81
- end
82
-
83
- def with_bidirectional_pagination
84
- prev_value = GraphQL::Relay::ConnectionType.bidirectional_pagination
85
- GraphQL::Relay::ConnectionType.bidirectional_pagination = true
86
- yield
87
- ensure
88
- GraphQL::Relay::ConnectionType.bidirectional_pagination = prev_value
89
- end
90
-
91
- module TestTracing
92
- class << self
93
- def clear
94
- traces.clear
95
- end
96
-
97
- def with_trace
98
- clear
99
- yield
100
- traces
101
- end
102
-
103
- def traces
104
- @traces ||= []
105
- end
106
-
107
- def trace(key, data)
108
- data[:key] = key
109
- data[:path] ||= data.key?(:context) ? data[:context].path : nil
110
- result = yield
111
- data[:result] = result
112
- traces << data
113
- result
114
- end
115
- end
116
- end