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,91 +0,0 @@
1
- # frozen_string_literal: true
2
- module GraphQL
3
- module Execution
4
- class Lazy
5
- # Helpers for dealing with data structures containing {Lazy} instances
6
- # @api private
7
- module Resolve
8
- # Mutate `value`, replacing {Lazy} instances in place with their resolved values
9
- # @return [void]
10
-
11
- # This object can be passed like an array, but it doesn't allocate an
12
- # array until it's used.
13
- #
14
- # There's one crucial difference: you have to _capture_ the result
15
- # of `#<<`. (This _works_ with arrays but isn't required, since it has a side-effect.)
16
- # @api private
17
- module NullAccumulator
18
- def self.<<(item)
19
- [item]
20
- end
21
-
22
- def self.empty?
23
- true
24
- end
25
- end
26
-
27
- def self.resolve(value)
28
- lazies = resolve_in_place(value)
29
- deep_sync(lazies)
30
- end
31
-
32
- def self.resolve_in_place(value)
33
- acc = each_lazy(NullAccumulator, value)
34
-
35
- if acc.empty?
36
- Lazy::NullResult
37
- else
38
- Lazy.new {
39
- acc.each_with_index { |ctx, idx|
40
- acc[idx] = ctx.value.value
41
- }
42
- resolve_in_place(acc)
43
- }
44
- end
45
- end
46
-
47
- # If `value` is a collection,
48
- # add any {Lazy} instances in the collection
49
- # to `acc`
50
- # @return [void]
51
- def self.each_lazy(acc, value)
52
- case value
53
- when Hash
54
- value.each do |key, field_result|
55
- acc = each_lazy(acc, field_result)
56
- end
57
- when Array
58
- value.each do |field_result|
59
- acc = each_lazy(acc, field_result)
60
- end
61
- when Query::Context::SharedMethods
62
- field_value = value.value
63
- case field_value
64
- when Lazy
65
- acc = acc << value
66
- when Enumerable # shortcut for Hash & Array
67
- acc = each_lazy(acc, field_value)
68
- end
69
- end
70
-
71
- acc
72
- end
73
-
74
- # Traverse `val`, triggering resolution for each {Lazy}.
75
- # These {Lazy}s are expected to mutate their owner data structures
76
- # during resolution! (They're created with the `.then` calls in `resolve_in_place`).
77
- # @return [void]
78
- def self.deep_sync(val)
79
- case val
80
- when Lazy
81
- deep_sync(val.value)
82
- when Array
83
- val.each { |v| deep_sync(v.value) }
84
- when Hash
85
- val.each { |k, v| deep_sync(v.value) }
86
- end
87
- end
88
- end
89
- end
90
- end
91
- end
@@ -1,50 +0,0 @@
1
- # frozen_string_literal: true
2
- module GraphQL
3
- module Execution
4
- # @api private
5
- module Typecast
6
- # @return [Boolean]
7
- def self.subtype?(parent_type, child_type)
8
- if parent_type == child_type
9
- # Equivalent types are subtypes
10
- true
11
- elsif child_type.is_a?(GraphQL::NonNullType)
12
- # A non-null type is a subtype of a nullable type
13
- # if its inner type is a subtype of that type
14
- if parent_type.is_a?(GraphQL::NonNullType)
15
- subtype?(parent_type.of_type, child_type.of_type)
16
- else
17
- subtype?(parent_type, child_type.of_type)
18
- end
19
- else
20
- case parent_type
21
- when GraphQL::InterfaceType
22
- # A type is a subtype of an interface
23
- # if it implements that interface
24
- case child_type
25
- when GraphQL::ObjectType
26
- child_type.interfaces.include?(parent_type)
27
- else
28
- false
29
- end
30
- when GraphQL::UnionType
31
- # A type is a subtype of that union
32
- # if the union includes that type
33
- parent_type.possible_types.include?(child_type)
34
- when GraphQL::ListType
35
- # A list type is a subtype of another list type
36
- # if its inner type is a subtype of the other inner type
37
- case child_type
38
- when GraphQL::ListType
39
- subtype?(parent_type.of_type, child_type.of_type)
40
- else
41
- false
42
- end
43
- else
44
- false
45
- end
46
- end
47
- end
48
- end
49
- end
50
- end
@@ -1,59 +0,0 @@
1
- # frozen_string_literal: true
2
- module GraphQL
3
- class Field
4
- # Create resolve procs ahead of time based on a {GraphQL::Field}'s `name`, `property`, and `hash_key` configuration.
5
- module Resolve
6
- module_function
7
-
8
- # @param field [GraphQL::Field] A field that needs a resolve proc
9
- # @return [Proc] A resolver for this field, based on its config
10
- def create_proc(field)
11
- if field.property
12
- MethodResolve.new(field)
13
- elsif !field.hash_key.nil?
14
- HashKeyResolve.new(field.hash_key)
15
- else
16
- NameResolve.new(field)
17
- end
18
- end
19
-
20
- # These only require `obj` as input
21
- class BuiltInResolve
22
- end
23
-
24
- # Resolve the field by `public_send`ing `@method_name`
25
- class MethodResolve < BuiltInResolve
26
- def initialize(field)
27
- @method_name = field.property.to_sym
28
- end
29
-
30
- def call(obj, args, ctx)
31
- obj.public_send(@method_name)
32
- end
33
- end
34
-
35
- # Resolve the field by looking up `@hash_key` with `#[]`
36
- class HashKeyResolve < BuiltInResolve
37
- def initialize(hash_key)
38
- @hash_key = hash_key
39
- end
40
-
41
- def call(obj, args, ctx)
42
- obj[@hash_key]
43
- end
44
- end
45
-
46
- # Call the field's name at query-time since
47
- # it might have changed
48
- class NameResolve < BuiltInResolve
49
- def initialize(field)
50
- @field = field
51
- end
52
-
53
- def call(obj, args, ctx)
54
- obj.public_send(@field.name)
55
- end
56
- end
57
- end
58
- end
59
- end
data/lib/graphql/field.rb DELETED
@@ -1,222 +0,0 @@
1
- # frozen_string_literal: true
2
- require "graphql/field/resolve"
3
-
4
- module GraphQL
5
- # @api deprecated
6
- class Field
7
- include GraphQL::Define::InstanceDefinable
8
- accepts_definitions :name, :description, :deprecation_reason,
9
- :resolve, :lazy_resolve,
10
- :type, :arguments,
11
- :property, :hash_key, :complexity,
12
- :mutation, :function,
13
- :edge_class,
14
- :relay_node_field,
15
- :relay_nodes_field,
16
- :subscription_scope,
17
- :trace,
18
- :introspection,
19
- argument: GraphQL::Define::AssignArgument
20
-
21
- ensure_defined(
22
- :name, :deprecation_reason, :description, :description=, :property, :hash_key,
23
- :mutation, :arguments, :complexity, :function,
24
- :resolve, :resolve=, :lazy_resolve, :lazy_resolve=, :lazy_resolve_proc, :resolve_proc,
25
- :type, :type=, :name=, :property=, :hash_key=,
26
- :relay_node_field, :relay_nodes_field, :edges?, :edge_class, :subscription_scope,
27
- :introspection?
28
- )
29
-
30
- # @return [Boolean] True if this is the Relay find-by-id field
31
- attr_accessor :relay_node_field
32
-
33
- # @return [Boolean] True if this is the Relay find-by-ids field
34
- attr_accessor :relay_nodes_field
35
-
36
- # @return [<#call(obj, args, ctx)>] A proc-like object which can be called to return the field's value
37
- attr_reader :resolve_proc
38
-
39
- # @return [<#call(obj, args, ctx)>] A proc-like object which can be called trigger a lazy resolution
40
- attr_reader :lazy_resolve_proc
41
-
42
- # @return [String] The name of this field on its {GraphQL::ObjectType} (or {GraphQL::InterfaceType})
43
- attr_reader :name
44
- alias :graphql_name :name
45
-
46
- # @return [String, nil] The client-facing description of this field
47
- attr_accessor :description
48
-
49
- # @return [String, nil] The client-facing reason why this field is deprecated (if present, the field is deprecated)
50
- attr_accessor :deprecation_reason
51
-
52
- # @return [Hash<String => GraphQL::Argument>] Map String argument names to their {GraphQL::Argument} implementations
53
- attr_accessor :arguments
54
-
55
- # @return [GraphQL::Relay::Mutation, nil] The mutation this field was derived from, if it was derived from a mutation
56
- attr_accessor :mutation
57
-
58
- # @return [Numeric, Proc] The complexity for this field (default: 1), as a constant or a proc like `->(query_ctx, args, child_complexity) { } # Numeric`
59
- attr_accessor :complexity
60
-
61
- # @return [Symbol, nil] The method to call on `obj` to return this field (overrides {#name} if present)
62
- attr_reader :property
63
-
64
- # @return [Object, nil] The key to access with `obj.[]` to resolve this field (overrides {#name} if present)
65
- attr_reader :hash_key
66
-
67
- # @return [Object, GraphQL::Function] The function used to derive this field
68
- attr_accessor :function
69
-
70
- attr_accessor :arguments_class
71
-
72
- attr_writer :connection
73
- attr_writer :introspection
74
-
75
- # @return [nil, String] Prefix for subscription names from this field
76
- attr_accessor :subscription_scope
77
-
78
- # @return [Boolean] True if this field should be traced. By default, fields are only traced if they are not a ScalarType or EnumType.
79
- attr_accessor :trace
80
-
81
- attr_accessor :ast_node
82
-
83
- # Future-compatible alias
84
- # @see {GraphQL::SchemaMember}
85
- alias :graphql_definition :itself
86
-
87
- # @return [Boolean]
88
- def connection?
89
- @connection
90
- end
91
-
92
- # @return [nil, Class]
93
- # @api private
94
- attr_accessor :edge_class
95
-
96
- # @return [Boolean]
97
- def edges?
98
- !!@edge_class
99
- end
100
-
101
- # @return [nil, Integer]
102
- attr_accessor :connection_max_page_size
103
-
104
- def initialize
105
- @complexity = 1
106
- @arguments = {}
107
- @resolve_proc = build_default_resolver
108
- @lazy_resolve_proc = DefaultLazyResolve
109
- @relay_node_field = false
110
- @connection = false
111
- @connection_max_page_size = nil
112
- @edge_class = nil
113
- @trace = nil
114
- @introspection = false
115
- end
116
-
117
- def initialize_copy(other)
118
- ensure_defined
119
- super
120
- @arguments = other.arguments.dup
121
- end
122
-
123
- # @return [Boolean] Is this field a predefined introspection field?
124
- def introspection?
125
- @introspection
126
- end
127
-
128
- # Get a value for this field
129
- # @example resolving a field value
130
- # field.resolve(obj, args, ctx)
131
- #
132
- # @param object [Object] The object this field belongs to
133
- # @param arguments [Hash] Arguments declared in the query
134
- # @param context [GraphQL::Query::Context]
135
- def resolve(object, arguments, context)
136
- resolve_proc.call(object, arguments, context)
137
- end
138
-
139
- # Provide a new callable for this field's resolve function. If `nil`,
140
- # a new resolve proc will be build based on its {#name}, {#property} or {#hash_key}.
141
- # @param new_resolve_proc [<#call(obj, args, ctx)>, nil]
142
- def resolve=(new_resolve_proc)
143
- @resolve_proc = new_resolve_proc || build_default_resolver
144
- end
145
-
146
- def type=(new_return_type)
147
- @clean_type = nil
148
- @dirty_type = new_return_type
149
- end
150
-
151
- # Get the return type for this field.
152
- def type
153
- @clean_type ||= GraphQL::BaseType.resolve_related_type(@dirty_type)
154
- end
155
-
156
- def name=(new_name)
157
- old_name = @name
158
- @name = new_name
159
-
160
- if old_name != new_name && @resolve_proc.is_a?(Field::Resolve::NameResolve)
161
- # Since the NameResolve would use the old field name,
162
- # reset resolve proc when the name has changed
163
- self.resolve = nil
164
- end
165
- end
166
-
167
- # @param new_property [Symbol] A method to call to resolve this field. Overrides the existing resolve proc.
168
- def property=(new_property)
169
- @property = new_property
170
- self.resolve = nil # reset resolve proc
171
- end
172
-
173
- # @param new_hash_key [Symbol] A key to access with `#[key]` to resolve this field. Overrides the existing resolve proc.
174
- def hash_key=(new_hash_key)
175
- @hash_key = new_hash_key
176
- self.resolve = nil # reset resolve proc
177
- end
178
-
179
- def to_s
180
- "<Field name:#{name || "not-named"} desc:#{description} resolve:#{resolve_proc}>"
181
- end
182
-
183
- # If {#resolve} returned an object which should be handled lazily,
184
- # this method will be called later to force the object to return its value.
185
- # @param obj [Object] The {#resolve}-provided object, registered with {Schema#lazy_resolve}
186
- # @param args [GraphQL::Query::Arguments] Arguments to this field
187
- # @param ctx [GraphQL::Query::Context] Context for this field
188
- # @return [Object] The result of calling the registered method on `obj`
189
- def lazy_resolve(obj, args, ctx)
190
- @lazy_resolve_proc.call(obj, args, ctx)
191
- end
192
-
193
- # Assign a new resolve proc to this field. Used for {#lazy_resolve}
194
- def lazy_resolve=(new_lazy_resolve_proc)
195
- @lazy_resolve_proc = new_lazy_resolve_proc
196
- end
197
-
198
- # Prepare a lazy value for this field. It may be `then`-ed and resolved later.
199
- # @return [GraphQL::Execution::Lazy] A lazy wrapper around `obj` and its registered method name
200
- def prepare_lazy(obj, args, ctx)
201
- GraphQL::Execution::Lazy.new {
202
- lazy_resolve(obj, args, ctx)
203
- }
204
- end
205
-
206
- def type_class
207
- metadata[:type_class]
208
- end
209
-
210
- private
211
-
212
- def build_default_resolver
213
- GraphQL::Field::Resolve.create_proc(self)
214
- end
215
-
216
- module DefaultLazyResolve
217
- def self.call(obj, args, ctx)
218
- ctx.schema.sync_lazy(obj)
219
- end
220
- end
221
- end
222
- end
@@ -1,2 +0,0 @@
1
- # frozen_string_literal: true
2
- GraphQL::FLOAT_TYPE = GraphQL::Types::Float.graphql_definition
@@ -1,124 +0,0 @@
1
- # frozen_string_literal: true
2
- module GraphQL
3
- # @api deprecated
4
- class Function
5
- # @return [Hash<String => GraphQL::Argument>] Arguments, keyed by name
6
- def arguments
7
- self.class.arguments
8
- end
9
-
10
- # @return [GraphQL::BaseType] Return type
11
- def type
12
- self.class.type
13
- end
14
-
15
- # @return [Object] This function's resolver
16
- def call(obj, args, ctx)
17
- raise GraphQL::RequiredImplementationMissingError
18
- end
19
-
20
- # @return [String, nil]
21
- def description
22
- self.class.description
23
- end
24
-
25
- # @return [String, nil]
26
- def deprecation_reason
27
- self.class.deprecation_reason
28
- end
29
-
30
- # @return [Integer, Proc]
31
- def complexity
32
- self.class.complexity || 1
33
- end
34
-
35
- class << self
36
- # Define an argument for this function & its subclasses
37
- # @see {GraphQL::Field} same arguments as the `argument` definition helper
38
- # @return [void]
39
- def argument(*args, **kwargs, &block)
40
- argument = GraphQL::Argument.from_dsl(*args, **kwargs, &block)
41
- own_arguments[argument.name] = argument
42
- nil
43
- end
44
-
45
- # @return [Hash<String => GraphQL::Argument>] Arguments for this function class, including inherited arguments
46
- def arguments
47
- if parent_function?
48
- own_arguments.merge(superclass.arguments)
49
- else
50
- own_arguments.dup
51
- end
52
- end
53
-
54
- # Provides shorthand access to GraphQL's built-in types
55
- def types
56
- GraphQL::Define::TypeDefiner.instance
57
- end
58
-
59
- # Get or set the return type for this function class & descendants
60
- # @return [GraphQL::BaseType]
61
- def type(premade_type = nil, &block)
62
- if block_given?
63
- @type = GraphQL::ObjectType.define(&block)
64
- elsif premade_type
65
- @type = premade_type
66
- elsif parent_function?
67
- @type || superclass.type
68
- else
69
- @type
70
- end
71
- end
72
-
73
- def build_field(function)
74
- GraphQL::Field.define(
75
- arguments: function.arguments,
76
- complexity: function.complexity,
77
- type: function.type,
78
- resolve: function,
79
- description: function.description,
80
- function: function,
81
- deprecation_reason: function.deprecation_reason,
82
- )
83
- end
84
-
85
- # Class-level reader/writer which is inherited
86
- # @api private
87
- def self.inherited_value(name)
88
- self.class_eval <<-RUBY
89
- def #{name}(new_value = nil)
90
- if new_value
91
- @#{name} = new_value
92
- elsif parent_function?
93
- @#{name} || superclass.#{name}
94
- else
95
- @#{name}
96
- end
97
- end
98
- RUBY
99
- end
100
-
101
- # @!method description(new_value = nil)
102
- # Get or set this class's description
103
- inherited_value(:description)
104
- # @!method deprecation_reason(new_value = nil)
105
- # Get or set this class's deprecation_reason
106
- inherited_value(:deprecation_reason)
107
- # @!method complexity(new_value = nil)
108
- # Get or set this class's complexity
109
- inherited_value(:complexity)
110
-
111
- private
112
-
113
- # Does this function inherit from another function?
114
- def parent_function?
115
- superclass <= GraphQL::Function
116
- end
117
-
118
- # Arguments defined on this class (not superclasses)
119
- def own_arguments
120
- @own_arguments ||= {}
121
- end
122
- end
123
- end
124
- end
@@ -1,2 +0,0 @@
1
- # frozen_string_literal: true
2
- GraphQL::ID_TYPE = GraphQL::Types::ID.graphql_definition
@@ -1,132 +0,0 @@
1
- # frozen_string_literal: true
2
- module GraphQL
3
- # @api deprecated
4
- class InputObjectType < GraphQL::BaseType
5
- accepts_definitions(
6
- :arguments, :mutation,
7
- input_field: GraphQL::Define::AssignArgument,
8
- argument: GraphQL::Define::AssignArgument
9
- )
10
-
11
- attr_accessor :mutation, :arguments, :arguments_class
12
- ensure_defined(:mutation, :arguments, :input_fields)
13
- alias :input_fields :arguments
14
-
15
- # @!attribute mutation
16
- # @return [GraphQL::Relay::Mutation, nil] The mutation this field was derived from, if it was derived from a mutation
17
-
18
- # @!attribute arguments
19
- # @return [Hash<String => GraphQL::Argument>] Map String argument names to their {GraphQL::Argument} implementations
20
-
21
-
22
- def initialize
23
- super
24
- @arguments = {}
25
- end
26
-
27
- def initialize_copy(other)
28
- super
29
- @arguments = other.arguments.dup
30
- end
31
-
32
- def kind
33
- GraphQL::TypeKinds::INPUT_OBJECT
34
- end
35
-
36
- def coerce_result(value, ctx = nil)
37
- if ctx.nil?
38
- warn_deprecated_coerce("coerce_isolated_result")
39
- ctx = GraphQL::Query::NullContext
40
- end
41
-
42
- # Allow the application to provide values as :symbols, and convert them to the strings
43
- value = value.reduce({}) { |memo, (k, v)| memo[k.to_s] = v; memo }
44
-
45
- result = {}
46
-
47
- arguments.each do |input_key, input_field_defn|
48
- input_value = value[input_key]
49
- if value.key?(input_key)
50
- result[input_key] = if input_value.nil?
51
- nil
52
- else
53
- input_field_defn.type.coerce_result(input_value, ctx)
54
- end
55
- end
56
- end
57
-
58
- result
59
- end
60
-
61
- private
62
-
63
- def coerce_non_null_input(value, ctx)
64
- input_values = {}
65
- defaults_used = Set.new
66
-
67
- arguments.each do |input_key, input_field_defn|
68
- field_value = value[input_key]
69
-
70
- if value.key?(input_key)
71
- coerced_value = input_field_defn.type.coerce_input(field_value, ctx)
72
- input_values[input_key] = input_field_defn.prepare(coerced_value, ctx)
73
- elsif input_field_defn.default_value?
74
- coerced_value = input_field_defn.type.coerce_input(input_field_defn.default_value, ctx)
75
- input_values[input_key] = coerced_value
76
- defaults_used << input_key
77
- end
78
- end
79
-
80
- result = arguments_class.new(input_values, context: ctx, defaults_used: defaults_used)
81
- result.prepare
82
- end
83
-
84
- # @api private
85
- INVALID_OBJECT_MESSAGE = "Expected %{object} to be a key, value object responding to `to_h` or `to_unsafe_h`."
86
-
87
- def validate_non_null_input(input, ctx)
88
- warden = ctx.warden
89
- result = GraphQL::Query::InputValidationResult.new
90
-
91
- if input.is_a?(Array)
92
- result.add_problem(INVALID_OBJECT_MESSAGE % { object: JSON.generate(input, quirks_mode: true) })
93
- return result
94
- end
95
-
96
- # We're not actually _using_ the coerced result, we're just
97
- # using these methods to make sure that the object will
98
- # behave like a hash below, when we call `each` on it.
99
- begin
100
- input.to_h
101
- rescue
102
- begin
103
- # Handle ActionController::Parameters:
104
- input.to_unsafe_h
105
- rescue
106
- # We're not sure it'll act like a hash, so reject it:
107
- result.add_problem(INVALID_OBJECT_MESSAGE % { object: JSON.generate(input, quirks_mode: true) })
108
- return result
109
- end
110
- end
111
-
112
- visible_arguments_map = warden.arguments(self).reduce({}) { |m, f| m[f.name] = f; m}
113
-
114
- # Items in the input that are unexpected
115
- input.each do |name, value|
116
- if visible_arguments_map[name].nil?
117
- result.add_problem("Field is not defined on #{self.graphql_name}", [name])
118
- end
119
- end
120
-
121
- # Items in the input that are expected, but have invalid values
122
- visible_arguments_map.map do |name, field|
123
- field_result = field.type.validate_input(input[name], ctx)
124
- if !field_result.valid?
125
- result.merge_result!(name, field_result)
126
- end
127
- end
128
-
129
- result
130
- end
131
- end
132
- end
@@ -1,2 +0,0 @@
1
- # frozen_string_literal: true
2
- GraphQL::INT_TYPE = GraphQL::Types::Int.graphql_definition