graphql 1.10.2 → 2.0.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of graphql might be problematic. Click here for more details.

Files changed (402) hide show
  1. checksums.yaml +4 -4
  2. data/lib/generators/graphql/core.rb +21 -10
  3. data/lib/generators/graphql/enum_generator.rb +4 -10
  4. data/lib/generators/graphql/field_extractor.rb +31 -0
  5. data/lib/generators/graphql/input_generator.rb +50 -0
  6. data/lib/generators/graphql/install/mutation_root_generator.rb +34 -0
  7. data/lib/generators/graphql/{templates → install/templates}/base_mutation.erb +2 -0
  8. data/lib/generators/graphql/{templates → install/templates}/mutation_type.erb +2 -0
  9. data/lib/generators/graphql/install_generator.rb +45 -8
  10. data/lib/generators/graphql/interface_generator.rb +7 -7
  11. data/lib/generators/graphql/loader_generator.rb +1 -0
  12. data/lib/generators/graphql/mutation_create_generator.rb +22 -0
  13. data/lib/generators/graphql/mutation_delete_generator.rb +22 -0
  14. data/lib/generators/graphql/mutation_generator.rb +6 -30
  15. data/lib/generators/graphql/mutation_update_generator.rb +22 -0
  16. data/lib/generators/graphql/object_generator.rb +28 -12
  17. data/lib/generators/graphql/orm_mutations_base.rb +40 -0
  18. data/lib/generators/graphql/relay.rb +49 -0
  19. data/lib/generators/graphql/relay_generator.rb +21 -0
  20. data/lib/generators/graphql/scalar_generator.rb +4 -2
  21. data/lib/generators/graphql/templates/base_argument.erb +2 -0
  22. data/lib/generators/graphql/templates/base_connection.erb +8 -0
  23. data/lib/generators/graphql/templates/base_edge.erb +8 -0
  24. data/lib/generators/graphql/templates/base_enum.erb +2 -0
  25. data/lib/generators/graphql/templates/base_field.erb +2 -0
  26. data/lib/generators/graphql/templates/base_input_object.erb +2 -0
  27. data/lib/generators/graphql/templates/base_interface.erb +2 -0
  28. data/lib/generators/graphql/templates/base_object.erb +2 -0
  29. data/lib/generators/graphql/templates/base_scalar.erb +2 -0
  30. data/lib/generators/graphql/templates/base_union.erb +2 -0
  31. data/lib/generators/graphql/templates/enum.erb +7 -1
  32. data/lib/generators/graphql/templates/graphql_controller.erb +16 -12
  33. data/lib/generators/graphql/templates/input.erb +9 -0
  34. data/lib/generators/graphql/templates/interface.erb +6 -2
  35. data/lib/generators/graphql/templates/loader.erb +2 -0
  36. data/lib/generators/graphql/templates/mutation.erb +3 -1
  37. data/lib/generators/graphql/templates/mutation_create.erb +20 -0
  38. data/lib/generators/graphql/templates/mutation_delete.erb +20 -0
  39. data/lib/generators/graphql/templates/mutation_update.erb +21 -0
  40. data/lib/generators/graphql/templates/node_type.erb +9 -0
  41. data/lib/generators/graphql/templates/object.erb +7 -3
  42. data/lib/generators/graphql/templates/query_type.erb +3 -3
  43. data/lib/generators/graphql/templates/scalar.erb +5 -1
  44. data/lib/generators/graphql/templates/schema.erb +24 -33
  45. data/lib/generators/graphql/templates/union.erb +6 -2
  46. data/lib/generators/graphql/type_generator.rb +47 -10
  47. data/lib/generators/graphql/union_generator.rb +5 -5
  48. data/lib/graphql/analysis/ast/field_usage.rb +30 -1
  49. data/lib/graphql/analysis/ast/max_query_complexity.rb +0 -1
  50. data/lib/graphql/analysis/ast/query_complexity.rb +125 -117
  51. data/lib/graphql/analysis/ast/query_depth.rb +0 -1
  52. data/lib/graphql/analysis/ast/visitor.rb +52 -36
  53. data/lib/graphql/analysis/ast.rb +7 -8
  54. data/lib/graphql/analysis.rb +0 -7
  55. data/lib/graphql/backtrace/inspect_result.rb +0 -1
  56. data/lib/graphql/backtrace/table.rb +31 -18
  57. data/lib/graphql/backtrace/trace.rb +96 -0
  58. data/lib/graphql/backtrace/traced_error.rb +0 -1
  59. data/lib/graphql/backtrace/tracer.rb +39 -9
  60. data/lib/graphql/backtrace.rb +26 -18
  61. data/lib/graphql/dataloader/null_dataloader.rb +24 -0
  62. data/lib/graphql/dataloader/request.rb +19 -0
  63. data/lib/graphql/dataloader/request_all.rb +19 -0
  64. data/lib/graphql/dataloader/source.rb +164 -0
  65. data/lib/graphql/dataloader.rb +311 -0
  66. data/lib/graphql/date_encoding_error.rb +16 -0
  67. data/lib/graphql/deprecation.rb +9 -0
  68. data/lib/graphql/dig.rb +1 -1
  69. data/lib/graphql/execution/errors.rb +77 -44
  70. data/lib/graphql/execution/interpreter/argument_value.rb +28 -0
  71. data/lib/graphql/execution/interpreter/arguments.rb +88 -0
  72. data/lib/graphql/execution/interpreter/arguments_cache.rb +104 -0
  73. data/lib/graphql/execution/interpreter/handles_raw_value.rb +18 -0
  74. data/lib/graphql/execution/interpreter/resolve.rb +62 -24
  75. data/lib/graphql/execution/interpreter/runtime.rb +826 -464
  76. data/lib/graphql/execution/interpreter.rb +206 -68
  77. data/lib/graphql/execution/lazy.rb +11 -21
  78. data/lib/graphql/execution/lookahead.rb +55 -136
  79. data/lib/graphql/execution/multiplex.rb +6 -162
  80. data/lib/graphql/execution.rb +11 -4
  81. data/lib/graphql/filter.rb +7 -2
  82. data/lib/graphql/integer_decoding_error.rb +17 -0
  83. data/lib/graphql/integer_encoding_error.rb +18 -2
  84. data/lib/graphql/introspection/directive_location_enum.rb +2 -2
  85. data/lib/graphql/introspection/directive_type.rb +11 -5
  86. data/lib/graphql/introspection/dynamic_fields.rb +3 -8
  87. data/lib/graphql/introspection/entry_points.rb +4 -17
  88. data/lib/graphql/introspection/enum_value_type.rb +2 -2
  89. data/lib/graphql/introspection/field_type.rb +9 -5
  90. data/lib/graphql/introspection/input_value_type.rb +15 -3
  91. data/lib/graphql/introspection/introspection_query.rb +6 -92
  92. data/lib/graphql/introspection/schema_type.rb +11 -6
  93. data/lib/graphql/introspection/type_type.rb +31 -14
  94. data/lib/graphql/introspection.rb +100 -0
  95. data/lib/graphql/invalid_null_error.rb +18 -0
  96. data/lib/graphql/language/block_string.rb +20 -5
  97. data/lib/graphql/language/cache.rb +37 -0
  98. data/lib/graphql/language/document_from_schema_definition.rb +96 -44
  99. data/lib/graphql/language/lexer.rb +216 -1462
  100. data/lib/graphql/language/nodes.rb +126 -129
  101. data/lib/graphql/language/parser.rb +997 -933
  102. data/lib/graphql/language/parser.y +148 -118
  103. data/lib/graphql/language/printer.rb +48 -23
  104. data/lib/graphql/language/sanitized_printer.rb +222 -0
  105. data/lib/graphql/language/token.rb +0 -4
  106. data/lib/graphql/language/visitor.rb +192 -84
  107. data/lib/graphql/language.rb +2 -0
  108. data/lib/graphql/name_validator.rb +2 -7
  109. data/lib/graphql/pagination/active_record_relation_connection.rb +45 -3
  110. data/lib/graphql/pagination/array_connection.rb +6 -4
  111. data/lib/graphql/pagination/connection.rb +105 -23
  112. data/lib/graphql/pagination/connections.rb +62 -35
  113. data/lib/graphql/pagination/relation_connection.rb +88 -36
  114. data/lib/graphql/parse_error.rb +0 -1
  115. data/lib/graphql/query/context.rb +203 -198
  116. data/lib/graphql/query/fingerprint.rb +26 -0
  117. data/lib/graphql/query/input_validation_result.rb +33 -7
  118. data/lib/graphql/query/null_context.rb +22 -9
  119. data/lib/graphql/query/validation_pipeline.rb +16 -38
  120. data/lib/graphql/query/variable_validation_error.rb +3 -3
  121. data/lib/graphql/query/variables.rb +36 -12
  122. data/lib/graphql/query.rb +92 -44
  123. data/lib/graphql/railtie.rb +6 -102
  124. data/lib/graphql/rake_task/validate.rb +1 -1
  125. data/lib/graphql/rake_task.rb +41 -10
  126. data/lib/graphql/relay/range_add.rb +17 -10
  127. data/lib/graphql/relay.rb +0 -15
  128. data/lib/graphql/rubocop/graphql/base_cop.rb +36 -0
  129. data/lib/graphql/rubocop/graphql/default_null_true.rb +43 -0
  130. data/lib/graphql/rubocop/graphql/default_required_true.rb +43 -0
  131. data/lib/graphql/rubocop.rb +4 -0
  132. data/lib/graphql/schema/addition.rb +245 -0
  133. data/lib/graphql/schema/argument.rb +250 -46
  134. data/lib/graphql/schema/base_64_encoder.rb +2 -0
  135. data/lib/graphql/schema/build_from_definition/resolve_map.rb +3 -1
  136. data/lib/graphql/schema/build_from_definition.rb +243 -89
  137. data/lib/graphql/schema/directive/deprecated.rb +1 -1
  138. data/lib/graphql/schema/directive/feature.rb +1 -1
  139. data/lib/graphql/schema/directive/flagged.rb +57 -0
  140. data/lib/graphql/schema/directive/include.rb +1 -1
  141. data/lib/graphql/schema/directive/one_of.rb +12 -0
  142. data/lib/graphql/schema/directive/skip.rb +1 -1
  143. data/lib/graphql/schema/directive/transform.rb +14 -2
  144. data/lib/graphql/schema/directive.rb +108 -20
  145. data/lib/graphql/schema/enum.rb +105 -44
  146. data/lib/graphql/schema/enum_value.rb +15 -25
  147. data/lib/graphql/schema/field/connection_extension.rb +50 -30
  148. data/lib/graphql/schema/field/scope_extension.rb +1 -1
  149. data/lib/graphql/schema/field.rb +476 -331
  150. data/lib/graphql/schema/field_extension.rb +86 -2
  151. data/lib/graphql/schema/find_inherited_value.rb +6 -8
  152. data/lib/graphql/schema/finder.rb +5 -5
  153. data/lib/graphql/schema/input_object.rb +133 -121
  154. data/lib/graphql/schema/interface.rb +17 -45
  155. data/lib/graphql/schema/introspection_system.rb +3 -8
  156. data/lib/graphql/schema/late_bound_type.rb +8 -2
  157. data/lib/graphql/schema/list.rb +25 -8
  158. data/lib/graphql/schema/loader.rb +139 -103
  159. data/lib/graphql/schema/member/base_dsl_methods.rb +29 -35
  160. data/lib/graphql/schema/member/build_type.rb +19 -14
  161. data/lib/graphql/schema/member/has_arguments.rb +310 -26
  162. data/lib/graphql/schema/member/has_ast_node.rb +16 -1
  163. data/lib/graphql/schema/member/has_deprecation_reason.rb +24 -0
  164. data/lib/graphql/schema/member/has_directives.rb +118 -0
  165. data/lib/graphql/schema/member/has_fields.rb +164 -42
  166. data/lib/graphql/schema/member/has_interfaces.rb +129 -0
  167. data/lib/graphql/schema/member/has_unresolved_type_error.rb +15 -0
  168. data/lib/graphql/schema/member/has_validators.rb +57 -0
  169. data/lib/graphql/schema/member/relay_shortcuts.rb +47 -2
  170. data/lib/graphql/schema/member/type_system_helpers.rb +20 -3
  171. data/lib/graphql/schema/member/validates_input.rb +3 -3
  172. data/lib/graphql/schema/member.rb +6 -6
  173. data/lib/graphql/schema/mutation.rb +4 -9
  174. data/lib/graphql/schema/non_null.rb +12 -7
  175. data/lib/graphql/schema/object.rb +35 -69
  176. data/lib/graphql/schema/printer.rb +16 -34
  177. data/lib/graphql/schema/relay_classic_mutation.rb +90 -43
  178. data/lib/graphql/schema/resolver/has_payload_type.rb +51 -11
  179. data/lib/graphql/schema/resolver.rb +144 -79
  180. data/lib/graphql/schema/scalar.rb +27 -18
  181. data/lib/graphql/schema/subscription.rb +55 -26
  182. data/lib/graphql/schema/timeout.rb +45 -35
  183. data/lib/graphql/schema/type_expression.rb +1 -1
  184. data/lib/graphql/schema/type_membership.rb +21 -4
  185. data/lib/graphql/schema/union.rb +48 -13
  186. data/lib/graphql/schema/unique_within_type.rb +1 -2
  187. data/lib/graphql/schema/validator/allow_blank_validator.rb +29 -0
  188. data/lib/graphql/schema/validator/allow_null_validator.rb +26 -0
  189. data/lib/graphql/schema/validator/exclusion_validator.rb +33 -0
  190. data/lib/graphql/schema/validator/format_validator.rb +48 -0
  191. data/lib/graphql/schema/validator/inclusion_validator.rb +35 -0
  192. data/lib/graphql/schema/validator/length_validator.rb +59 -0
  193. data/lib/graphql/schema/validator/numericality_validator.rb +82 -0
  194. data/lib/graphql/schema/validator/required_validator.rb +82 -0
  195. data/lib/graphql/schema/validator.rb +171 -0
  196. data/lib/graphql/schema/warden.rb +185 -32
  197. data/lib/graphql/schema/wrapper.rb +0 -5
  198. data/lib/graphql/schema.rb +471 -1116
  199. data/lib/graphql/static_validation/all_rules.rb +3 -0
  200. data/lib/graphql/static_validation/base_visitor.rb +13 -27
  201. data/lib/graphql/static_validation/definition_dependencies.rb +7 -2
  202. data/lib/graphql/static_validation/error.rb +3 -1
  203. data/lib/graphql/static_validation/literal_validator.rb +69 -26
  204. data/lib/graphql/static_validation/rules/argument_literals_are_compatible.rb +44 -87
  205. data/lib/graphql/static_validation/rules/argument_literals_are_compatible_error.rb +22 -6
  206. data/lib/graphql/static_validation/rules/arguments_are_defined.rb +28 -22
  207. data/lib/graphql/static_validation/rules/arguments_are_defined_error.rb +4 -2
  208. data/lib/graphql/static_validation/rules/directives_are_defined.rb +12 -6
  209. data/lib/graphql/static_validation/rules/directives_are_in_valid_locations.rb +13 -13
  210. data/lib/graphql/static_validation/rules/fields_have_appropriate_selections.rb +12 -4
  211. data/lib/graphql/static_validation/rules/fields_will_merge.rb +92 -49
  212. data/lib/graphql/static_validation/rules/fields_will_merge_error.rb +25 -4
  213. data/lib/graphql/static_validation/rules/fragments_are_finite.rb +2 -2
  214. data/lib/graphql/static_validation/rules/input_object_names_are_unique.rb +30 -0
  215. data/lib/graphql/static_validation/rules/input_object_names_are_unique_error.rb +30 -0
  216. data/lib/graphql/static_validation/rules/one_of_input_objects_are_valid.rb +66 -0
  217. data/lib/graphql/static_validation/rules/one_of_input_objects_are_valid_error.rb +29 -0
  218. data/lib/graphql/static_validation/rules/query_root_exists.rb +17 -0
  219. data/lib/graphql/static_validation/rules/query_root_exists_error.rb +26 -0
  220. data/lib/graphql/static_validation/rules/required_arguments_are_present.rb +4 -2
  221. data/lib/graphql/static_validation/rules/required_input_object_attributes_are_present.rb +6 -7
  222. data/lib/graphql/static_validation/rules/unique_directives_per_location.rb +13 -7
  223. data/lib/graphql/static_validation/rules/variable_default_values_are_correctly_typed.rb +9 -10
  224. data/lib/graphql/static_validation/rules/variable_usages_are_allowed.rb +14 -8
  225. data/lib/graphql/static_validation/rules/variables_are_used_and_defined.rb +4 -2
  226. data/lib/graphql/static_validation/validation_context.rb +13 -3
  227. data/lib/graphql/static_validation/validation_timeout_error.rb +25 -0
  228. data/lib/graphql/static_validation/validator.rb +32 -20
  229. data/lib/graphql/static_validation.rb +1 -2
  230. data/lib/graphql/string_encoding_error.rb +13 -3
  231. data/lib/graphql/subscriptions/action_cable_subscriptions.rb +126 -19
  232. data/lib/graphql/subscriptions/broadcast_analyzer.rb +81 -0
  233. data/lib/graphql/subscriptions/default_subscription_resolve_extension.rb +58 -0
  234. data/lib/graphql/subscriptions/event.rb +81 -35
  235. data/lib/graphql/subscriptions/instrumentation.rb +0 -52
  236. data/lib/graphql/subscriptions/serialize.rb +53 -6
  237. data/lib/graphql/subscriptions.rb +113 -58
  238. data/lib/graphql/tracing/active_support_notifications_trace.rb +16 -0
  239. data/lib/graphql/tracing/active_support_notifications_tracing.rb +8 -21
  240. data/lib/graphql/tracing/appoptics_trace.rb +231 -0
  241. data/lib/graphql/tracing/appoptics_tracing.rb +173 -0
  242. data/lib/graphql/tracing/appsignal_trace.rb +77 -0
  243. data/lib/graphql/tracing/appsignal_tracing.rb +15 -0
  244. data/lib/graphql/tracing/data_dog_trace.rb +148 -0
  245. data/lib/graphql/tracing/data_dog_tracing.rb +26 -2
  246. data/lib/graphql/tracing/legacy_trace.rb +65 -0
  247. data/lib/graphql/tracing/new_relic_trace.rb +75 -0
  248. data/lib/graphql/tracing/new_relic_tracing.rb +1 -12
  249. data/lib/graphql/tracing/notifications_trace.rb +42 -0
  250. data/lib/graphql/tracing/notifications_tracing.rb +59 -0
  251. data/lib/graphql/tracing/platform_trace.rb +109 -0
  252. data/lib/graphql/tracing/platform_tracing.rb +64 -43
  253. data/lib/graphql/tracing/prometheus_trace.rb +89 -0
  254. data/lib/graphql/tracing/prometheus_tracing/graphql_collector.rb +5 -2
  255. data/lib/graphql/tracing/prometheus_tracing.rb +3 -3
  256. data/lib/graphql/tracing/scout_trace.rb +72 -0
  257. data/lib/graphql/tracing/scout_tracing.rb +11 -0
  258. data/lib/graphql/tracing/statsd_trace.rb +56 -0
  259. data/lib/graphql/tracing/statsd_tracing.rb +42 -0
  260. data/lib/graphql/tracing/trace.rb +75 -0
  261. data/lib/graphql/tracing.rb +23 -71
  262. data/lib/graphql/type_kinds.rb +6 -3
  263. data/lib/graphql/types/big_int.rb +5 -1
  264. data/lib/graphql/types/int.rb +10 -3
  265. data/lib/graphql/types/iso_8601_date.rb +20 -9
  266. data/lib/graphql/types/iso_8601_date_time.rb +36 -10
  267. data/lib/graphql/types/relay/base_connection.rb +18 -92
  268. data/lib/graphql/types/relay/base_edge.rb +2 -34
  269. data/lib/graphql/types/relay/connection_behaviors.rb +176 -0
  270. data/lib/graphql/types/relay/edge_behaviors.rb +75 -0
  271. data/lib/graphql/types/relay/has_node_field.rb +41 -0
  272. data/lib/graphql/types/relay/has_nodes_field.rb +41 -0
  273. data/lib/graphql/types/relay/node.rb +2 -4
  274. data/lib/graphql/types/relay/node_behaviors.rb +25 -0
  275. data/lib/graphql/types/relay/page_info.rb +2 -14
  276. data/lib/graphql/types/relay/page_info_behaviors.rb +30 -0
  277. data/lib/graphql/types/relay.rb +10 -5
  278. data/lib/graphql/types/string.rb +8 -2
  279. data/lib/graphql/unauthorized_error.rb +2 -2
  280. data/lib/graphql/version.rb +1 -1
  281. data/lib/graphql.rb +54 -65
  282. data/readme.md +3 -6
  283. metadata +116 -236
  284. data/lib/graphql/analysis/analyze_query.rb +0 -91
  285. data/lib/graphql/analysis/field_usage.rb +0 -45
  286. data/lib/graphql/analysis/max_query_complexity.rb +0 -26
  287. data/lib/graphql/analysis/max_query_depth.rb +0 -26
  288. data/lib/graphql/analysis/query_complexity.rb +0 -88
  289. data/lib/graphql/analysis/query_depth.rb +0 -43
  290. data/lib/graphql/analysis/reducer_state.rb +0 -48
  291. data/lib/graphql/argument.rb +0 -131
  292. data/lib/graphql/authorization.rb +0 -82
  293. data/lib/graphql/backwards_compatibility.rb +0 -60
  294. data/lib/graphql/base_type.rb +0 -230
  295. data/lib/graphql/boolean_type.rb +0 -2
  296. data/lib/graphql/compatibility/execution_specification/counter_schema.rb +0 -53
  297. data/lib/graphql/compatibility/execution_specification/specification_schema.rb +0 -200
  298. data/lib/graphql/compatibility/execution_specification.rb +0 -435
  299. data/lib/graphql/compatibility/lazy_execution_specification/lazy_schema.rb +0 -111
  300. data/lib/graphql/compatibility/lazy_execution_specification.rb +0 -213
  301. data/lib/graphql/compatibility/query_parser_specification/parse_error_specification.rb +0 -87
  302. data/lib/graphql/compatibility/query_parser_specification/query_assertions.rb +0 -79
  303. data/lib/graphql/compatibility/query_parser_specification.rb +0 -264
  304. data/lib/graphql/compatibility/schema_parser_specification.rb +0 -680
  305. data/lib/graphql/compatibility.rb +0 -5
  306. data/lib/graphql/define/assign_argument.rb +0 -12
  307. data/lib/graphql/define/assign_connection.rb +0 -13
  308. data/lib/graphql/define/assign_enum_value.rb +0 -18
  309. data/lib/graphql/define/assign_global_id_field.rb +0 -11
  310. data/lib/graphql/define/assign_mutation_function.rb +0 -34
  311. data/lib/graphql/define/assign_object_field.rb +0 -42
  312. data/lib/graphql/define/defined_object_proxy.rb +0 -53
  313. data/lib/graphql/define/instance_definable.rb +0 -210
  314. data/lib/graphql/define/no_definition_error.rb +0 -7
  315. data/lib/graphql/define/non_null_with_bang.rb +0 -16
  316. data/lib/graphql/define/type_definer.rb +0 -31
  317. data/lib/graphql/define.rb +0 -31
  318. data/lib/graphql/deprecated_dsl.rb +0 -42
  319. data/lib/graphql/directive/deprecated_directive.rb +0 -2
  320. data/lib/graphql/directive/include_directive.rb +0 -2
  321. data/lib/graphql/directive/skip_directive.rb +0 -2
  322. data/lib/graphql/directive.rb +0 -107
  323. data/lib/graphql/enum_type.rb +0 -127
  324. data/lib/graphql/execution/execute.rb +0 -326
  325. data/lib/graphql/execution/flatten.rb +0 -40
  326. data/lib/graphql/execution/instrumentation.rb +0 -92
  327. data/lib/graphql/execution/interpreter/hash_response.rb +0 -46
  328. data/lib/graphql/execution/lazy/resolve.rb +0 -91
  329. data/lib/graphql/execution/typecast.rb +0 -50
  330. data/lib/graphql/field/resolve.rb +0 -59
  331. data/lib/graphql/field.rb +0 -222
  332. data/lib/graphql/float_type.rb +0 -2
  333. data/lib/graphql/function.rb +0 -124
  334. data/lib/graphql/id_type.rb +0 -2
  335. data/lib/graphql/input_object_type.rb +0 -132
  336. data/lib/graphql/int_type.rb +0 -2
  337. data/lib/graphql/interface_type.rb +0 -65
  338. data/lib/graphql/internal_representation/document.rb +0 -27
  339. data/lib/graphql/internal_representation/node.rb +0 -206
  340. data/lib/graphql/internal_representation/print.rb +0 -51
  341. data/lib/graphql/internal_representation/rewrite.rb +0 -184
  342. data/lib/graphql/internal_representation/scope.rb +0 -88
  343. data/lib/graphql/internal_representation/visit.rb +0 -36
  344. data/lib/graphql/internal_representation.rb +0 -7
  345. data/lib/graphql/language/lexer.rl +0 -258
  346. data/lib/graphql/list_type.rb +0 -80
  347. data/lib/graphql/literal_validation_error.rb +0 -6
  348. data/lib/graphql/non_null_type.rb +0 -71
  349. data/lib/graphql/object_type.rb +0 -121
  350. data/lib/graphql/query/arguments.rb +0 -188
  351. data/lib/graphql/query/arguments_cache.rb +0 -25
  352. data/lib/graphql/query/executor.rb +0 -53
  353. data/lib/graphql/query/literal_input.rb +0 -136
  354. data/lib/graphql/query/serial_execution/field_resolution.rb +0 -92
  355. data/lib/graphql/query/serial_execution/operation_resolution.rb +0 -19
  356. data/lib/graphql/query/serial_execution/selection_resolution.rb +0 -23
  357. data/lib/graphql/query/serial_execution/value_resolution.rb +0 -87
  358. data/lib/graphql/query/serial_execution.rb +0 -39
  359. data/lib/graphql/relay/array_connection.rb +0 -85
  360. data/lib/graphql/relay/base_connection.rb +0 -176
  361. data/lib/graphql/relay/connection_instrumentation.rb +0 -54
  362. data/lib/graphql/relay/connection_resolve.rb +0 -43
  363. data/lib/graphql/relay/connection_type.rb +0 -41
  364. data/lib/graphql/relay/edge.rb +0 -27
  365. data/lib/graphql/relay/edge_type.rb +0 -19
  366. data/lib/graphql/relay/edges_instrumentation.rb +0 -40
  367. data/lib/graphql/relay/global_id_resolve.rb +0 -18
  368. data/lib/graphql/relay/mongo_relation_connection.rb +0 -50
  369. data/lib/graphql/relay/mutation/instrumentation.rb +0 -23
  370. data/lib/graphql/relay/mutation/resolve.rb +0 -56
  371. data/lib/graphql/relay/mutation/result.rb +0 -38
  372. data/lib/graphql/relay/mutation.rb +0 -105
  373. data/lib/graphql/relay/node.rb +0 -36
  374. data/lib/graphql/relay/page_info.rb +0 -7
  375. data/lib/graphql/relay/relation_connection.rb +0 -190
  376. data/lib/graphql/relay/type_extensions.rb +0 -30
  377. data/lib/graphql/scalar_type.rb +0 -76
  378. data/lib/graphql/schema/catchall_middleware.rb +0 -35
  379. data/lib/graphql/schema/default_parse_error.rb +0 -10
  380. data/lib/graphql/schema/default_type_error.rb +0 -15
  381. data/lib/graphql/schema/member/accepts_definition.rb +0 -152
  382. data/lib/graphql/schema/member/cached_graphql_definition.rb +0 -31
  383. data/lib/graphql/schema/member/instrumentation.rb +0 -132
  384. data/lib/graphql/schema/middleware_chain.rb +0 -82
  385. data/lib/graphql/schema/possible_types.rb +0 -39
  386. data/lib/graphql/schema/rescue_middleware.rb +0 -60
  387. data/lib/graphql/schema/timeout_middleware.rb +0 -86
  388. data/lib/graphql/schema/traversal.rb +0 -228
  389. data/lib/graphql/schema/validation.rb +0 -303
  390. data/lib/graphql/static_validation/default_visitor.rb +0 -15
  391. data/lib/graphql/static_validation/no_validate_visitor.rb +0 -10
  392. data/lib/graphql/string_type.rb +0 -2
  393. data/lib/graphql/subscriptions/subscription_root.rb +0 -65
  394. data/lib/graphql/tracing/skylight_tracing.rb +0 -70
  395. data/lib/graphql/types/relay/base_field.rb +0 -22
  396. data/lib/graphql/types/relay/base_interface.rb +0 -29
  397. data/lib/graphql/types/relay/base_object.rb +0 -26
  398. data/lib/graphql/types/relay/node_field.rb +0 -43
  399. data/lib/graphql/types/relay/nodes_field.rb +0 -45
  400. data/lib/graphql/union_type.rb +0 -113
  401. data/lib/graphql/upgrader/member.rb +0 -936
  402. data/lib/graphql/upgrader/schema.rb +0 -37
@@ -1,105 +0,0 @@
1
- # frozen_string_literal: true
2
- require "graphql/relay/mutation/instrumentation"
3
- require "graphql/relay/mutation/resolve"
4
- require "graphql/relay/mutation/result"
5
-
6
- module GraphQL
7
- module Relay
8
- # @api deprecated
9
- class Mutation
10
- include GraphQL::Define::InstanceDefinable
11
- accepts_definitions(
12
- :name, :description, :resolve,
13
- :return_type,
14
- :return_interfaces,
15
- input_field: GraphQL::Define::AssignArgument,
16
- return_field: GraphQL::Define::AssignObjectField,
17
- function: GraphQL::Define::AssignMutationFunction,
18
- )
19
- attr_accessor :name, :description, :fields, :arguments
20
- attr_writer :return_type, :return_interfaces
21
-
22
- ensure_defined(
23
- :input_fields, :return_fields, :name, :description,
24
- :fields, :arguments, :return_type,
25
- :return_interfaces, :resolve=,
26
- :field, :result_class, :input_type
27
- )
28
- # For backwards compat, but do we need this separate API?
29
- alias :return_fields :fields
30
- alias :input_fields :arguments
31
-
32
- def initialize
33
- @fields = {}
34
- @arguments = {}
35
- @has_generated_return_type = false
36
- end
37
-
38
- def has_generated_return_type?
39
- # Trigger the generation of the return type, if it is dynamically generated:
40
- return_type
41
- @has_generated_return_type
42
- end
43
-
44
- def resolve=(new_resolve_proc)
45
- @resolve_proc = new_resolve_proc
46
- end
47
-
48
- def field
49
- @field ||= begin
50
- relay_mutation = self
51
- field_resolve_proc = @resolve_proc
52
- GraphQL::Field.define do
53
- type(relay_mutation.return_type)
54
- description(relay_mutation.description)
55
- argument :input, !relay_mutation.input_type
56
- resolve(field_resolve_proc)
57
- mutation(relay_mutation)
58
- end
59
- end
60
- end
61
-
62
- def return_interfaces
63
- @return_interfaces ||= []
64
- end
65
-
66
- def return_type
67
- @return_type ||= begin
68
- @has_generated_return_type = true
69
- relay_mutation = self
70
- GraphQL::ObjectType.define do
71
- name("#{relay_mutation.name}Payload")
72
- description("Autogenerated return type of #{relay_mutation.name}")
73
- field :clientMutationId, types.String, "A unique identifier for the client performing the mutation.", property: :client_mutation_id
74
- interfaces relay_mutation.return_interfaces
75
- relay_mutation.return_fields.each do |name, field_obj|
76
- field name, field: field_obj
77
- end
78
- mutation(relay_mutation)
79
- end
80
- end
81
- end
82
-
83
- def input_type
84
- @input_type ||= begin
85
- relay_mutation = self
86
- input_object_type = GraphQL::InputObjectType.define do
87
- name("#{relay_mutation.name}Input")
88
- description("Autogenerated input type of #{relay_mutation.name}")
89
- input_field :clientMutationId, types.String, "A unique identifier for the client performing the mutation."
90
- mutation(relay_mutation)
91
- end
92
- input_fields.each do |name, arg|
93
- input_object_type.arguments[name] = arg
94
- end
95
-
96
- input_object_type
97
- end
98
- end
99
-
100
- def result_class
101
- @result_class ||= Result.define_subclass(self)
102
- end
103
- end
104
- end
105
- end
@@ -1,36 +0,0 @@
1
- # frozen_string_literal: true
2
- module GraphQL
3
- module Relay
4
- # Helpers for working with Relay-specific Node objects.
5
- module Node
6
- # @return [GraphQL::Field] a field for finding objects by their global ID.
7
- def self.field(**kwargs, &block)
8
- # We have to define it fresh each time because
9
- # its name will be modified and its description
10
- # _may_ be modified.
11
- field = GraphQL::Types::Relay::NodeField.graphql_definition
12
-
13
- if kwargs.any? || block
14
- field = field.redefine(**kwargs, &block)
15
- end
16
-
17
- field
18
- end
19
-
20
- def self.plural_field(**kwargs, &block)
21
- field = GraphQL::Types::Relay::NodesField.graphql_definition
22
-
23
- if kwargs.any? || block
24
- field = field.redefine(**kwargs, &block)
25
- end
26
-
27
- field
28
- end
29
-
30
- # @return [GraphQL::InterfaceType] The interface which all Relay types must implement
31
- def self.interface
32
- @interface ||= GraphQL::Types::Relay::Node.graphql_definition
33
- end
34
- end
35
- end
36
- end
@@ -1,7 +0,0 @@
1
- # frozen_string_literal: true
2
- module GraphQL
3
- module Relay
4
- # Wrap a Connection and expose its page info
5
- PageInfo = GraphQL::Types::Relay::PageInfo.graphql_definition
6
- end
7
- end
@@ -1,190 +0,0 @@
1
- # frozen_string_literal: true
2
- module GraphQL
3
- module Relay
4
- # A connection implementation to expose SQL collection objects.
5
- # It works for:
6
- # - `ActiveRecord::Relation`
7
- # - `Sequel::Dataset`
8
- class RelationConnection < BaseConnection
9
- def cursor_from_node(item)
10
- item_index = paged_nodes.index(item)
11
- if item_index.nil?
12
- raise("Can't generate cursor, item not found in connection: #{item}")
13
- else
14
- offset = item_index + 1 + ((paged_nodes_offset || 0) - (relation_offset(sliced_nodes) || 0))
15
-
16
- if after
17
- offset += offset_from_cursor(after)
18
- elsif before
19
- offset += offset_from_cursor(before) - 1 - sliced_nodes_count
20
- end
21
-
22
- encode(offset.to_s)
23
- end
24
- end
25
-
26
- def has_next_page
27
- if first
28
- if defined?(ActiveRecord::Relation) && nodes.is_a?(ActiveRecord::Relation)
29
- initial_offset = after ? offset_from_cursor(after) : 0
30
- return paged_nodes.length >= first && nodes.offset(first + initial_offset).exists?
31
- end
32
- return paged_nodes.length >= first && sliced_nodes_count > first
33
- end
34
- if GraphQL::Relay::ConnectionType.bidirectional_pagination && last
35
- return sliced_nodes_count >= last
36
- end
37
- false
38
- end
39
-
40
- def has_previous_page
41
- if last
42
- paged_nodes.length >= last && sliced_nodes_count > last
43
- elsif GraphQL::Relay::ConnectionType.bidirectional_pagination && after
44
- # We've already paginated through the collection a bit,
45
- # there are nodes behind us
46
- offset_from_cursor(after) > 0
47
- else
48
- false
49
- end
50
- end
51
-
52
- def first
53
- return @first if defined? @first
54
-
55
- @first = get_limited_arg(:first)
56
- @first = max_page_size if @first && max_page_size && @first > max_page_size
57
- @first
58
- end
59
-
60
- def last
61
- return @last if defined? @last
62
-
63
- @last = get_limited_arg(:last)
64
- @last = max_page_size if @last && max_page_size && @last > max_page_size
65
- @last
66
- end
67
-
68
- private
69
-
70
- # apply first / last limit results
71
- # @return [Array]
72
- def paged_nodes
73
- return @paged_nodes if defined? @paged_nodes
74
-
75
- items = sliced_nodes
76
-
77
- if first
78
- if relation_limit(items).nil? || relation_limit(items) > first
79
- items = items.limit(first)
80
- end
81
- end
82
-
83
- if last
84
- if relation_limit(items)
85
- if last <= relation_limit(items)
86
- offset = (relation_offset(items) || 0) + (relation_limit(items) - last)
87
- items = items.offset(offset).limit(last)
88
- end
89
- else
90
- slice_count = relation_count(items)
91
- offset = (relation_offset(items) || 0) + slice_count - [last, slice_count].min
92
- items = items.offset(offset).limit(last)
93
- end
94
- end
95
-
96
- if max_page_size && !first && !last
97
- if relation_limit(items).nil? || relation_limit(items) > max_page_size
98
- items = items.limit(max_page_size)
99
- end
100
- end
101
-
102
- # Store this here so we can convert the relation to an Array
103
- # (this avoids an extra DB call on Sequel)
104
- @paged_nodes_offset = relation_offset(items)
105
- @paged_nodes = items.to_a
106
- end
107
-
108
- def paged_nodes_offset
109
- paged_nodes && @paged_nodes_offset
110
- end
111
-
112
- def relation_offset(relation)
113
- if relation.respond_to?(:offset_value)
114
- relation.offset_value
115
- else
116
- relation.opts[:offset]
117
- end
118
- end
119
-
120
- def relation_limit(relation)
121
- if relation.respond_to?(:limit_value)
122
- relation.limit_value
123
- else
124
- relation.opts[:limit]
125
- end
126
- end
127
-
128
- # If a relation contains a `.group` clause, a `.count` will return a Hash.
129
- def relation_count(relation)
130
- count_or_hash = if(defined?(ActiveRecord::Relation) && relation.is_a?(ActiveRecord::Relation))
131
- relation.respond_to?(:unscope)? relation.unscope(:order).count(:all) : relation.count(:all)
132
- else # eg, Sequel::Dataset, don't mess up others
133
- relation.count
134
- end
135
- count_or_hash.is_a?(Integer) ? count_or_hash : count_or_hash.length
136
- end
137
-
138
- # Apply cursors to edges
139
- def sliced_nodes
140
- return @sliced_nodes if defined? @sliced_nodes
141
-
142
- @sliced_nodes = nodes
143
-
144
- if after
145
- offset = (relation_offset(@sliced_nodes) || 0) + offset_from_cursor(after)
146
- @sliced_nodes = @sliced_nodes.offset(offset)
147
- end
148
-
149
- if before && after
150
- if offset_from_cursor(after) < offset_from_cursor(before)
151
- @sliced_nodes = limit_nodes(@sliced_nodes, offset_from_cursor(before) - offset_from_cursor(after) - 1)
152
- else
153
- @sliced_nodes = limit_nodes(@sliced_nodes, 0)
154
- end
155
-
156
- elsif before
157
- @sliced_nodes = limit_nodes(@sliced_nodes, offset_from_cursor(before) - 1)
158
- end
159
-
160
- @sliced_nodes
161
- end
162
-
163
- def limit_nodes(sliced_nodes, limit)
164
- if limit > 0 || defined?(ActiveRecord::Relation) && sliced_nodes.is_a?(ActiveRecord::Relation)
165
- sliced_nodes.limit(limit)
166
- else
167
- sliced_nodes.where(false)
168
- end
169
- end
170
-
171
- def sliced_nodes_count
172
- return @sliced_nodes_count if defined? @sliced_nodes_count
173
-
174
- # If a relation contains a `.group` clause, a `.count` will return a Hash.
175
- @sliced_nodes_count = relation_count(sliced_nodes)
176
- end
177
-
178
- def offset_from_cursor(cursor)
179
- decode(cursor).to_i
180
- end
181
- end
182
-
183
- if defined?(ActiveRecord::Relation)
184
- BaseConnection.register_connection_implementation(ActiveRecord::Relation, RelationConnection)
185
- end
186
- if defined?(Sequel::Dataset)
187
- BaseConnection.register_connection_implementation(Sequel::Dataset, RelationConnection)
188
- end
189
- end
190
- end
@@ -1,30 +0,0 @@
1
- # frozen_string_literal: true
2
- module GraphQL
3
- module Relay
4
- # Mixin for Relay-related methods in type objects
5
- # (used by BaseType and Schema::Member).
6
- module TypeExtensions
7
- # @return [GraphQL::ObjectType] The default connection type for this object type
8
- def connection_type
9
- @connection_type ||= define_connection
10
- end
11
-
12
- # Define a custom connection type for this object type
13
- # @return [GraphQL::ObjectType]
14
- def define_connection(**kwargs, &block)
15
- GraphQL::Relay::ConnectionType.create_type(self, **kwargs, &block)
16
- end
17
-
18
- # @return [GraphQL::ObjectType] The default edge type for this object type
19
- def edge_type
20
- @edge_type ||= define_edge
21
- end
22
-
23
- # Define a custom edge type for this object type
24
- # @return [GraphQL::ObjectType]
25
- def define_edge(**kwargs, &block)
26
- GraphQL::Relay::EdgeType.create_type(self, **kwargs, &block)
27
- end
28
- end
29
- end
30
- end
@@ -1,76 +0,0 @@
1
- # frozen_string_literal: true
2
- module GraphQL
3
- # @api deprecated
4
- class ScalarType < GraphQL::BaseType
5
- accepts_definitions :coerce, :coerce_input, :coerce_result
6
- ensure_defined :coerce_non_null_input, :coerce_result
7
-
8
- module NoOpCoerce
9
- def self.call(val, ctx)
10
- val
11
- end
12
- end
13
-
14
- def initialize
15
- super
16
- self.coerce = NoOpCoerce
17
- end
18
-
19
- def coerce=(proc)
20
- self.coerce_input = proc
21
- self.coerce_result = proc
22
- end
23
-
24
- def coerce_input=(coerce_input_fn)
25
- if !coerce_input_fn.nil?
26
- @coerce_input_proc = ensure_two_arg(coerce_input_fn, :coerce_input)
27
- end
28
- end
29
-
30
- def coerce_result(value, ctx = nil)
31
- if ctx.nil?
32
- warn_deprecated_coerce("coerce_isolated_result")
33
- ctx = GraphQL::Query::NullContext
34
- end
35
- @coerce_result_proc.call(value, ctx)
36
- end
37
-
38
- def coerce_result=(coerce_result_fn)
39
- if !coerce_result_fn.nil?
40
- @coerce_result_proc = ensure_two_arg(coerce_result_fn, :coerce_result)
41
- end
42
- end
43
-
44
- def kind
45
- GraphQL::TypeKinds::SCALAR
46
- end
47
-
48
- private
49
-
50
- def ensure_two_arg(callable, method_name)
51
- GraphQL::BackwardsCompatibility.wrap_arity(callable, from: 1, to: 2, name: "#{name}.#{method_name}(val, ctx)")
52
- end
53
-
54
- def coerce_non_null_input(value, ctx)
55
- @coerce_input_proc.call(raw_coercion_input(value), ctx)
56
- end
57
-
58
- def raw_coercion_input(value)
59
- if value.is_a?(GraphQL::Language::Nodes::InputObject)
60
- value.to_h
61
- elsif value.is_a?(Array)
62
- value.map { |element| raw_coercion_input(element) }
63
- else
64
- value
65
- end
66
- end
67
-
68
- def validate_non_null_input(value, ctx)
69
- result = Query::InputValidationResult.new
70
- if value.is_a?(GraphQL::Language::Nodes::Enum) || coerce_non_null_input(value, ctx).nil?
71
- result.add_problem("Could not coerce value #{GraphQL::Language.serialize(value)} to #{name}")
72
- end
73
- result
74
- end
75
- end
76
- end
@@ -1,35 +0,0 @@
1
- # frozen_string_literal: true
2
- module GraphQL
3
- class Schema
4
- # In early GraphQL versions, errors would be "automatically"
5
- # rescued and replaced with `"Internal error"`. That behavior
6
- # was undesirable but this middleware is offered for people who
7
- # want to preserve it.
8
- #
9
- # It has a couple of differences from the previous behavior:
10
- #
11
- # - Other parts of the query _will_ be run (previously,
12
- # execution would stop when the error was raised and the result
13
- # would have no `"data"` key at all)
14
- # - The entry in {Query::Context#errors} is a {GraphQL::ExecutionError}, _not_
15
- # the originally-raised error.
16
- # - The entry in the `"errors"` key includes the location of the field
17
- # which raised the errors.
18
- #
19
- # @example Use CatchallMiddleware with your schema
20
- # # All errors will be suppressed and replaced with "Internal error" messages
21
- # MySchema.middleware << GraphQL::Schema::CatchallMiddleware
22
- #
23
- module CatchallMiddleware
24
- MESSAGE = "Internal error"
25
-
26
- # Rescue any error and replace it with a {GraphQL::ExecutionError}
27
- # whose message is {MESSAGE}
28
- def self.call(parent_type, parent_object, field_definition, field_args, query_context)
29
- yield
30
- rescue StandardError
31
- GraphQL::ExecutionError.new(MESSAGE)
32
- end
33
- end
34
- end
35
- end
@@ -1,10 +0,0 @@
1
- # frozen_string_literal: true
2
- module GraphQL
3
- class Schema
4
- module DefaultParseError
5
- def self.call(parse_error, ctx)
6
- ctx.errors.push(parse_error)
7
- end
8
- end
9
- end
10
- end
@@ -1,15 +0,0 @@
1
- # frozen_string_literal: true
2
- module GraphQL
3
- class Schema
4
- module DefaultTypeError
5
- def self.call(type_error, ctx)
6
- case type_error
7
- when GraphQL::InvalidNullError
8
- ctx.errors << type_error
9
- when GraphQL::UnresolvedTypeError, GraphQL::StringEncodingError, GraphQL::IntegerEncodingError
10
- raise type_error
11
- end
12
- end
13
- end
14
- end
15
- end
@@ -1,152 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module GraphQL
4
- class Schema
5
- class Member
6
- # Support for legacy `accepts_definitions` functions.
7
- #
8
- # Keep the legacy handler hooked up. Class-based types and fields
9
- # will call those legacy handlers during their `.to_graphql`
10
- # methods.
11
- #
12
- # This can help out while transitioning from one to the other.
13
- # Eventually, `GraphQL::{X}Type` objects will be removed entirely,
14
- # But this can help during the transition.
15
- #
16
- # @example Applying a function to base object class
17
- # # Here's the legacy-style config, which we're calling back to:
18
- # GraphQL::ObjectType.accepts_definition({
19
- # permission_level: ->(defn, value) { defn.metadata[:permission_level] = value }
20
- # })
21
- #
22
- # class BaseObject < GraphQL::Schema::Object
23
- # # Setup a named pass-through to the legacy config functions
24
- # accepts_definition :permission_level
25
- # end
26
- #
27
- # class Account < BaseObject
28
- # # This value will be passed to the legacy handler:
29
- # permission_level 1
30
- # end
31
- #
32
- # # The class gets a reader method which returns the args,
33
- # # only marginally useful.
34
- # Account.permission_level # => [1]
35
- #
36
- # # The legacy handler is called, as before:
37
- # Account.graphql_definition.metadata[:permission_level] # => 1
38
- module AcceptsDefinition
39
- def self.included(child)
40
- child.extend(AcceptsDefinitionDefinitionMethods)
41
- child.prepend(ToGraphQLExtension)
42
- child.prepend(InitializeExtension)
43
- end
44
-
45
- def self.extended(child)
46
- if defined?(child::DefinitionMethods)
47
- child::DefinitionMethods.include(AcceptsDefinitionDefinitionMethods)
48
- child::DefinitionMethods.prepend(ToGraphQLExtension)
49
- else
50
- child.extend(AcceptsDefinitionDefinitionMethods)
51
- # I tried to use `super`, but super isn't quite right
52
- # since the method is defined in the same class itself,
53
- # not the superclass
54
- child.class_eval do
55
- class << self
56
- prepend(ToGraphQLExtension)
57
- end
58
- end
59
- end
60
- end
61
-
62
- module AcceptsDefinitionDefinitionMethods
63
- def accepts_definition(name)
64
- own_accepts_definition_methods << name
65
-
66
- ivar_name = "@#{name}_args"
67
- if self.is_a?(Class)
68
- define_singleton_method(name) do |*args|
69
- if args.any?
70
- instance_variable_set(ivar_name, args)
71
- end
72
- instance_variable_get(ivar_name) || (superclass.respond_to?(name) ? superclass.public_send(name) : nil)
73
- end
74
-
75
- define_method(name) do |*args|
76
- if args.any?
77
- instance_variable_set(ivar_name, args)
78
- end
79
- instance_variable_get(ivar_name)
80
- end
81
- else
82
- # Special handling for interfaces, define it here
83
- # so it's appropriately passed down
84
- self::DefinitionMethods.module_eval do
85
- define_method(name) do |*args|
86
- if args.any?
87
- instance_variable_set(ivar_name, args)
88
- end
89
- instance_variable_get(ivar_name) || ((int = interfaces.first { |i| i.respond_to?()}) && int.public_send(name))
90
- end
91
- end
92
- end
93
- end
94
-
95
- def accepts_definition_methods
96
- inherited_methods = if self.is_a?(Class)
97
- superclass.respond_to?(:accepts_definition_methods) ? superclass.accepts_definition_methods : []
98
- elsif self.is_a?(Module)
99
- m = []
100
- ancestors.each do |a|
101
- if a.respond_to?(:own_accepts_definition_methods)
102
- m.concat(a.own_accepts_definition_methods)
103
- end
104
- end
105
- m
106
- else
107
- self.class.accepts_definition_methods
108
- end
109
-
110
- own_accepts_definition_methods + inherited_methods
111
- end
112
-
113
- def own_accepts_definition_methods
114
- @own_accepts_definition_methods ||= []
115
- end
116
- end
117
-
118
- module ToGraphQLExtension
119
- def to_graphql
120
- defn = super
121
- accepts_definition_methods.each do |method_name|
122
- value = public_send(method_name)
123
- if !value.nil?
124
- defn = defn.redefine { public_send(method_name, *value) }
125
- end
126
- end
127
- defn
128
- end
129
- end
130
-
131
- module InitializeExtension
132
- def initialize(*args, **kwargs, &block)
133
- self.class.accepts_definition_methods.each do |method_name|
134
- if kwargs.key?(method_name)
135
- value = kwargs.delete(method_name)
136
- if !value.is_a?(Array)
137
- value = [value]
138
- end
139
- instance_variable_set("@#{method_name}_args", value)
140
- end
141
- end
142
- super(*args, **kwargs, &block)
143
- end
144
-
145
- def accepts_definition_methods
146
- self.class.accepts_definition_methods
147
- end
148
- end
149
- end
150
- end
151
- end
152
- end
@@ -1,31 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module GraphQL
4
- class Schema
5
- class Member
6
- # Adds a layer of caching over user-supplied `.to_graphql` methods.
7
- # Users override `.to_graphql`, but all runtime code should use `.graphql_definition`.
8
- # @api private
9
- # @see concrete classes that extend this, eg {Schema::Object}
10
- module CachedGraphQLDefinition
11
- # A cached result of {.to_graphql}.
12
- # It's cached here so that user-overridden {.to_graphql} implementations
13
- # are also cached
14
- def graphql_definition
15
- @graphql_definition ||= to_graphql
16
- end
17
-
18
- # This is for a common interface with .define-based types
19
- def type_class
20
- self
21
- end
22
-
23
- # Wipe out the cached graphql_definition so that `.to_graphql` will be called again.
24
- def initialize_copy(original)
25
- super
26
- @graphql_definition = nil
27
- end
28
- end
29
- end
30
- end
31
- end