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
data/spec/support/jazz.rb DELETED
@@ -1,772 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # Here's the "application"
4
- module Jazz
5
- module Models
6
- Instrument = Struct.new(:name, :family)
7
- Ensemble = Struct.new(:name)
8
- Musician = Struct.new(:name, :favorite_key)
9
- Key = Struct.new(:root, :sharp, :flat) do
10
- def self.from_notation(key_str)
11
- key, sharp_or_flat = key_str.split("")
12
- sharp = sharp_or_flat == "♯"
13
- flat = sharp_or_flat == "♭"
14
- Models::Key.new(key, sharp, flat)
15
- end
16
-
17
- def to_notation
18
- "#{root}#{sharp ? "♯" : ""}#{flat ? "♭" : ""}"
19
- end
20
- end
21
-
22
- def self.reset
23
- @data = {
24
- "Instrument" => [
25
- Models::Instrument.new("Banjo", :str),
26
- Models::Instrument.new("Flute", "WOODWIND"),
27
- Models::Instrument.new("Trumpet", "BRASS"),
28
- Models::Instrument.new("Piano", "KEYS"),
29
- Models::Instrument.new("Organ", "KEYS"),
30
- Models::Instrument.new("Drum Kit", "PERCUSSION"),
31
- ],
32
- "Ensemble" => [
33
- Models::Ensemble.new("Bela Fleck and the Flecktones"),
34
- Models::Ensemble.new("Robert Glasper Experiment"),
35
- Models::Ensemble.new("Spinal Tap"),
36
- ],
37
- "Musician" => [
38
- Models::Musician.new("Herbie Hancock", Models::Key.from_notation("B♭")),
39
- ],
40
- }
41
- end
42
-
43
- def self.data
44
- @data || reset
45
- end
46
- end
47
-
48
- class BaseArgument < GraphQL::Schema::Argument
49
- def initialize(*args, custom: nil, **kwargs)
50
- @custom = custom
51
- super(*args, **kwargs)
52
- end
53
-
54
- def to_graphql
55
- arg_defn = super
56
- arg_defn.metadata[:custom] = @custom
57
- arg_defn
58
- end
59
- end
60
-
61
- # A custom field class that supports the `upcase:` option
62
- class BaseField < GraphQL::Schema::Field
63
- argument_class BaseArgument
64
- attr_reader :upcase
65
-
66
- def initialize(*args, **options, &block)
67
- @upcase = options.delete(:upcase)
68
- super(*args, **options, &block)
69
- end
70
-
71
- def resolve_field(*)
72
- result = super
73
- if @upcase && result
74
- result.upcase
75
- else
76
- result
77
- end
78
- end
79
-
80
- def resolve(*)
81
- result = super
82
- if @upcase && result
83
- result.upcase
84
- else
85
- result
86
- end
87
- end
88
- end
89
-
90
- class BaseObject < GraphQL::Schema::Object
91
- # Use this overridden field class
92
- field_class BaseField
93
-
94
- class << self
95
- def config(key, value)
96
- configs[key] = value
97
- end
98
-
99
- def configs
100
- @configs ||= {}
101
- end
102
-
103
- def to_graphql
104
- type_defn = super
105
- configs.each do |k, v|
106
- type_defn.metadata[k] = v
107
- end
108
- type_defn
109
- end
110
- end
111
- end
112
-
113
- module BaseInterface
114
- include GraphQL::Schema::Interface
115
- # Use this overridden field class
116
- field_class BaseField
117
-
118
- # These methods are available to child interfaces
119
- definition_methods do
120
- def upcased_field(*args, **kwargs, &block)
121
- field(*args, upcase: true, **kwargs, &block)
122
- end
123
- end
124
- end
125
-
126
- class BaseEnumValue < GraphQL::Schema::EnumValue
127
- def initialize(*args, custom_setting: nil, **kwargs, &block)
128
- @custom_setting = custom_setting
129
- super(*args, **kwargs, &block)
130
- end
131
-
132
- def to_graphql
133
- enum_value_defn = super
134
- enum_value_defn.metadata[:custom_setting] = @custom_setting
135
- enum_value_defn
136
- end
137
- end
138
-
139
- class BaseEnum < GraphQL::Schema::Enum
140
- enum_value_class BaseEnumValue
141
- end
142
-
143
- # Some arbitrary global ID scheme
144
- # *Type suffix is removed automatically
145
- module GloballyIdentifiableType
146
- include BaseInterface
147
- description "A fetchable object in the system"
148
- field(
149
- name: :id,
150
- type: ID,
151
- null: false,
152
- description: "A unique identifier for this object",
153
- )
154
- upcased_field :upcased_id, ID, null: false, resolver_method: :id # upcase: true added by helper
155
-
156
- def id
157
- GloballyIdentifiableType.to_id(@object)
158
- end
159
-
160
- def self.to_id(object)
161
- "#{object.class.name.split("::").last}/#{object.name}"
162
- end
163
-
164
- def self.find(id)
165
- class_name, object_name = id.split("/")
166
- Models.data[class_name].find { |obj| obj.name == object_name }
167
- end
168
- end
169
-
170
- module NamedEntity
171
- include BaseInterface
172
- field :name, String, null: false
173
- end
174
-
175
- # test field inheritance
176
- class ObjectWithUpcasedName < BaseObject
177
- # Test extra arguments:
178
- field :upcase_name, String, null: false, upcase: true
179
-
180
- def upcase_name
181
- object.name # upcase is applied by the superclass
182
- end
183
- end
184
-
185
- module HasMusicians
186
- include BaseInterface
187
- field :musicians, "[Jazz::Musician]", null: false
188
- end
189
-
190
- # Here's a new-style GraphQL type definition
191
- class Ensemble < ObjectWithUpcasedName
192
- # Test string type names
193
- # This method should override inherited one
194
- field :name, "String", null: false, resolver_method: :overridden_name
195
- implements GloballyIdentifiableType, NamedEntity, HasMusicians
196
- description "A group of musicians playing together"
197
- config :config, :configged
198
- field :formed_at, String, null: true, hash_key: "formedAtDate"
199
-
200
- def overridden_name
201
- @object.name.sub("Robert Glasper", "ROBERT GLASPER")
202
- end
203
-
204
- def self.authorized?(object, context)
205
- # Spinal Tap is top-secret, don't show it to anyone.
206
- obj_name = object.is_a?(Hash) ? object[:name] : object.name
207
- obj_name != "Spinal Tap"
208
- end
209
- end
210
-
211
- class Family < BaseEnum
212
- description "Groups of musical instruments"
213
- # support string and symbol
214
- value "STRING", "Makes a sound by vibrating strings", value: :str, custom_setting: 1
215
- value :WOODWIND, "Makes a sound by vibrating air in a pipe"
216
- value :BRASS, "Makes a sound by amplifying the sound of buzzing lips"
217
- value "PERCUSSION", "Makes a sound by hitting something that vibrates"
218
- value "DIDGERIDOO", "Makes a sound by amplifying the sound of buzzing lips", deprecation_reason: "Merged into BRASS"
219
- value "KEYS" do
220
- description "Neither here nor there, really"
221
- end
222
- value "SILENCE", "Makes no sound", value: false
223
- end
224
-
225
- # Lives side-by-side with an old-style definition
226
- using GraphQL::DeprecatedDSL # for ! and types[]
227
-
228
- class InstrumentType < BaseObject
229
- implements NamedEntity
230
- implements GloballyIdentifiableType
231
-
232
- field :upcased_id, ID, null: false
233
-
234
- def upcased_id
235
- GloballyIdentifiableType.to_id(object).upcase
236
- end
237
-
238
- field :family, Family, null: false
239
- end
240
-
241
- class Key < GraphQL::Schema::Scalar
242
- description "A musical key"
243
- def self.coerce_input(val, ctx)
244
- Models::Key.from_notation(val)
245
- end
246
-
247
- def self.coerce_result(val, ctx)
248
- val.to_notation
249
- end
250
- end
251
-
252
- class Musician < BaseObject
253
- implements GloballyIdentifiableType
254
- implements NamedEntity
255
- description "Someone who plays an instrument"
256
- field :instrument, InstrumentType, null: false do
257
- description "An object played in order to produce music"
258
- end
259
- field :favorite_key, Key, null: true
260
- # Test lists with nullable members:
261
- field :inspect_context, [String, null: true], null: false
262
- field :add_error, String, null: false, extras: [:execution_errors]
263
-
264
- def inspect_context
265
- [
266
- @context.custom_method,
267
- @context[:magic_key],
268
- @context[:normal_key],
269
- nil,
270
- ]
271
- end
272
-
273
- def add_error(execution_errors:)
274
- execution_errors.add("this has a path")
275
- "done"
276
- end
277
- end
278
-
279
- # Since this is not a legacy input type, this test can be removed
280
- class LegacyInputType < GraphQL::Schema::InputObject
281
- argument :int_value, Int, required: true
282
- end
283
-
284
- class InspectableInput < GraphQL::Schema::InputObject
285
- argument :ensemble_id, ID, required: false, loads: Ensemble
286
- argument :string_value, String, required: true, description: "Test description kwarg"
287
- argument :nested_input, InspectableInput, required: false
288
- argument :legacy_input, LegacyInputType, required: false
289
-
290
- def helper_method
291
- [
292
- # Context is available in the InputObject
293
- context[:message],
294
- # ~~A GraphQL::Query::Arguments instance is available~~ not anymore
295
- self[:string_value],
296
- # Legacy inputs have underscored method access too
297
- legacy_input ? legacy_input.int_value : "-",
298
- # Access by method call is available
299
- "(#{nested_input ? nested_input.helper_method : "-"})",
300
- ].join(", ")
301
- end
302
- end
303
-
304
- class InspectableKey < BaseObject
305
- field :root, String, null: false
306
- field :is_sharp, Boolean, null: false, method: :sharp
307
- field :is_flat, Boolean, null: false, method: :flat
308
- end
309
-
310
- class PerformingAct < GraphQL::Schema::Union
311
- possible_types Musician, Ensemble
312
-
313
- def self.resolve_type(object, context)
314
- GraphQL::Execution::Lazy.new do
315
- if object.is_a?(Models::Ensemble)
316
- Ensemble
317
- else
318
- Musician
319
- end
320
- end
321
- end
322
- end
323
-
324
- class HashKeyTest < BaseObject
325
- field :falsey, Boolean, null: false
326
- end
327
-
328
- # Another new-style definition, with method overrides
329
- class Query < BaseObject
330
- field :ensembles, [Ensemble], null: false
331
- field :find, GloballyIdentifiableType, null: true do
332
- argument :id, ID, required: true
333
- end
334
- field :instruments, [InstrumentType], null: false do
335
- argument :family, Family, required: false
336
- end
337
- field :inspect_input, [String], null: false do
338
- argument :input, InspectableInput, required: true, custom: :ok
339
- end
340
- field :inspect_key, InspectableKey, null: false do
341
- argument :key, Key, required: true
342
- end
343
- field :now_playing, PerformingAct, null: false
344
-
345
- def now_playing; Models.data["Ensemble"].first; end
346
-
347
- # For asserting that the object is initialized once:
348
- field :object_id, String, null: false
349
- field :inspect_context, [String], null: false
350
- field :hashyEnsemble, Ensemble, null: false
351
-
352
- field :echo_json, GraphQL::Types::JSON, null: false do
353
- argument :input, GraphQL::Types::JSON, required: true
354
- end
355
-
356
- field :echo_first_json, GraphQL::Types::JSON, null: false do
357
- argument :input, [GraphQL::Types::JSON], required: true
358
- end
359
-
360
- field :upcase_check_1, String, null: true, resolver_method: :upcase_check, extras: [:upcase]
361
- field :upcase_check_2, String, null: false, upcase: false, resolver_method: :upcase_check, extras: [:upcase]
362
- field :upcase_check_3, String, null: false, upcase: true, resolver_method: :upcase_check, extras: [:upcase]
363
- field :upcase_check_4, String, null: false, upcase: "why not?", resolver_method: :upcase_check, extras: [:upcase]
364
- def upcase_check(upcase:)
365
- upcase.inspect
366
- end
367
-
368
- def ensembles
369
- # Filter out the unauthorized one to avoid an error later
370
- Models.data["Ensemble"].select { |e| e.name != "Spinal Tap" }
371
- end
372
-
373
- def find(id:)
374
- if id == "MagicalSkipId"
375
- context.skip
376
- else
377
- GloballyIdentifiableType.find(id)
378
- end
379
- end
380
-
381
- def instruments(family: nil)
382
- objs = Models.data["Instrument"]
383
- if family
384
- objs = objs.select { |i| i.family == family }
385
- end
386
- objs
387
- end
388
-
389
- # This is for testing input object behavior
390
- def inspect_input(input:)
391
- [
392
- input.class.name,
393
- input.helper_method,
394
- # Access by method
395
- input.string_value,
396
- # Access by key:
397
- input[:string_value],
398
- input.key?(:string_value).to_s,
399
- # ~~Access by legacy key~~ # not anymore
400
- input[:string_value],
401
- input.ensemble,
402
- input.key?(:ensemble).to_s,
403
- ]
404
- end
405
-
406
- def inspect_key(key:)
407
- key
408
- end
409
-
410
- def inspect_context
411
- [
412
- context.custom_method,
413
- context[:magic_key],
414
- context[:normal_key],
415
- ]
416
- end
417
-
418
- def hashy_ensemble
419
- # Both string and symbol keys are supported:
420
-
421
- {
422
- name: "The Grateful Dead",
423
- "musicians" => [
424
- OpenStruct.new(name: "Jerry Garcia"),
425
- ],
426
- "formedAtDate" => "May 5, 1965",
427
- }
428
- end
429
-
430
- def echo_json(input:)
431
- input
432
- end
433
-
434
- def echo_first_json(input:)
435
- input.first
436
- end
437
-
438
- field :hash_by_string, HashKeyTest, null: false
439
- field :hash_by_sym, HashKeyTest, null: false
440
-
441
- def hash_by_string
442
- {"falsey" => false}
443
- end
444
-
445
- def hash_by_sym
446
- {falsey: false}
447
- end
448
-
449
- field :named_entities, [NamedEntity, null: true], null: false
450
-
451
- def named_entities
452
- [Models.data["Ensemble"].first, nil]
453
- end
454
-
455
- field :default_value_test, String, null: false do
456
- if TESTING_INTERPRETER
457
- argument :arg_with_default, InspectableInput, required: false, default_value: { string_value: "S" }
458
- else
459
- argument :arg_with_default, InspectableInput, required: false, default_value: { "stringValue" => "S" }
460
- end
461
- end
462
-
463
- def default_value_test(arg_with_default:)
464
- "#{arg_with_default.class.name} -> #{arg_with_default.to_h}"
465
- end
466
-
467
- field :complex_hash_key, String, null: false, hash_key: :'foo bar/fizz-buzz'
468
- end
469
-
470
- class EnsembleInput < GraphQL::Schema::InputObject
471
- argument :name, String, required: true
472
- end
473
-
474
- class AddInstrument < GraphQL::Schema::Mutation
475
- null true
476
- description "Register a new musical instrument in the database"
477
-
478
- argument :name, String, required: true
479
- argument :family, Family, required: true
480
-
481
- field :instrument, InstrumentType, null: false
482
- # This is meaningless, but it's to test the conflict with `Hash#entries`
483
- field :entries, [InstrumentType], null: false
484
- # Test `extras` injection
485
-
486
- field :ee, String, null: false
487
- extras [:execution_errors]
488
-
489
- def resolve(name:, family:, execution_errors:)
490
- instrument = Jazz::Models::Instrument.new(name, family)
491
- Jazz::Models.data["Instrument"] << instrument
492
- {instrument: instrument, entries: Jazz::Models.data["Instrument"], ee: execution_errors.class.name}
493
- end
494
- end
495
-
496
- class AddEnsembleRelay < GraphQL::Schema::RelayClassicMutation
497
- argument :ensemble, EnsembleInput, required: true
498
- field :ensemble, Ensemble, null: false
499
-
500
- def resolve(ensemble:)
501
- ens = Models::Ensemble.new(ensemble.name)
502
- Models.data["Ensemble"] << ens
503
- { ensemble: ens }
504
- end
505
- end
506
-
507
- class AddSitar < GraphQL::Schema::RelayClassicMutation
508
- null true
509
- description "Get Sitar to musical instrument"
510
-
511
- field :instrument, InstrumentType, null: false
512
-
513
- def resolve
514
- instrument = Models::Instrument.new("Sitar", :str)
515
- {instrument: instrument}
516
- end
517
- end
518
-
519
- class HasExtras < GraphQL::Schema::RelayClassicMutation
520
- null true
521
- description "Test extras in RelayClassicMutation"
522
-
523
- argument :int, Integer, required: false
524
- extras [:ast_node]
525
-
526
- field :node_class, String, null: false
527
- field :int, Integer, null: true
528
-
529
- def resolve(int: nil, ast_node:)
530
- {
531
- int: int,
532
- node_class: ast_node.class.name,
533
- }
534
- end
535
- end
536
-
537
- class RenameNamedEntity < GraphQL::Schema::RelayClassicMutation
538
- argument :named_entity_id, ID, required: true, loads: NamedEntity
539
- argument :new_name, String, required: true
540
-
541
- field :named_entity, NamedEntity, null: false
542
-
543
- def resolve(named_entity:, new_name:)
544
- # doesn't actually update the "database"
545
- dup_named_entity = named_entity.dup
546
- dup_named_entity.name = new_name
547
-
548
- {
549
- named_entity: dup_named_entity
550
- }
551
- end
552
- end
553
-
554
- class RenamePerformingAct < GraphQL::Schema::RelayClassicMutation
555
- argument :performing_act_id, ID, required: true, loads: PerformingAct
556
- argument :new_name, String, required: true
557
-
558
- field :performing_act, PerformingAct, null: false
559
-
560
- def resolve(performing_act:, new_name:)
561
- # doesn't actually update the "database"
562
- dup_performing_act = performing_act.dup
563
- dup_performing_act.name = new_name
564
-
565
- {
566
- performing_act: dup_performing_act
567
- }
568
- end
569
- end
570
-
571
- class RenameEnsemble < GraphQL::Schema::RelayClassicMutation
572
- argument :ensemble_id, ID, required: true, loads: Ensemble
573
- argument :new_name, String, required: true
574
-
575
- field :ensemble, Ensemble, null: false
576
-
577
- def resolve(ensemble:, new_name:)
578
- # doesn't actually update the "database"
579
- dup_ensemble = ensemble.dup
580
- dup_ensemble.name = new_name
581
- {
582
- ensemble: dup_ensemble,
583
- }
584
- end
585
- end
586
-
587
- class UpvoteEnsembles < GraphQL::Schema::RelayClassicMutation
588
- argument :ensemble_ids, [ID], required: true, loads: Ensemble
589
-
590
- field :ensembles, [Ensemble], null: false
591
-
592
- def resolve(ensembles:)
593
- {
594
- ensembles: ensembles
595
- }
596
- end
597
- end
598
-
599
- class UpvoteEnsemblesAsBands < GraphQL::Schema::RelayClassicMutation
600
- argument :ensemble_ids, [ID], required: true, loads: Ensemble, as: :bands
601
-
602
- field :ensembles, [Ensemble], null: false
603
-
604
- def resolve(bands:)
605
- {
606
- ensembles: bands
607
- }
608
- end
609
- end
610
-
611
- class UpvoteEnsemblesIds < GraphQL::Schema::RelayClassicMutation
612
- argument :ensembles_ids, [ID], required: true, loads: Ensemble
613
-
614
- field :ensembles, [Ensemble], null: false
615
-
616
- def resolve(ensembles:)
617
- {
618
- ensembles: ensembles
619
- }
620
- end
621
- end
622
-
623
- class RenameEnsembleAsBand < RenameEnsemble
624
- argument :ensemble_id, ID, required: true, loads: Ensemble, as: :band
625
-
626
- def resolve(band:, new_name:)
627
- super(ensemble: band, new_name: new_name)
628
- end
629
- end
630
-
631
- class Mutation < BaseObject
632
- field :add_ensemble, Ensemble, null: false do
633
- argument :input, EnsembleInput, required: true
634
- end
635
-
636
- field :add_instrument, mutation: AddInstrument
637
- field :add_ensemble_relay, mutation: AddEnsembleRelay
638
- field :add_sitar, mutation: AddSitar
639
- field :rename_ensemble, mutation: RenameEnsemble
640
- field :rename_named_entity, mutation: RenameNamedEntity
641
- field :rename_performing_act, mutation: RenamePerformingAct
642
- field :upvote_ensembles, mutation: UpvoteEnsembles
643
- field :upvote_ensembles_as_bands, mutation: UpvoteEnsemblesAsBands
644
- field :upvote_ensembles_ids, mutation: UpvoteEnsemblesIds
645
- field :rename_ensemble_as_band, mutation: RenameEnsembleAsBand
646
- field :has_extras, mutation: HasExtras
647
-
648
- def add_ensemble(input:)
649
- ens = Models::Ensemble.new(input.name)
650
- Models.data["Ensemble"] << ens
651
- ens
652
- end
653
-
654
- field :prepare_input, Integer, null: false do
655
- argument :input, Integer, required: true, prepare: :square, as: :squared_input
656
- end
657
-
658
- def prepare_input(squared_input:)
659
- # Test that `square` is called
660
- squared_input
661
- end
662
-
663
- def square(value)
664
- value ** 2
665
- end
666
- end
667
-
668
- class MetadataPlugin
669
- def self.use(schema_defn, value:)
670
- schema_defn.target.metadata[:plugin_key] = value
671
- end
672
- end
673
-
674
- class CustomContext < GraphQL::Query::Context
675
- def [](key)
676
- if key == :magic_key
677
- "magic_value"
678
- else
679
- super
680
- end
681
- end
682
-
683
- def custom_method
684
- "custom_method"
685
- end
686
- end
687
-
688
- module Introspection
689
- class TypeType < GraphQL::Introspection::TypeType
690
- def self.authorized?(_obj, ctx)
691
- if ctx[:cant_introspect]
692
- raise GraphQL::ExecutionError, "You're not allowed to introspect here"
693
- else
694
- super
695
- end
696
- end
697
-
698
- def name
699
- n = object.graphql_name
700
- n && n.upcase
701
- end
702
- end
703
-
704
- class NestedType < GraphQL::Introspection::TypeType
705
- def name
706
- object.name.upcase
707
- end
708
-
709
- class DeeplyNestedType < GraphQL::Introspection::TypeType
710
- def name
711
- object.name.upcase
712
- end
713
- end
714
- end
715
-
716
- class SchemaType < GraphQL::Introspection::SchemaType
717
- graphql_name "__Schema"
718
-
719
- field :is_jazzy, Boolean, null: false
720
-
721
- def is_jazzy
722
- true
723
- end
724
- end
725
-
726
- class DynamicFields < GraphQL::Introspection::DynamicFields
727
- field :__typename_length, Int, null: false, extras: [:irep_node]
728
- field :__ast_node_class, String, null: false, extras: [:ast_node]
729
-
730
- def __typename_length(irep_node: nil)
731
- __typename(irep_node: irep_node).length
732
- end
733
-
734
- def __ast_node_class(ast_node:)
735
- ast_node.class.name
736
- end
737
- end
738
-
739
- class EntryPoints < GraphQL::Introspection::EntryPoints
740
- field :__classname, String, "The Ruby class name of the root object", null: false
741
-
742
- def __classname
743
- if context.interpreter?
744
- object.object.class.name
745
- else
746
- object.class.name
747
- end
748
- end
749
- end
750
- end
751
-
752
- # New-style Schema definition
753
- class Schema < GraphQL::Schema
754
- query(Query)
755
- mutation(Mutation)
756
- context_class CustomContext
757
- introspection(Introspection)
758
- use MetadataPlugin, value: "xyz"
759
- def self.resolve_type(type, obj, ctx)
760
- class_name = obj.class.name.split("::").last
761
- ctx.schema.types[class_name] || raise("No type for #{obj.inspect}")
762
- end
763
-
764
- def self.object_from_id(id, ctx)
765
- GloballyIdentifiableType.find(id)
766
- end
767
- if TESTING_INTERPRETER
768
- use GraphQL::Execution::Interpreter
769
- use GraphQL::Analysis::AST
770
- end
771
- end
772
- end