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,303 +0,0 @@
1
- # frozen_string_literal: true
2
- module GraphQL
3
- class Schema
4
- # This module provides a function for validating GraphQL types.
5
- #
6
- # Its {RULES} contain objects that respond to `#call(type)`. Rules are
7
- # looked up for given types (by class ancestry), then applied to
8
- # the object until an error is returned.
9
- class Validation
10
- # Lookup the rules for `object` based on its class,
11
- # Then returns an error message or `nil`
12
- # @param object [Object] something to be validated
13
- # @return [String, Nil] error message, if there was one
14
- def self.validate(object)
15
- RULES.each do |parent_class, validations|
16
- if object.is_a?(parent_class)
17
- validations.each do |rule|
18
- if error = rule.call(object)
19
- return error
20
- end
21
- end
22
- end
23
- end
24
- nil
25
- end
26
-
27
- module Rules
28
- # @param property_name [Symbol] The method to validate
29
- # @param allowed_classes [Class] Classes which the return value may be an instance of
30
- # @return [Proc] A proc which will validate the input by calling `property_name` and asserting it is an instance of one of `allowed_classes`
31
- def self.assert_property(property_name, *allowed_classes)
32
- # Hide LateBoundType from user-facing errors
33
- allowed_classes_message = allowed_classes.map(&:name).reject {|n| n.include?("LateBoundType") }.join(" or ")
34
- ->(obj) {
35
- property_value = obj.public_send(property_name)
36
- is_valid_value = allowed_classes.any? { |allowed_class| property_value.is_a?(allowed_class) }
37
- is_valid_value ? nil : "#{property_name} must return #{allowed_classes_message}, not #{property_value.class.name} (#{property_value.inspect})"
38
- }
39
- end
40
-
41
- # @param property_name [Symbol] The method whose return value will be validated
42
- # @param from_class [Class] The class for keys in the return value
43
- # @param to_class [Class] The class for values in the return value
44
- # @return [Proc] A proc to validate that validates the input by calling `property_name` and asserting that the return value is a Hash of `{from_class => to_class}` pairs
45
- def self.assert_property_mapping(property_name, from_class, to_class)
46
- ->(obj) {
47
- property_value = obj.public_send(property_name)
48
- if !property_value.is_a?(Hash)
49
- "#{property_name} must be a hash of {#{from_class.name} => #{to_class.name}}, not a #{property_value.class.name} (#{property_value.inspect})"
50
- else
51
- invalid_key, invalid_value = property_value.find { |key, value| !key.is_a?(from_class) || !value.is_a?(to_class) }
52
- if invalid_key
53
- "#{property_name} must map #{from_class} => #{to_class}, not #{invalid_key.class.name} => #{invalid_value.class.name} (#{invalid_key.inspect} => #{invalid_value.inspect})"
54
- else
55
- nil # OK
56
- end
57
- end
58
- }
59
- end
60
-
61
- # @param property_name [Symbol] The method whose return value will be validated
62
- # @param list_member_class [Class] The class which each member of the returned array should be an instance of
63
- # @return [Proc] A proc to validate the input by calling `property_name` and asserting that the return is an Array of `list_member_class` instances
64
- def self.assert_property_list_of(property_name, list_member_class)
65
- ->(obj) {
66
- property_value = obj.public_send(property_name)
67
- if !property_value.is_a?(Array)
68
- "#{property_name} must be an Array of #{list_member_class.name}, not a #{property_value.class.name} (#{property_value.inspect})"
69
- else
70
- invalid_member = property_value.find { |value| !value.is_a?(list_member_class) }
71
- if invalid_member
72
- "#{property_name} must contain #{list_member_class.name}, not #{invalid_member.class.name} (#{invalid_member.inspect})"
73
- else
74
- nil # OK
75
- end
76
- end
77
- }
78
- end
79
-
80
- def self.count_at_least(item_name, minimum_count, get_items_proc)
81
- ->(type) {
82
- items = get_items_proc.call(type)
83
-
84
- if items.size < minimum_count
85
- "#{type.name} must define at least #{minimum_count} #{item_name}. #{items.size} defined."
86
- else
87
- nil
88
- end
89
- }
90
- end
91
-
92
- def self.assert_named_items_are_valid(item_name, get_items_proc)
93
- ->(type) {
94
- items = get_items_proc.call(type)
95
- error_message = nil
96
- items.each do |item|
97
- item_message = GraphQL::Schema::Validation.validate(item)
98
- if item_message
99
- error_message = "#{item_name} #{item.name.inspect} #{item_message}"
100
- break
101
- end
102
- end
103
- error_message
104
- }
105
- end
106
-
107
- HAS_AT_LEAST_ONE_FIELD = Rules.count_at_least("field", 1, ->(type) { type.all_fields })
108
- FIELDS_ARE_VALID = Rules.assert_named_items_are_valid("field", ->(type) { type.all_fields })
109
- HAS_AT_LEAST_ONE_ARGUMENT = Rules.count_at_least("argument", 1, ->(type) { type.arguments })
110
-
111
- HAS_ONE_OR_MORE_POSSIBLE_TYPES = ->(type) {
112
- type.possible_types.length >= 1 ? nil : "must have at least one possible type"
113
- }
114
-
115
- NAME_IS_STRING = Rules.assert_property(:name, String)
116
- DESCRIPTION_IS_STRING_OR_NIL = Rules.assert_property(:description, String, NilClass)
117
- ARGUMENTS_ARE_STRING_TO_ARGUMENT = Rules.assert_property_mapping(:arguments, String, GraphQL::Argument)
118
- ARGUMENTS_ARE_VALID = Rules.assert_named_items_are_valid("argument", ->(type) { type.arguments.values })
119
-
120
- DEFAULT_VALUE_IS_VALID_FOR_TYPE = ->(type) {
121
- if !type.default_value.nil?
122
- coerced_value = begin
123
- type.type.coerce_isolated_result(type.default_value)
124
- rescue => ex
125
- ex
126
- end
127
-
128
- if coerced_value.nil? || coerced_value.is_a?(StandardError)
129
- msg = "default value #{type.default_value.inspect} is not valid for type #{type.type}"
130
- msg += " (#{coerced_value})" if coerced_value.is_a?(StandardError)
131
- msg
132
- end
133
- end
134
- }
135
-
136
- TYPE_IS_VALID_INPUT_TYPE = ->(type) {
137
- outer_type = type.type
138
- inner_type = outer_type.respond_to?(:unwrap) ? outer_type.unwrap : nil
139
-
140
- case inner_type
141
- when GraphQL::ScalarType, GraphQL::InputObjectType, GraphQL::EnumType
142
- # OK
143
- else
144
- "type must be a valid input type (Scalar or InputObject), not #{outer_type.class} (#{outer_type})"
145
- end
146
- }
147
-
148
- SCHEMA_CAN_RESOLVE_TYPES = ->(schema) {
149
- if schema.types.values.any? { |type| type.kind.abstract? } && schema.resolve_type_proc.nil?
150
- "schema contains Interfaces or Unions, so you must define a `resolve_type -> (obj, ctx) { ... }` function"
151
- else
152
- # :+1:
153
- end
154
- }
155
-
156
- SCHEMA_CAN_FETCH_IDS = ->(schema) {
157
- has_node_field = schema.query && schema.query.fields.each_value.any?(&:relay_node_field)
158
- if has_node_field && schema.object_from_id_proc.nil?
159
- "schema contains `node(id:...)` field, so you must define a `object_from_id -> (id, ctx) { ... }` function"
160
- else
161
- # :rocket:
162
- end
163
- }
164
-
165
- SCHEMA_CAN_GENERATE_IDS = ->(schema) {
166
- has_id_field = schema.types.values.any? { |t| t.kind.fields? && t.all_fields.any? { |f| f.resolve_proc.is_a?(GraphQL::Relay::GlobalIdResolve) } }
167
- if has_id_field && schema.id_from_object_proc.nil?
168
- "schema contains `global_id_field`, so you must define a `id_from_object -> (obj, type, ctx) { ... }` function"
169
- else
170
- # :ok_hand:
171
- end
172
- }
173
-
174
- SCHEMA_INSTRUMENTERS_ARE_VALID = ->(schema) {
175
- errs = []
176
- schema.instrumenters[:query].each do |inst|
177
- if !inst.respond_to?(:before_query) || !inst.respond_to?(:after_query)
178
- errs << "`instrument(:query, #{inst})` is invalid: must respond to `before_query(query)` and `after_query(query)` "
179
- end
180
- end
181
-
182
- schema.instrumenters[:field].each do |inst|
183
- if !inst.respond_to?(:instrument)
184
- errs << "`instrument(:field, #{inst})` is invalid: must respond to `instrument(type, field)`"
185
- end
186
- end
187
-
188
- if errs.any?
189
- errs.join("Invalid instrumenters:\n" + errs.join("\n"))
190
- else
191
- nil
192
- end
193
- }
194
-
195
- RESERVED_TYPE_NAME = ->(type) {
196
- if type.name.start_with?('__') && !type.introspection?
197
- # TODO: make this a hard failure in a later version
198
- warn("Name #{type.name.inspect} must not begin with \"__\", which is reserved by GraphQL introspection.")
199
- nil
200
- else
201
- # ok name
202
- end
203
- }
204
-
205
- RESERVED_NAME = ->(named_thing) {
206
- if named_thing.name.start_with?('__')
207
- # TODO: make this a hard failure in a later version
208
- warn("Name #{named_thing.name.inspect} must not begin with \"__\", which is reserved by GraphQL introspection.")
209
- nil
210
- else
211
- # no worries
212
- end
213
- }
214
-
215
- INTERFACES_ARE_IMPLEMENTED = ->(obj_type) {
216
- field_errors = []
217
- obj_type.interfaces.each do |interface_type|
218
- interface_type.fields.each do |field_name, field_defn|
219
- object_field = obj_type.get_field(field_name)
220
- if object_field.nil?
221
- field_errors << %|"#{field_name}" is required by #{interface_type.name} but not implemented by #{obj_type.name}|
222
- elsif !GraphQL::Execution::Typecast.subtype?(field_defn.type, object_field.type)
223
- field_errors << %|"#{field_name}" is required by #{interface_type.name} to return #{field_defn.type} but #{obj_type.name}.#{field_name} returns #{object_field.type}|
224
- else
225
- field_defn.arguments.each do |arg_name, arg_defn|
226
- object_field_arg = object_field.arguments[arg_name]
227
- if object_field_arg.nil?
228
- field_errors << %|"#{arg_name}" argument is required by #{interface_type.name}.#{field_name} but not accepted by #{obj_type.name}.#{field_name}|
229
- elsif arg_defn.type != object_field_arg.type
230
- field_errors << %|"#{arg_name}" is required by #{interface_type.name}.#{field_defn.name} to accept #{arg_defn.type} but #{obj_type.name}.#{field_name} accepts #{object_field_arg.type} for "#{arg_name}"|
231
- end
232
- end
233
-
234
- object_field.arguments.each do |arg_name, arg_defn|
235
- if field_defn.arguments[arg_name].nil? && arg_defn.type.is_a?(GraphQL::NonNullType)
236
- field_errors << %|"#{arg_name}" is not accepted by #{interface_type.name}.#{field_name} but required by #{obj_type.name}.#{field_name}|
237
- end
238
- end
239
- end
240
- end
241
- end
242
- if field_errors.any?
243
- "#{obj_type.name} failed to implement some interfaces: #{field_errors.join(", ")}"
244
- else
245
- nil
246
- end
247
- }
248
- end
249
-
250
- # A mapping of `{Class => [Proc, Proc...]}` pairs.
251
- # To validate an instance, find entries where `object.is_a?(key)` is true.
252
- # Then apply each rule from the matching values.
253
- RULES = {
254
- GraphQL::Field => [
255
- Rules::NAME_IS_STRING,
256
- Rules::RESERVED_NAME,
257
- Rules::DESCRIPTION_IS_STRING_OR_NIL,
258
- Rules.assert_property(:deprecation_reason, String, NilClass),
259
- Rules.assert_property(:type, GraphQL::BaseType, GraphQL::Schema::LateBoundType),
260
- Rules.assert_property(:property, Symbol, NilClass),
261
- Rules::ARGUMENTS_ARE_STRING_TO_ARGUMENT,
262
- Rules::ARGUMENTS_ARE_VALID,
263
- ],
264
- GraphQL::Argument => [
265
- Rules::NAME_IS_STRING,
266
- Rules::RESERVED_NAME,
267
- Rules::DESCRIPTION_IS_STRING_OR_NIL,
268
- Rules::TYPE_IS_VALID_INPUT_TYPE,
269
- Rules::DEFAULT_VALUE_IS_VALID_FOR_TYPE,
270
- ],
271
- GraphQL::BaseType => [
272
- Rules::NAME_IS_STRING,
273
- Rules::RESERVED_TYPE_NAME,
274
- Rules::DESCRIPTION_IS_STRING_OR_NIL,
275
- ],
276
- GraphQL::ObjectType => [
277
- Rules::HAS_AT_LEAST_ONE_FIELD,
278
- Rules.assert_property_list_of(:interfaces, GraphQL::InterfaceType),
279
- Rules::FIELDS_ARE_VALID,
280
- Rules::INTERFACES_ARE_IMPLEMENTED,
281
- ],
282
- GraphQL::InputObjectType => [
283
- Rules::HAS_AT_LEAST_ONE_ARGUMENT,
284
- Rules::ARGUMENTS_ARE_STRING_TO_ARGUMENT,
285
- Rules::ARGUMENTS_ARE_VALID,
286
- ],
287
- GraphQL::UnionType => [
288
- Rules.assert_property_list_of(:possible_types, GraphQL::ObjectType),
289
- Rules::HAS_ONE_OR_MORE_POSSIBLE_TYPES,
290
- ],
291
- GraphQL::InterfaceType => [
292
- Rules::FIELDS_ARE_VALID,
293
- ],
294
- GraphQL::Schema => [
295
- Rules::SCHEMA_INSTRUMENTERS_ARE_VALID,
296
- Rules::SCHEMA_CAN_RESOLVE_TYPES,
297
- Rules::SCHEMA_CAN_FETCH_IDS,
298
- Rules::SCHEMA_CAN_GENERATE_IDS,
299
- ],
300
- }
301
- end
302
- end
303
- end
@@ -1,15 +0,0 @@
1
- # frozen_string_literal: true
2
- module GraphQL
3
- module StaticValidation
4
- class DefaultVisitor < BaseVisitor
5
- include(GraphQL::StaticValidation::DefinitionDependencies)
6
-
7
- StaticValidation::ALL_RULES.reverse_each do |r|
8
- include(r)
9
- end
10
-
11
- include(GraphQL::InternalRepresentation::Rewrite)
12
- include(ContextMethods)
13
- end
14
- end
15
- end
@@ -1,10 +0,0 @@
1
- # frozen_string_literal: true
2
- module GraphQL
3
- module StaticValidation
4
- class NoValidateVisitor < StaticValidation::BaseVisitor
5
- include(GraphQL::InternalRepresentation::Rewrite)
6
- include(GraphQL::StaticValidation::DefinitionDependencies)
7
- include(ContextMethods)
8
- end
9
- end
10
- end
@@ -1,2 +0,0 @@
1
- # frozen_string_literal: true
2
- GraphQL::STRING_TYPE = GraphQL::Types::String.graphql_definition
@@ -1,65 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module GraphQL
4
- class Subscriptions
5
- # Extend this module in your subscription root when using {GraphQL::Execution::Interpreter}.
6
- module SubscriptionRoot
7
- def self.extended(child_cls)
8
- child_cls.include(InstanceMethods)
9
- end
10
-
11
- # This is for maintaining backwards compatibility:
12
- # if a subscription field is created without a `subscription:` resolver class,
13
- # then implement the method with the previous default behavior.
14
- module InstanceMethods
15
- def skip_subscription_root(*)
16
- if context.query.subscription_update?
17
- object
18
- else
19
- context.skip
20
- end
21
- end
22
- end
23
-
24
- def field(*args, extensions: [], **rest, &block)
25
- extensions += [Extension]
26
- # Backwards-compat for schemas
27
- if !rest[:subscription]
28
- name = args.first
29
- alias_method(name, :skip_subscription_root)
30
- end
31
- super(*args, extensions: extensions, **rest, &block)
32
- end
33
-
34
- class Extension < GraphQL::Schema::FieldExtension
35
- def after_resolve(value:, context:, object:, arguments:, **rest)
36
- if value.is_a?(GraphQL::ExecutionError)
37
- value
38
- elsif (events = context.namespace(:subscriptions)[:events])
39
- # This is the first execution, so gather an Event
40
- # for the backend to register:
41
- events << Subscriptions::Event.new(
42
- name: field.name,
43
- arguments: arguments,
44
- context: context,
45
- field: field,
46
- )
47
- value
48
- elsif context.query.subscription_topic == Subscriptions::Event.serialize(
49
- field.name,
50
- arguments,
51
- field,
52
- scope: (field.subscription_scope ? context[field.subscription_scope] : nil),
53
- )
54
- # This is a subscription update. The resolver returned `skip` if it should be skipped,
55
- # or else it returned an object to resolve the update.
56
- value
57
- else
58
- # This is a subscription update, but this event wasn't triggered.
59
- context.skip
60
- end
61
- end
62
- end
63
- end
64
- end
65
- 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
- warn("GraphQL::Tracing::SkylightTracing is deprecated, 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,22 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module GraphQL
4
- module Types
5
- module Relay
6
- class BaseField < GraphQL::Schema::Field
7
- def initialize(edge_class: nil, **rest, &block)
8
- @edge_class = edge_class
9
- super(**rest, &block)
10
- end
11
-
12
- def to_graphql
13
- field = super
14
- if @edge_class
15
- field.edge_class = @edge_class
16
- end
17
- field
18
- end
19
- end
20
- end
21
- end
22
- end
@@ -1,29 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module GraphQL
4
- module Types
5
- module Relay
6
- module BaseInterface
7
- include GraphQL::Schema::Interface
8
-
9
- field_class(Types::Relay::BaseField)
10
-
11
- definition_methods do
12
- def default_relay(new_value)
13
- @default_relay = new_value
14
- end
15
-
16
- def default_relay?
17
- !!@default_relay
18
- end
19
-
20
- def to_graphql
21
- type_defn = super
22
- type_defn.default_relay = default_relay?
23
- type_defn
24
- end
25
- end
26
- end
27
- end
28
- end
29
- end
@@ -1,26 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module GraphQL
4
- module Types
5
- module Relay
6
- class BaseObject < GraphQL::Schema::Object
7
- field_class(Types::Relay::BaseField)
8
- class << self
9
- def default_relay(new_value)
10
- @default_relay = new_value
11
- end
12
-
13
- def default_relay?
14
- !!@default_relay
15
- end
16
-
17
- def to_graphql
18
- type_defn = super
19
- type_defn.default_relay = default_relay?
20
- type_defn
21
- end
22
- end
23
- end
24
- end
25
- end
26
- end
@@ -1,43 +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(
23
- name: "node",
24
- owner: nil,
25
- type: GraphQL::Types::Relay::Node,
26
- null: true,
27
- description: "Fetches an object given its ID.",
28
- relay_node_field: true,
29
- ) do
30
- argument :id, "ID!", required: true,
31
- description: "ID of the object."
32
-
33
- def resolve(obj, args, ctx)
34
- ctx.schema.object_from_id(args[:id], ctx)
35
- end
36
-
37
- def resolve_field(obj, args, ctx)
38
- resolve(obj, args, ctx)
39
- end
40
- end
41
- end
42
- end
43
- end
@@ -1,45 +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(
25
- name: "nodes",
26
- owner: nil,
27
- type: [GraphQL::Types::Relay::Node, null: true],
28
- null: false,
29
- description: "Fetches a list of objects given a list of IDs.",
30
- relay_nodes_field: true,
31
- ) do
32
- argument :ids, "[ID!]!", required: true,
33
- description: "IDs of the objects."
34
-
35
- def resolve(obj, args, ctx)
36
- args[:ids].map { |id| ctx.schema.object_from_id(id, ctx) }
37
- end
38
-
39
- def resolve_field(obj, args, ctx)
40
- resolve(obj, args, ctx)
41
- end
42
- end
43
- end
44
- end
45
- end