graphql 1.12.12 → 2.2.14

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 (392) hide show
  1. checksums.yaml +4 -4
  2. data/lib/generators/graphql/core.rb +3 -8
  3. data/lib/generators/graphql/enum_generator.rb +4 -10
  4. data/lib/generators/graphql/field_extractor.rb +31 -0
  5. data/lib/generators/graphql/input_generator.rb +50 -0
  6. data/lib/generators/graphql/install/mutation_root_generator.rb +34 -0
  7. data/lib/generators/graphql/{templates → install/templates}/base_mutation.erb +2 -0
  8. data/lib/generators/graphql/{templates → install/templates}/mutation_type.erb +2 -0
  9. data/lib/generators/graphql/install_generator.rb +14 -4
  10. data/lib/generators/graphql/interface_generator.rb +7 -7
  11. data/lib/generators/graphql/mutation_create_generator.rb +22 -0
  12. data/lib/generators/graphql/mutation_delete_generator.rb +22 -0
  13. data/lib/generators/graphql/mutation_generator.rb +5 -30
  14. data/lib/generators/graphql/mutation_update_generator.rb +22 -0
  15. data/lib/generators/graphql/object_generator.rb +10 -38
  16. data/lib/generators/graphql/orm_mutations_base.rb +40 -0
  17. data/lib/generators/graphql/relay.rb +23 -12
  18. data/lib/generators/graphql/scalar_generator.rb +4 -2
  19. data/lib/generators/graphql/templates/base_argument.erb +2 -0
  20. data/lib/generators/graphql/templates/base_connection.erb +2 -0
  21. data/lib/generators/graphql/templates/base_edge.erb +2 -0
  22. data/lib/generators/graphql/templates/base_enum.erb +2 -0
  23. data/lib/generators/graphql/templates/base_field.erb +2 -0
  24. data/lib/generators/graphql/templates/base_input_object.erb +2 -0
  25. data/lib/generators/graphql/templates/base_interface.erb +2 -0
  26. data/lib/generators/graphql/templates/base_object.erb +2 -0
  27. data/lib/generators/graphql/templates/base_resolver.erb +6 -0
  28. data/lib/generators/graphql/templates/base_scalar.erb +2 -0
  29. data/lib/generators/graphql/templates/base_union.erb +2 -0
  30. data/lib/generators/graphql/templates/enum.erb +5 -1
  31. data/lib/generators/graphql/templates/graphql_controller.erb +2 -0
  32. data/lib/generators/graphql/templates/input.erb +9 -0
  33. data/lib/generators/graphql/templates/interface.erb +4 -2
  34. data/lib/generators/graphql/templates/loader.erb +2 -0
  35. data/lib/generators/graphql/templates/mutation.erb +3 -1
  36. data/lib/generators/graphql/templates/mutation_create.erb +20 -0
  37. data/lib/generators/graphql/templates/mutation_delete.erb +20 -0
  38. data/lib/generators/graphql/templates/mutation_update.erb +21 -0
  39. data/lib/generators/graphql/templates/node_type.erb +2 -0
  40. data/lib/generators/graphql/templates/object.erb +4 -2
  41. data/lib/generators/graphql/templates/query_type.erb +2 -0
  42. data/lib/generators/graphql/templates/scalar.erb +3 -1
  43. data/lib/generators/graphql/templates/schema.erb +19 -2
  44. data/lib/generators/graphql/templates/union.erb +4 -2
  45. data/lib/generators/graphql/type_generator.rb +46 -10
  46. data/lib/generators/graphql/union_generator.rb +5 -5
  47. data/lib/graphql/analysis/ast/analyzer.rb +7 -0
  48. data/lib/graphql/analysis/ast/field_usage.rb +55 -1
  49. data/lib/graphql/analysis/ast/max_query_complexity.rb +0 -1
  50. data/lib/graphql/analysis/ast/query_complexity.rb +88 -140
  51. data/lib/graphql/analysis/ast/query_depth.rb +7 -3
  52. data/lib/graphql/analysis/ast/visitor.rb +50 -42
  53. data/lib/graphql/analysis/ast.rb +26 -23
  54. data/lib/graphql/analysis.rb +0 -7
  55. data/lib/graphql/backtrace/table.rb +4 -22
  56. data/lib/graphql/backtrace/trace.rb +93 -0
  57. data/lib/graphql/backtrace/tracer.rb +8 -6
  58. data/lib/graphql/backtrace.rb +3 -8
  59. data/lib/graphql/coercion_error.rb +1 -9
  60. data/lib/graphql/dataloader/async_dataloader.rb +85 -0
  61. data/lib/graphql/dataloader/null_dataloader.rb +3 -1
  62. data/lib/graphql/dataloader/request.rb +5 -0
  63. data/lib/graphql/dataloader/source.rb +120 -31
  64. data/lib/graphql/dataloader.rb +168 -142
  65. data/lib/graphql/date_encoding_error.rb +16 -0
  66. data/lib/graphql/dig.rb +1 -1
  67. data/lib/graphql/duration_encoding_error.rb +16 -0
  68. data/lib/graphql/execution/errors.rb +12 -81
  69. data/lib/graphql/execution/interpreter/arguments.rb +2 -2
  70. data/lib/graphql/execution/interpreter/arguments_cache.rb +36 -34
  71. data/lib/graphql/execution/interpreter/resolve.rb +32 -2
  72. data/lib/graphql/execution/interpreter/runtime/graphql_result.rb +170 -0
  73. data/lib/graphql/execution/interpreter/runtime.rb +414 -341
  74. data/lib/graphql/execution/interpreter.rb +122 -80
  75. data/lib/graphql/execution/lazy.rb +11 -21
  76. data/lib/graphql/execution/lookahead.rb +125 -54
  77. data/lib/graphql/execution/multiplex.rb +4 -172
  78. data/lib/graphql/execution.rb +11 -4
  79. data/lib/graphql/integer_encoding_error.rb +18 -2
  80. data/lib/graphql/introspection/directive_location_enum.rb +2 -2
  81. data/lib/graphql/introspection/directive_type.rb +5 -3
  82. data/lib/graphql/introspection/dynamic_fields.rb +3 -8
  83. data/lib/graphql/introspection/entry_points.rb +11 -18
  84. data/lib/graphql/introspection/enum_value_type.rb +2 -2
  85. data/lib/graphql/introspection/field_type.rb +3 -3
  86. data/lib/graphql/introspection/input_value_type.rb +10 -4
  87. data/lib/graphql/introspection/schema_type.rb +12 -5
  88. data/lib/graphql/introspection/type_type.rb +25 -12
  89. data/lib/graphql/introspection.rb +6 -2
  90. data/lib/graphql/language/block_string.rb +37 -25
  91. data/lib/graphql/language/definition_slice.rb +1 -1
  92. data/lib/graphql/language/document_from_schema_definition.rb +78 -65
  93. data/lib/graphql/language/lexer.rb +345 -1467
  94. data/lib/graphql/language/nodes.rb +145 -91
  95. data/lib/graphql/language/parser.rb +701 -1921
  96. data/lib/graphql/language/printer.rb +351 -155
  97. data/lib/graphql/language/sanitized_printer.rb +25 -27
  98. data/lib/graphql/language/static_visitor.rb +167 -0
  99. data/lib/graphql/language/token.rb +0 -4
  100. data/lib/graphql/language/visitor.rb +188 -141
  101. data/lib/graphql/language.rb +1 -0
  102. data/lib/graphql/load_application_object_failed_error.rb +5 -1
  103. data/lib/graphql/name_validator.rb +0 -4
  104. data/lib/graphql/pagination/active_record_relation_connection.rb +37 -8
  105. data/lib/graphql/pagination/array_connection.rb +8 -6
  106. data/lib/graphql/pagination/connection.rb +61 -7
  107. data/lib/graphql/pagination/connections.rb +22 -23
  108. data/lib/graphql/pagination/mongoid_relation_connection.rb +1 -2
  109. data/lib/graphql/pagination/relation_connection.rb +60 -28
  110. data/lib/graphql/query/context/scoped_context.rb +101 -0
  111. data/lib/graphql/query/context.rb +109 -189
  112. data/lib/graphql/query/input_validation_result.rb +10 -1
  113. data/lib/graphql/query/null_context.rb +14 -29
  114. data/lib/graphql/query/validation_pipeline.rb +15 -39
  115. data/lib/graphql/query/variable_validation_error.rb +2 -2
  116. data/lib/graphql/query/variables.rb +35 -17
  117. data/lib/graphql/query.rb +78 -65
  118. data/lib/graphql/railtie.rb +8 -109
  119. data/lib/graphql/rake_task/validate.rb +1 -1
  120. data/lib/graphql/rake_task.rb +30 -11
  121. data/lib/graphql/relay/range_add.rb +9 -16
  122. data/lib/graphql/relay.rb +0 -15
  123. data/lib/graphql/rubocop/graphql/base_cop.rb +36 -0
  124. data/lib/graphql/rubocop/graphql/default_null_true.rb +43 -0
  125. data/lib/graphql/rubocop/graphql/default_required_true.rb +43 -0
  126. data/lib/graphql/rubocop.rb +4 -0
  127. data/lib/graphql/schema/addition.rb +78 -45
  128. data/lib/graphql/schema/always_visible.rb +10 -0
  129. data/lib/graphql/schema/argument.rb +134 -80
  130. data/lib/graphql/schema/base_64_encoder.rb +3 -5
  131. data/lib/graphql/schema/build_from_definition.rb +60 -38
  132. data/lib/graphql/schema/directive/feature.rb +1 -1
  133. data/lib/graphql/schema/directive/flagged.rb +2 -2
  134. data/lib/graphql/schema/directive/include.rb +1 -1
  135. data/lib/graphql/schema/directive/one_of.rb +24 -0
  136. data/lib/graphql/schema/directive/skip.rb +1 -1
  137. data/lib/graphql/schema/directive/specified_by.rb +14 -0
  138. data/lib/graphql/schema/directive/transform.rb +2 -2
  139. data/lib/graphql/schema/directive.rb +33 -21
  140. data/lib/graphql/schema/enum.rb +93 -46
  141. data/lib/graphql/schema/enum_value.rb +4 -21
  142. data/lib/graphql/schema/field/connection_extension.rb +6 -16
  143. data/lib/graphql/schema/field/scope_extension.rb +8 -1
  144. data/lib/graphql/schema/field.rb +432 -337
  145. data/lib/graphql/schema/field_extension.rb +86 -2
  146. data/lib/graphql/schema/find_inherited_value.rb +3 -7
  147. data/lib/graphql/schema/finder.rb +5 -5
  148. data/lib/graphql/schema/has_single_input_argument.rb +156 -0
  149. data/lib/graphql/schema/input_object.rb +88 -90
  150. data/lib/graphql/schema/interface.rb +19 -59
  151. data/lib/graphql/schema/introspection_system.rb +6 -9
  152. data/lib/graphql/schema/late_bound_type.rb +8 -2
  153. data/lib/graphql/schema/list.rb +18 -7
  154. data/lib/graphql/schema/loader.rb +3 -3
  155. data/lib/graphql/schema/member/base_dsl_methods.rb +18 -19
  156. data/lib/graphql/schema/member/build_type.rb +16 -13
  157. data/lib/graphql/schema/member/has_arguments.rb +288 -84
  158. data/lib/graphql/schema/member/has_ast_node.rb +12 -0
  159. data/lib/graphql/schema/member/has_deprecation_reason.rb +3 -4
  160. data/lib/graphql/schema/member/has_directives.rb +81 -61
  161. data/lib/graphql/schema/member/has_fields.rb +149 -31
  162. data/lib/graphql/schema/member/has_interfaces.rb +143 -0
  163. data/lib/graphql/schema/member/has_validators.rb +32 -6
  164. data/lib/graphql/schema/member/relay_shortcuts.rb +47 -2
  165. data/lib/graphql/schema/member/scoped.rb +19 -0
  166. data/lib/graphql/schema/member/type_system_helpers.rb +17 -0
  167. data/lib/graphql/schema/member/validates_input.rb +6 -6
  168. data/lib/graphql/schema/member.rb +1 -6
  169. data/lib/graphql/schema/mutation.rb +0 -9
  170. data/lib/graphql/schema/non_null.rb +7 -7
  171. data/lib/graphql/schema/object.rb +30 -119
  172. data/lib/graphql/schema/printer.rb +23 -25
  173. data/lib/graphql/schema/relay_classic_mutation.rb +13 -90
  174. data/lib/graphql/schema/resolver/has_payload_type.rb +46 -11
  175. data/lib/graphql/schema/resolver.rb +101 -102
  176. data/lib/graphql/schema/scalar.rb +20 -21
  177. data/lib/graphql/schema/subscription.rb +45 -17
  178. data/lib/graphql/schema/timeout.rb +25 -29
  179. data/lib/graphql/schema/type_expression.rb +1 -1
  180. data/lib/graphql/schema/type_membership.rb +21 -4
  181. data/lib/graphql/schema/union.rb +15 -15
  182. data/lib/graphql/schema/unique_within_type.rb +1 -1
  183. data/lib/graphql/schema/validator/allow_blank_validator.rb +29 -0
  184. data/lib/graphql/schema/validator/allow_null_validator.rb +26 -0
  185. data/lib/graphql/schema/validator/exclusion_validator.rb +3 -1
  186. data/lib/graphql/schema/validator/format_validator.rb +4 -5
  187. data/lib/graphql/schema/validator/inclusion_validator.rb +3 -1
  188. data/lib/graphql/schema/validator/length_validator.rb +5 -3
  189. data/lib/graphql/schema/validator/numericality_validator.rb +13 -2
  190. data/lib/graphql/schema/validator/required_validator.rb +29 -15
  191. data/lib/graphql/schema/validator.rb +35 -27
  192. data/lib/graphql/schema/warden.rb +259 -132
  193. data/lib/graphql/schema/wrapper.rb +0 -5
  194. data/lib/graphql/schema.rb +658 -989
  195. data/lib/graphql/static_validation/all_rules.rb +3 -1
  196. data/lib/graphql/static_validation/base_visitor.rb +14 -28
  197. data/lib/graphql/static_validation/definition_dependencies.rb +7 -2
  198. data/lib/graphql/static_validation/error.rb +3 -1
  199. data/lib/graphql/static_validation/literal_validator.rb +21 -4
  200. data/lib/graphql/static_validation/rules/argument_literals_are_compatible.rb +1 -1
  201. data/lib/graphql/static_validation/rules/arguments_are_defined.rb +1 -1
  202. data/lib/graphql/static_validation/rules/directives_are_defined.rb +11 -5
  203. data/lib/graphql/static_validation/rules/directives_are_in_valid_locations.rb +13 -13
  204. data/lib/graphql/static_validation/rules/fields_have_appropriate_selections.rb +12 -4
  205. data/lib/graphql/static_validation/rules/fields_will_merge.rb +54 -28
  206. data/lib/graphql/static_validation/rules/fields_will_merge_error.rb +25 -4
  207. data/lib/graphql/static_validation/rules/fragments_are_finite.rb +2 -2
  208. data/lib/graphql/static_validation/rules/one_of_input_objects_are_valid.rb +66 -0
  209. data/lib/graphql/static_validation/rules/one_of_input_objects_are_valid_error.rb +29 -0
  210. data/lib/graphql/static_validation/rules/query_root_exists.rb +17 -0
  211. data/lib/graphql/static_validation/rules/query_root_exists_error.rb +26 -0
  212. data/lib/graphql/static_validation/rules/required_arguments_are_present.rb +5 -3
  213. data/lib/graphql/static_validation/rules/required_input_object_attributes_are_present.rb +4 -4
  214. data/lib/graphql/static_validation/rules/unique_directives_per_location.rb +13 -7
  215. data/lib/graphql/static_validation/rules/variable_default_values_are_correctly_typed.rb +1 -1
  216. data/lib/graphql/static_validation/rules/variable_usages_are_allowed.rb +13 -7
  217. data/lib/graphql/static_validation/validation_context.rb +16 -6
  218. data/lib/graphql/static_validation/validator.rb +11 -27
  219. data/lib/graphql/static_validation.rb +0 -3
  220. data/lib/graphql/string_encoding_error.rb +13 -3
  221. data/lib/graphql/subscriptions/action_cable_subscriptions.rb +46 -9
  222. data/lib/graphql/subscriptions/default_subscription_resolve_extension.rb +38 -1
  223. data/lib/graphql/subscriptions/event.rb +75 -37
  224. data/lib/graphql/subscriptions/serialize.rb +25 -3
  225. data/lib/graphql/subscriptions.rb +59 -47
  226. data/lib/graphql/testing/helpers.rb +129 -0
  227. data/lib/graphql/testing.rb +2 -0
  228. data/lib/graphql/tracing/active_support_notifications_trace.rb +16 -0
  229. data/lib/graphql/tracing/active_support_notifications_tracing.rb +6 -20
  230. data/lib/graphql/tracing/appoptics_trace.rb +251 -0
  231. data/lib/graphql/tracing/appoptics_tracing.rb +2 -2
  232. data/lib/graphql/tracing/appsignal_trace.rb +77 -0
  233. data/lib/graphql/tracing/appsignal_tracing.rb +15 -0
  234. data/lib/graphql/tracing/data_dog_trace.rb +183 -0
  235. data/lib/graphql/tracing/data_dog_tracing.rb +25 -15
  236. data/lib/graphql/{execution/instrumentation.rb → tracing/legacy_hooks_trace.rb} +10 -28
  237. data/lib/graphql/tracing/legacy_trace.rb +69 -0
  238. data/lib/graphql/tracing/new_relic_trace.rb +75 -0
  239. data/lib/graphql/tracing/notifications_trace.rb +45 -0
  240. data/lib/graphql/tracing/notifications_tracing.rb +59 -0
  241. data/lib/graphql/tracing/platform_trace.rb +118 -0
  242. data/lib/graphql/tracing/platform_tracing.rb +46 -49
  243. data/lib/graphql/tracing/{prometheus_tracing → prometheus_trace}/graphql_collector.rb +4 -2
  244. data/lib/graphql/tracing/prometheus_trace.rb +89 -0
  245. data/lib/graphql/tracing/prometheus_tracing.rb +3 -3
  246. data/lib/graphql/tracing/scout_trace.rb +72 -0
  247. data/lib/graphql/tracing/sentry_trace.rb +112 -0
  248. data/lib/graphql/tracing/statsd_trace.rb +56 -0
  249. data/lib/graphql/tracing/trace.rb +76 -0
  250. data/lib/graphql/tracing.rb +20 -41
  251. data/lib/graphql/type_kinds.rb +6 -3
  252. data/lib/graphql/types/big_int.rb +5 -1
  253. data/lib/graphql/types/int.rb +1 -1
  254. data/lib/graphql/types/iso_8601_date.rb +17 -6
  255. data/lib/graphql/types/iso_8601_date_time.rb +12 -1
  256. data/lib/graphql/types/iso_8601_duration.rb +77 -0
  257. data/lib/graphql/types/relay/base_connection.rb +16 -6
  258. data/lib/graphql/types/relay/connection_behaviors.rb +82 -32
  259. data/lib/graphql/types/relay/edge_behaviors.rb +36 -7
  260. data/lib/graphql/types/relay/has_node_field.rb +2 -2
  261. data/lib/graphql/types/relay/has_nodes_field.rb +2 -2
  262. data/lib/graphql/types/relay/node_behaviors.rb +12 -2
  263. data/lib/graphql/types/relay/page_info_behaviors.rb +7 -2
  264. data/lib/graphql/types/relay.rb +0 -3
  265. data/lib/graphql/types/string.rb +2 -2
  266. data/lib/graphql/types.rb +1 -0
  267. data/lib/graphql/unauthorized_error.rb +1 -1
  268. data/lib/graphql/version.rb +1 -1
  269. data/lib/graphql.rb +33 -95
  270. data/readme.md +13 -6
  271. metadata +102 -185
  272. data/lib/graphql/analysis/analyze_query.rb +0 -98
  273. data/lib/graphql/analysis/field_usage.rb +0 -45
  274. data/lib/graphql/analysis/max_query_complexity.rb +0 -26
  275. data/lib/graphql/analysis/max_query_depth.rb +0 -26
  276. data/lib/graphql/analysis/query_complexity.rb +0 -88
  277. data/lib/graphql/analysis/query_depth.rb +0 -43
  278. data/lib/graphql/analysis/reducer_state.rb +0 -48
  279. data/lib/graphql/argument.rb +0 -131
  280. data/lib/graphql/authorization.rb +0 -82
  281. data/lib/graphql/backtrace/legacy_tracer.rb +0 -56
  282. data/lib/graphql/backwards_compatibility.rb +0 -61
  283. data/lib/graphql/base_type.rb +0 -230
  284. data/lib/graphql/boolean_type.rb +0 -2
  285. data/lib/graphql/compatibility/execution_specification/counter_schema.rb +0 -53
  286. data/lib/graphql/compatibility/execution_specification/specification_schema.rb +0 -200
  287. data/lib/graphql/compatibility/execution_specification.rb +0 -436
  288. data/lib/graphql/compatibility/lazy_execution_specification/lazy_schema.rb +0 -111
  289. data/lib/graphql/compatibility/lazy_execution_specification.rb +0 -215
  290. data/lib/graphql/compatibility/query_parser_specification/parse_error_specification.rb +0 -87
  291. data/lib/graphql/compatibility/query_parser_specification/query_assertions.rb +0 -79
  292. data/lib/graphql/compatibility/query_parser_specification.rb +0 -266
  293. data/lib/graphql/compatibility/schema_parser_specification.rb +0 -682
  294. data/lib/graphql/compatibility.rb +0 -5
  295. data/lib/graphql/define/assign_argument.rb +0 -12
  296. data/lib/graphql/define/assign_connection.rb +0 -13
  297. data/lib/graphql/define/assign_enum_value.rb +0 -18
  298. data/lib/graphql/define/assign_global_id_field.rb +0 -11
  299. data/lib/graphql/define/assign_mutation_function.rb +0 -34
  300. data/lib/graphql/define/assign_object_field.rb +0 -42
  301. data/lib/graphql/define/defined_object_proxy.rb +0 -53
  302. data/lib/graphql/define/instance_definable.rb +0 -240
  303. data/lib/graphql/define/no_definition_error.rb +0 -7
  304. data/lib/graphql/define/non_null_with_bang.rb +0 -16
  305. data/lib/graphql/define/type_definer.rb +0 -31
  306. data/lib/graphql/define.rb +0 -31
  307. data/lib/graphql/deprecated_dsl.rb +0 -47
  308. data/lib/graphql/deprecation.rb +0 -13
  309. data/lib/graphql/directive/deprecated_directive.rb +0 -2
  310. data/lib/graphql/directive/include_directive.rb +0 -2
  311. data/lib/graphql/directive/skip_directive.rb +0 -2
  312. data/lib/graphql/directive.rb +0 -111
  313. data/lib/graphql/enum_type.rb +0 -129
  314. data/lib/graphql/execution/execute.rb +0 -333
  315. data/lib/graphql/execution/flatten.rb +0 -40
  316. data/lib/graphql/execution/lazy/resolve.rb +0 -91
  317. data/lib/graphql/execution/typecast.rb +0 -50
  318. data/lib/graphql/field/resolve.rb +0 -59
  319. data/lib/graphql/field.rb +0 -226
  320. data/lib/graphql/filter.rb +0 -53
  321. data/lib/graphql/float_type.rb +0 -2
  322. data/lib/graphql/function.rb +0 -128
  323. data/lib/graphql/id_type.rb +0 -2
  324. data/lib/graphql/input_object_type.rb +0 -138
  325. data/lib/graphql/int_type.rb +0 -2
  326. data/lib/graphql/interface_type.rb +0 -72
  327. data/lib/graphql/internal_representation/document.rb +0 -27
  328. data/lib/graphql/internal_representation/node.rb +0 -206
  329. data/lib/graphql/internal_representation/print.rb +0 -51
  330. data/lib/graphql/internal_representation/rewrite.rb +0 -184
  331. data/lib/graphql/internal_representation/scope.rb +0 -88
  332. data/lib/graphql/internal_representation/visit.rb +0 -36
  333. data/lib/graphql/internal_representation.rb +0 -7
  334. data/lib/graphql/language/lexer.rl +0 -262
  335. data/lib/graphql/language/parser.y +0 -543
  336. data/lib/graphql/list_type.rb +0 -80
  337. data/lib/graphql/non_null_type.rb +0 -71
  338. data/lib/graphql/object_type.rb +0 -130
  339. data/lib/graphql/query/arguments.rb +0 -189
  340. data/lib/graphql/query/arguments_cache.rb +0 -24
  341. data/lib/graphql/query/executor.rb +0 -52
  342. data/lib/graphql/query/literal_input.rb +0 -136
  343. data/lib/graphql/query/serial_execution/field_resolution.rb +0 -92
  344. data/lib/graphql/query/serial_execution/operation_resolution.rb +0 -19
  345. data/lib/graphql/query/serial_execution/selection_resolution.rb +0 -23
  346. data/lib/graphql/query/serial_execution/value_resolution.rb +0 -87
  347. data/lib/graphql/query/serial_execution.rb +0 -40
  348. data/lib/graphql/relay/array_connection.rb +0 -83
  349. data/lib/graphql/relay/base_connection.rb +0 -189
  350. data/lib/graphql/relay/connection_instrumentation.rb +0 -54
  351. data/lib/graphql/relay/connection_resolve.rb +0 -43
  352. data/lib/graphql/relay/connection_type.rb +0 -41
  353. data/lib/graphql/relay/edge.rb +0 -27
  354. data/lib/graphql/relay/edge_type.rb +0 -19
  355. data/lib/graphql/relay/edges_instrumentation.rb +0 -40
  356. data/lib/graphql/relay/global_id_resolve.rb +0 -18
  357. data/lib/graphql/relay/mongo_relation_connection.rb +0 -50
  358. data/lib/graphql/relay/mutation/instrumentation.rb +0 -23
  359. data/lib/graphql/relay/mutation/resolve.rb +0 -56
  360. data/lib/graphql/relay/mutation/result.rb +0 -38
  361. data/lib/graphql/relay/mutation.rb +0 -106
  362. data/lib/graphql/relay/node.rb +0 -39
  363. data/lib/graphql/relay/page_info.rb +0 -7
  364. data/lib/graphql/relay/relation_connection.rb +0 -188
  365. data/lib/graphql/relay/type_extensions.rb +0 -32
  366. data/lib/graphql/scalar_type.rb +0 -91
  367. data/lib/graphql/schema/base_64_bp.rb +0 -26
  368. data/lib/graphql/schema/catchall_middleware.rb +0 -35
  369. data/lib/graphql/schema/default_parse_error.rb +0 -10
  370. data/lib/graphql/schema/default_type_error.rb +0 -17
  371. data/lib/graphql/schema/member/accepts_definition.rb +0 -152
  372. data/lib/graphql/schema/member/cached_graphql_definition.rb +0 -31
  373. data/lib/graphql/schema/member/instrumentation.rb +0 -131
  374. data/lib/graphql/schema/middleware_chain.rb +0 -82
  375. data/lib/graphql/schema/possible_types.rb +0 -44
  376. data/lib/graphql/schema/rescue_middleware.rb +0 -60
  377. data/lib/graphql/schema/timeout_middleware.rb +0 -88
  378. data/lib/graphql/schema/traversal.rb +0 -228
  379. data/lib/graphql/schema/validation.rb +0 -313
  380. data/lib/graphql/static_validation/default_visitor.rb +0 -15
  381. data/lib/graphql/static_validation/no_validate_visitor.rb +0 -10
  382. data/lib/graphql/static_validation/type_stack.rb +0 -216
  383. data/lib/graphql/string_type.rb +0 -2
  384. data/lib/graphql/subscriptions/instrumentation.rb +0 -79
  385. data/lib/graphql/subscriptions/subscription_root.rb +0 -76
  386. data/lib/graphql/tracing/skylight_tracing.rb +0 -70
  387. data/lib/graphql/types/relay/default_relay.rb +0 -27
  388. data/lib/graphql/types/relay/node_field.rb +0 -25
  389. data/lib/graphql/types/relay/nodes_field.rb +0 -27
  390. data/lib/graphql/union_type.rb +0 -115
  391. data/lib/graphql/upgrader/member.rb +0 -937
  392. data/lib/graphql/upgrader/schema.rb +0 -38
@@ -1,216 +0,0 @@
1
- # frozen_string_literal: true
2
- module GraphQL
3
- module StaticValidation
4
- # - Ride along with `GraphQL::Language::Visitor`
5
- # - Track type info, expose it to validators
6
- class TypeStack
7
- # These are jumping-off points for infering types down the tree
8
- TYPE_INFERRENCE_ROOTS = [
9
- GraphQL::Language::Nodes::OperationDefinition,
10
- GraphQL::Language::Nodes::FragmentDefinition,
11
- ]
12
-
13
- # @return [GraphQL::Schema] the schema whose types are present in this document
14
- attr_reader :schema
15
-
16
- # When it enters an object (starting with query or mutation root), it's pushed on this stack.
17
- # When it exits, it's popped off.
18
- # @return [Array<GraphQL::ObjectType, GraphQL::Union, GraphQL::Interface>]
19
- attr_reader :object_types
20
-
21
- # When it enters a field, it's pushed on this stack (useful for nested fields, args).
22
- # When it exits, it's popped off.
23
- # @return [Array<GraphQL::Field>] fields which have been entered
24
- attr_reader :field_definitions
25
-
26
- # Directives are pushed on, then popped off while traversing the tree
27
- # @return [Array<GraphQL::Node::Directive>] directives which have been entered
28
- attr_reader :directive_definitions
29
-
30
- # @return [Array<GraphQL::Node::Argument>] arguments which have been entered
31
- attr_reader :argument_definitions
32
-
33
- # @return [Array<String>] fields which have been entered (by their AST name)
34
- attr_reader :path
35
-
36
- # @param schema [GraphQL::Schema] the schema whose types to use when climbing this document
37
- # @param visitor [GraphQL::Language::Visitor] a visitor to follow & watch the types
38
- def initialize(schema, visitor)
39
- @schema = schema
40
- @object_types = []
41
- @field_definitions = []
42
- @directive_definitions = []
43
- @argument_definitions = []
44
- @path = []
45
-
46
- PUSH_STRATEGIES.each do |node_class, strategy|
47
- visitor[node_class].enter << EnterWithStrategy.new(self, strategy)
48
- visitor[node_class].leave << LeaveWithStrategy.new(self, strategy)
49
- end
50
- end
51
-
52
- private
53
-
54
-
55
- module FragmentWithTypeStrategy
56
- def push(stack, node)
57
- object_type = if node.type
58
- stack.schema.get_type(node.type.name)
59
- else
60
- stack.object_types.last
61
- end
62
- if !object_type.nil?
63
- object_type = object_type.unwrap
64
- end
65
- stack.object_types.push(object_type)
66
- push_path_member(stack, node)
67
- end
68
-
69
- def pop(stack, node)
70
- stack.object_types.pop
71
- stack.path.pop
72
- end
73
- end
74
-
75
- module FragmentDefinitionStrategy
76
- extend FragmentWithTypeStrategy
77
- module_function
78
- def push_path_member(stack, node)
79
- stack.path.push("fragment #{node.name}")
80
- end
81
- end
82
-
83
- module InlineFragmentStrategy
84
- extend FragmentWithTypeStrategy
85
- module_function
86
- def push_path_member(stack, node)
87
- stack.path.push("...#{node.type ? " on #{node.type.to_query_string}" : ""}")
88
- end
89
- end
90
-
91
- module OperationDefinitionStrategy
92
- module_function
93
- def push(stack, node)
94
- # eg, QueryType, MutationType
95
- object_type = stack.schema.root_type_for_operation(node.operation_type)
96
- stack.object_types.push(object_type)
97
- stack.path.push("#{node.operation_type}#{node.name ? " #{node.name}" : ""}")
98
- end
99
-
100
- def pop(stack, node)
101
- stack.object_types.pop
102
- stack.path.pop
103
- end
104
- end
105
-
106
- module FieldStrategy
107
- module_function
108
- def push(stack, node)
109
- parent_type = stack.object_types.last
110
- parent_type = parent_type.unwrap
111
-
112
- field_definition = stack.schema.get_field(parent_type, node.name)
113
- stack.field_definitions.push(field_definition)
114
- if !field_definition.nil?
115
- next_object_type = field_definition.type
116
- stack.object_types.push(next_object_type)
117
- else
118
- stack.object_types.push(nil)
119
- end
120
- stack.path.push(node.alias || node.name)
121
- end
122
-
123
- def pop(stack, node)
124
- stack.field_definitions.pop
125
- stack.object_types.pop
126
- stack.path.pop
127
- end
128
- end
129
-
130
- module DirectiveStrategy
131
- module_function
132
- def push(stack, node)
133
- directive_defn = stack.schema.directives[node.name]
134
- stack.directive_definitions.push(directive_defn)
135
- end
136
-
137
- def pop(stack, node)
138
- stack.directive_definitions.pop
139
- end
140
- end
141
-
142
- module ArgumentStrategy
143
- module_function
144
- # Push `argument_defn` onto the stack.
145
- # It's possible that `argument_defn` will be nil.
146
- # Push it anyways so `pop` has something to pop.
147
- def push(stack, node)
148
- if stack.argument_definitions.last
149
- arg_type = stack.argument_definitions.last.type.unwrap
150
- if arg_type.kind.input_object?
151
- argument_defn = arg_type.arguments[node.name]
152
- else
153
- argument_defn = nil
154
- end
155
- elsif stack.directive_definitions.last
156
- argument_defn = stack.directive_definitions.last.arguments[node.name]
157
- elsif stack.field_definitions.last
158
- argument_defn = stack.field_definitions.last.arguments[node.name]
159
- else
160
- argument_defn = nil
161
- end
162
- stack.argument_definitions.push(argument_defn)
163
- stack.path.push(node.name)
164
- end
165
-
166
- def pop(stack, node)
167
- stack.argument_definitions.pop
168
- stack.path.pop
169
- end
170
- end
171
-
172
- module FragmentSpreadStrategy
173
- module_function
174
- def push(stack, node)
175
- stack.path.push("... #{node.name}")
176
- end
177
-
178
- def pop(stack, node)
179
- stack.path.pop
180
- end
181
- end
182
-
183
- PUSH_STRATEGIES = {
184
- GraphQL::Language::Nodes::FragmentDefinition => FragmentDefinitionStrategy,
185
- GraphQL::Language::Nodes::InlineFragment => InlineFragmentStrategy,
186
- GraphQL::Language::Nodes::FragmentSpread => FragmentSpreadStrategy,
187
- GraphQL::Language::Nodes::Argument => ArgumentStrategy,
188
- GraphQL::Language::Nodes::Field => FieldStrategy,
189
- GraphQL::Language::Nodes::Directive => DirectiveStrategy,
190
- GraphQL::Language::Nodes::OperationDefinition => OperationDefinitionStrategy,
191
- }
192
-
193
- class EnterWithStrategy
194
- def initialize(stack, strategy)
195
- @stack = stack
196
- @strategy = strategy
197
- end
198
-
199
- def call(node, parent)
200
- @strategy.push(@stack, node)
201
- end
202
- end
203
-
204
- class LeaveWithStrategy
205
- def initialize(stack, strategy)
206
- @stack = stack
207
- @strategy = strategy
208
- end
209
-
210
- def call(node, parent)
211
- @strategy.pop(@stack, node)
212
- end
213
- end
214
- end
215
- end
216
- end
@@ -1,2 +0,0 @@
1
- # frozen_string_literal: true
2
- GraphQL::STRING_TYPE = GraphQL::Types::String.graphql_definition
@@ -1,79 +0,0 @@
1
- # frozen_string_literal: true
2
- module GraphQL
3
- class Subscriptions
4
- # Wrap the root fields of the subscription type with special logic for:
5
- # - Registering the subscription during the first execution
6
- # - Evaluating the triggered portion(s) of the subscription during later execution
7
- class Instrumentation
8
- def initialize(schema:)
9
- @schema = schema
10
- end
11
-
12
- def instrument(type, field)
13
- if type == @schema.subscription.graphql_definition
14
- # This is a root field of `subscription`
15
- subscribing_resolve_proc = SubscriptionRegistrationResolve.new(field.resolve_proc)
16
- field.redefine(resolve: subscribing_resolve_proc)
17
- else
18
- field
19
- end
20
- end
21
-
22
- # If needed, prepare to gather events which this query subscribes to
23
- def before_query(query)
24
- if query.subscription? && !query.subscription_update?
25
- query.context.namespace(:subscriptions)[:events] = []
26
- end
27
- end
28
-
29
- # After checking the root fields, pass the gathered events to the store
30
- def after_query(query)
31
- events = query.context.namespace(:subscriptions)[:events]
32
- if events && events.any?
33
- @schema.subscriptions.write_subscription(query, events)
34
- end
35
- end
36
-
37
- private
38
-
39
- class SubscriptionRegistrationResolve
40
- def initialize(inner_proc)
41
- @inner_proc = inner_proc
42
- end
43
-
44
- # Wrap the proc with subscription registration logic
45
- def call(obj, args, ctx)
46
- result = nil
47
- if @inner_proc && !@inner_proc.is_a?(GraphQL::Field::Resolve::BuiltInResolve)
48
- result = @inner_proc.call(obj, args, ctx)
49
- end
50
-
51
- events = ctx.namespace(:subscriptions)[:events]
52
-
53
- if events
54
- # This is the first execution, so gather an Event
55
- # for the backend to register:
56
- events << Subscriptions::Event.new(
57
- name: ctx.field.name,
58
- arguments: args,
59
- context: ctx,
60
- )
61
- result
62
- elsif ctx.irep_node.subscription_topic == ctx.query.subscription_topic
63
- if !result.nil?
64
- result
65
- elsif obj.is_a?(GraphQL::Schema::Object)
66
- # The root object is _already_ the subscription update:
67
- obj.object
68
- else
69
- obj
70
- end
71
- else
72
- # This is a subscription update, but this event wasn't triggered.
73
- ctx.skip
74
- end
75
- end
76
- end
77
- end
78
- end
79
- end
@@ -1,76 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module GraphQL
4
- class Subscriptions
5
- # @api private
6
- # @deprecated This module is no longer needed.
7
- module SubscriptionRoot
8
- def self.extended(child_cls)
9
- GraphQL::Deprecation.warn "`extend GraphQL::Subscriptions::SubscriptionRoot` is no longer required; you can remove it from your Subscription type (#{child_cls})"
10
- child_cls.include(InstanceMethods)
11
- end
12
-
13
- # This is for maintaining backwards compatibility:
14
- # if a subscription field is created without a `subscription:` resolver class,
15
- # then implement the method with the previous default behavior.
16
- module InstanceMethods
17
- def skip_subscription_root(*)
18
- if context.query.subscription_update?
19
- object
20
- else
21
- context.skip
22
- end
23
- end
24
- end
25
-
26
- def field(*args, extensions: [], **rest, &block)
27
- extensions += [Extension]
28
- # Backwards-compat for schemas
29
- if !rest[:subscription]
30
- name = args.first
31
- alias_method(name, :skip_subscription_root)
32
- end
33
- super(*args, extensions: extensions, **rest, &block)
34
- end
35
-
36
- class Extension < GraphQL::Schema::FieldExtension
37
- def after_resolve(value:, context:, object:, arguments:, **rest)
38
- if value.is_a?(GraphQL::ExecutionError)
39
- value
40
- elsif (events = context.namespace(:subscriptions)[:events])
41
- # This is the first execution, so gather an Event
42
- # for the backend to register:
43
- event = Subscriptions::Event.new(
44
- name: field.name,
45
- arguments: arguments_without_field_extras(arguments: arguments),
46
- context: context,
47
- field: field,
48
- )
49
- events << event
50
- value
51
- elsif context.query.subscription_topic == Subscriptions::Event.serialize(
52
- field.name,
53
- arguments_without_field_extras(arguments: arguments),
54
- field,
55
- scope: (field.subscription_scope ? context[field.subscription_scope] : nil),
56
- )
57
- # This is a subscription update. The resolver returned `skip` if it should be skipped,
58
- # or else it returned an object to resolve the update.
59
- value
60
- else
61
- # This is a subscription update, but this event wasn't triggered.
62
- context.skip
63
- end
64
- end
65
-
66
- private
67
-
68
- def arguments_without_field_extras(arguments:)
69
- arguments.dup.tap do |event_args|
70
- field.extras.each { |k| event_args.delete(k) }
71
- end
72
- end
73
- end
74
- end
75
- end
76
- end
@@ -1,70 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module GraphQL
4
- module Tracing
5
- class SkylightTracing < PlatformTracing
6
- self.platform_keys = {
7
- "lex" => "graphql.language",
8
- "parse" => "graphql.language",
9
- "validate" => "graphql.prepare",
10
- "analyze_query" => "graphql.prepare",
11
- "analyze_multiplex" => "graphql.prepare",
12
- "execute_multiplex" => "graphql.execute",
13
- "execute_query" => "graphql.execute",
14
- "execute_query_lazy" => "graphql.execute",
15
- }
16
-
17
- # @param set_endpoint_name [Boolean] If true, the GraphQL operation name will be used as the endpoint name.
18
- # This is not advised if you run more than one query per HTTP request, for example, with `graphql-client` or multiplexing.
19
- # It can also be specified per-query with `context[:set_skylight_endpoint_name]`.
20
- def initialize(options = {})
21
- GraphQL::Deprecation.warn("GraphQL::Tracing::SkylightTracing is deprecated and will be removed in GraphQL-Ruby 2.0, please enable Skylight's GraphQL probe instead: https://www.skylight.io/support/getting-more-from-skylight#graphql.")
22
- @set_endpoint_name = options.fetch(:set_endpoint_name, false)
23
- super
24
- end
25
-
26
- def platform_trace(platform_key, key, data)
27
- if key == "execute_query"
28
- query = data[:query]
29
- title = query.selected_operation_name || "<anonymous>"
30
- category = platform_key
31
- set_endpoint_name_override = query.context[:set_skylight_endpoint_name]
32
- if set_endpoint_name_override == true || (set_endpoint_name_override.nil? && @set_endpoint_name)
33
- # Assign the endpoint so that queries will be grouped
34
- instrumenter = Skylight.instrumenter
35
- if instrumenter
36
- current_trace = instrumenter.current_trace
37
- if current_trace
38
- op_type = query.selected_operation ? query.selected_operation.operation_type : "query"
39
- endpoint = "GraphQL/#{op_type}.#{title}"
40
- current_trace.endpoint = endpoint
41
- end
42
- end
43
- end
44
- elsif key.start_with?("execute_field")
45
- title = platform_key
46
- category = key
47
- else
48
- title = key
49
- category = platform_key
50
- end
51
-
52
- Skylight.instrument(category: category, title: title) do
53
- yield
54
- end
55
- end
56
-
57
- def platform_field_key(type, field)
58
- "graphql.#{type.graphql_name}.#{field.graphql_name}"
59
- end
60
-
61
- def platform_authorized_key(type)
62
- "graphql.authorized.#{type.graphql_name}"
63
- end
64
-
65
- def platform_resolve_type_key(type)
66
- "graphql.resolve_type.#{type.graphql_name}"
67
- end
68
- end
69
- end
70
- end
@@ -1,27 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module GraphQL
4
- module Types
5
- module Relay
6
- module DefaultRelay
7
- def self.extended(child_class)
8
- child_class.default_relay(true)
9
- end
10
-
11
- def default_relay(new_value)
12
- @default_relay = new_value
13
- end
14
-
15
- def default_relay?
16
- !!@default_relay
17
- end
18
-
19
- def to_graphql
20
- type_defn = super
21
- type_defn.default_relay = default_relay?
22
- type_defn
23
- end
24
- end
25
- end
26
- end
27
- end
@@ -1,25 +0,0 @@
1
- # frozen_string_literal: true
2
- module GraphQL
3
- module Types
4
- module Relay
5
- # This can be used for implementing `Query.node(id: ...)`,
6
- # or use it for inspiration for your own field definition.
7
- #
8
- # @example Adding this field directly
9
- # add_field(GraphQL::Types::Relay::NodeField)
10
- #
11
- # @example Implementing a similar field in your own Query root
12
- #
13
- # field :node, GraphQL::Types::Relay::Node, null: true,
14
- # description: "Fetches an object given its ID" do
15
- # argument :id, ID, required: true
16
- # end
17
- #
18
- # def node(id:)
19
- # context.schema.object_from_id(id, context)
20
- # end
21
- #
22
- NodeField = GraphQL::Schema::Field.new(**HasNodeField.field_options, &HasNodeField.field_block)
23
- end
24
- end
25
- end
@@ -1,27 +0,0 @@
1
- # frozen_string_literal: true
2
- module GraphQL
3
- module Types
4
- module Relay
5
- # This can be used for implementing `Query.nodes(ids: ...)`,
6
- # or use it for inspiration for your own field definition.
7
- #
8
- # @example Adding this field directly
9
- # add_field(GraphQL::Types::Relay::NodesField)
10
- #
11
- # @example Implementing a similar field in your own Query root
12
- #
13
- # field :nodes, [GraphQL::Types::Relay::Node, null: true], null: false,
14
- # description: Fetches a list of objects given a list of IDs." do
15
- # argument :ids, [ID], required: true
16
- # end
17
- #
18
- # def nodes(ids:)
19
- # ids.map do |id|
20
- # context.schema.object_from_id(context, id)
21
- # end
22
- # end
23
- #
24
- NodesField = GraphQL::Schema::Field.new(**HasNodesField.field_options, &HasNodesField.field_block)
25
- end
26
- end
27
- end
@@ -1,115 +0,0 @@
1
- # frozen_string_literal: true
2
- module GraphQL
3
- # @api deprecated
4
- class UnionType < GraphQL::BaseType
5
- extend Define::InstanceDefinable::DeprecatedDefine
6
-
7
- # Rubocop was unhappy about the syntax when this was a proc literal
8
- class AcceptPossibleTypesDefinition
9
- def self.call(target, possible_types, options = {})
10
- target.add_possible_types(possible_types, **options)
11
- end
12
- end
13
-
14
- accepts_definitions :resolve_type, :type_membership_class,
15
- possible_types: AcceptPossibleTypesDefinition
16
- ensure_defined :possible_types, :resolve_type, :resolve_type_proc, :type_membership_class
17
-
18
- attr_accessor :resolve_type_proc
19
- attr_reader :type_memberships
20
- attr_accessor :type_membership_class
21
-
22
- def initialize
23
- super
24
- @type_membership_class = GraphQL::Schema::TypeMembership
25
- @type_memberships = []
26
- @cached_possible_types = nil
27
- @resolve_type_proc = nil
28
- end
29
-
30
- def initialize_copy(other)
31
- super
32
- @type_membership_class = other.type_membership_class
33
- @type_memberships = other.type_memberships.dup
34
- @cached_possible_types = nil
35
- end
36
-
37
- def kind
38
- GraphQL::TypeKinds::UNION
39
- end
40
-
41
- # @return [Boolean] True if `child_type_defn` is a member of this {UnionType}
42
- def include?(child_type_defn, ctx = GraphQL::Query::NullContext)
43
- possible_types(ctx).include?(child_type_defn)
44
- end
45
-
46
- # @return [Array<GraphQL::ObjectType>] Types which may be found in this union
47
- def possible_types(ctx = GraphQL::Query::NullContext)
48
- if ctx == GraphQL::Query::NullContext
49
- # Only cache the default case; if we cached for every `ctx`, it would be a memory leak
50
- # (The warden should cache calls to this method, so it's called only once per query,
51
- # unless user code calls it directly.)
52
- @cached_possible_types ||= possible_types_for_context(ctx)
53
- else
54
- possible_types_for_context(ctx)
55
- end
56
- end
57
-
58
- def possible_types=(types)
59
- # This is a re-assignment, so clear the previous values
60
- @type_memberships = []
61
- @cached_possible_types = nil
62
- add_possible_types(types, **{})
63
- end
64
-
65
- def add_possible_types(types, **options)
66
- @type_memberships ||= []
67
- Array(types).each { |t|
68
- @type_memberships << self.type_membership_class.new(self, t, **options)
69
- }
70
- nil
71
- end
72
-
73
- # Get a possible type of this {UnionType} by type name
74
- # @param type_name [String]
75
- # @param ctx [GraphQL::Query::Context] The context for the current query
76
- # @return [GraphQL::ObjectType, nil] The type named `type_name` if it exists and is a member of this {UnionType}, (else `nil`)
77
- def get_possible_type(type_name, ctx)
78
- type = ctx.query.get_type(type_name)
79
- type if type && ctx.query.warden.possible_types(self).include?(type)
80
- end
81
-
82
- # Check if a type is a possible type of this {UnionType}
83
- # @param type [String, GraphQL::BaseType] Name of the type or a type definition
84
- # @param ctx [GraphQL::Query::Context] The context for the current query
85
- # @return [Boolean] True if the `type` exists and is a member of this {UnionType}, (else `nil`)
86
- def possible_type?(type, ctx)
87
- type_name = type.is_a?(String) ? type : type.graphql_name
88
- !get_possible_type(type_name, ctx).nil?
89
- end
90
-
91
- def resolve_type(value, ctx)
92
- ctx.query.resolve_type(self, value)
93
- end
94
-
95
- def resolve_type=(new_resolve_type_proc)
96
- @resolve_type_proc = new_resolve_type_proc
97
- end
98
-
99
- def type_memberships=(type_memberships)
100
- @type_memberships = type_memberships
101
- end
102
-
103
- private
104
-
105
- def possible_types_for_context(ctx)
106
- visible_types = []
107
- @type_memberships.each do |type_membership|
108
- if type_membership.visible?(ctx)
109
- visible_types << BaseType.resolve_related_type(type_membership.object_type)
110
- end
111
- end
112
- visible_types
113
- end
114
- end
115
- end