graphql 2.6.11 → 2.6.13

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.
Files changed (382) hide show
  1. checksums.yaml +4 -4
  2. data/.rdoc_options +4 -0
  3. data/lib/generators/graphql/core.rb +1 -0
  4. data/lib/generators/graphql/detailed_trace_generator.rb +1 -0
  5. data/lib/generators/graphql/enum_generator.rb +1 -0
  6. data/lib/generators/graphql/field_extractor.rb +1 -0
  7. data/lib/generators/graphql/input_generator.rb +1 -0
  8. data/lib/generators/graphql/install/mutation_root_generator.rb +1 -0
  9. data/lib/generators/graphql/install_generator.rb +1 -0
  10. data/lib/generators/graphql/interface_generator.rb +1 -0
  11. data/lib/generators/graphql/loader_generator.rb +8 -2
  12. data/lib/generators/graphql/mutation_create_generator.rb +8 -2
  13. data/lib/generators/graphql/mutation_delete_generator.rb +8 -2
  14. data/lib/generators/graphql/mutation_generator.rb +8 -2
  15. data/lib/generators/graphql/mutation_update_generator.rb +8 -2
  16. data/lib/generators/graphql/object_generator.rb +1 -0
  17. data/lib/generators/graphql/orm_mutations_base.rb +8 -2
  18. data/lib/generators/graphql/relay.rb +1 -0
  19. data/lib/generators/graphql/relay_generator.rb +1 -0
  20. data/lib/generators/graphql/scalar_generator.rb +1 -0
  21. data/lib/generators/graphql/type_generator.rb +38 -8
  22. data/lib/generators/graphql/union_generator.rb +1 -0
  23. data/lib/graphql/analysis/analyzer.rb +35 -9
  24. data/lib/graphql/analysis/field_usage.rb +1 -0
  25. data/lib/graphql/analysis/max_query_complexity.rb +2 -1
  26. data/lib/graphql/analysis/max_query_depth.rb +1 -0
  27. data/lib/graphql/analysis/query_complexity.rb +57 -20
  28. data/lib/graphql/analysis/query_depth.rb +17 -12
  29. data/lib/graphql/analysis/visitor.rb +79 -16
  30. data/lib/graphql/analysis.rb +23 -6
  31. data/lib/graphql/analysis_error.rb +1 -0
  32. data/lib/graphql/autoload.rb +30 -7
  33. data/lib/graphql/backtrace/table.rb +21 -5
  34. data/lib/graphql/backtrace/traced_error.rb +8 -3
  35. data/lib/graphql/backtrace.rb +14 -9
  36. data/lib/graphql/coercion_error.rb +1 -0
  37. data/lib/graphql/current.rb +44 -19
  38. data/lib/graphql/dashboard/application_controller.rb +1 -0
  39. data/lib/graphql/dashboard/detailed_traces.rb +1 -0
  40. data/lib/graphql/dashboard/installable.rb +1 -0
  41. data/lib/graphql/dashboard/landings_controller.rb +1 -0
  42. data/lib/graphql/dashboard/limiters.rb +1 -0
  43. data/lib/graphql/dashboard/operation_store.rb +1 -0
  44. data/lib/graphql/dashboard/statics_controller.rb +1 -0
  45. data/lib/graphql/dashboard/subscriptions.rb +1 -0
  46. data/lib/graphql/dashboard.rb +36 -22
  47. data/lib/graphql/dataloader/active_record_association_source.rb +1 -0
  48. data/lib/graphql/dataloader/active_record_source.rb +1 -0
  49. data/lib/graphql/dataloader/async_dataloader.rb +10 -7
  50. data/lib/graphql/dataloader/null_dataloader.rb +4 -3
  51. data/lib/graphql/dataloader/request.rb +8 -2
  52. data/lib/graphql/dataloader/request_all.rb +8 -2
  53. data/lib/graphql/dataloader/source.rb +127 -35
  54. data/lib/graphql/dataloader.rb +93 -42
  55. data/lib/graphql/date_encoding_error.rb +2 -1
  56. data/lib/graphql/dig.rb +12 -3
  57. data/lib/graphql/duration_encoding_error.rb +2 -1
  58. data/lib/graphql/execution/directive_checks.rb +8 -3
  59. data/lib/graphql/execution/errors.rb +20 -6
  60. data/lib/graphql/execution/field_resolve_step.rb +40 -13
  61. data/lib/graphql/execution/finalize.rb +12 -6
  62. data/lib/graphql/execution/input_values.rb +2 -1
  63. data/lib/graphql/execution/interpreter/argument_value.rb +17 -5
  64. data/lib/graphql/execution/interpreter/arguments.rb +24 -9
  65. data/lib/graphql/execution/interpreter/arguments_cache.rb +2 -1
  66. data/lib/graphql/execution/interpreter/execution_errors.rb +1 -0
  67. data/lib/graphql/execution/interpreter/handles_raw_value.rb +1 -0
  68. data/lib/graphql/execution/interpreter/resolve.rb +18 -8
  69. data/lib/graphql/execution/interpreter/runtime/graphql_result.rb +4 -1
  70. data/lib/graphql/execution/interpreter/runtime.rb +72 -25
  71. data/lib/graphql/execution/interpreter.rb +15 -6
  72. data/lib/graphql/execution/lazy/lazy_method_map.rb +21 -8
  73. data/lib/graphql/execution/lazy.rb +34 -10
  74. data/lib/graphql/execution/load_argument_step.rb +1 -0
  75. data/lib/graphql/execution/lookahead.rb +137 -54
  76. data/lib/graphql/execution/multiplex.rb +4 -4
  77. data/lib/graphql/execution/next.rb +7 -0
  78. data/lib/graphql/execution/prepare_object_step.rb +1 -0
  79. data/lib/graphql/execution/resolve_type_step.rb +2 -1
  80. data/lib/graphql/execution/runner.rb +9 -3
  81. data/lib/graphql/execution/selections_step.rb +3 -2
  82. data/lib/graphql/execution.rb +2 -2
  83. data/lib/graphql/execution_error.rb +19 -10
  84. data/lib/graphql/float_decoding_error.rb +1 -0
  85. data/lib/graphql/float_encoding_error.rb +7 -2
  86. data/lib/graphql/integer_decoding_error.rb +2 -1
  87. data/lib/graphql/integer_encoding_error.rb +8 -3
  88. data/lib/graphql/introspection/base_object.rb +3 -1
  89. data/lib/graphql/introspection/directive_location_enum.rb +1 -0
  90. data/lib/graphql/introspection/directive_type.rb +1 -0
  91. data/lib/graphql/introspection/dynamic_fields.rb +1 -0
  92. data/lib/graphql/introspection/entry_points.rb +1 -0
  93. data/lib/graphql/introspection/enum_value_type.rb +1 -0
  94. data/lib/graphql/introspection/field_type.rb +1 -0
  95. data/lib/graphql/introspection/input_value_type.rb +1 -0
  96. data/lib/graphql/introspection/introspection_query.rb +1 -0
  97. data/lib/graphql/introspection/schema_type.rb +1 -0
  98. data/lib/graphql/introspection/type_kind_enum.rb +1 -0
  99. data/lib/graphql/introspection/type_type.rb +1 -0
  100. data/lib/graphql/introspection.rb +1 -0
  101. data/lib/graphql/invalid_name_error.rb +1 -0
  102. data/lib/graphql/invalid_null_error.rb +19 -6
  103. data/lib/graphql/language/block_string.rb +2 -1
  104. data/lib/graphql/language/cache.rb +10 -4
  105. data/lib/graphql/language/comment.rb +1 -0
  106. data/lib/graphql/language/definition_slice.rb +1 -0
  107. data/lib/graphql/language/document_from_schema_definition.rb +9 -10
  108. data/lib/graphql/language/generation.rb +23 -9
  109. data/lib/graphql/language/lexer.rb +5 -0
  110. data/lib/graphql/language/nodes.rb +2094 -419
  111. data/lib/graphql/language/parser.rb +24 -17
  112. data/lib/graphql/language/printer.rb +31 -16
  113. data/lib/graphql/language/sanitized_printer.rb +16 -5
  114. data/lib/graphql/language/static_visitor.rb +19 -4
  115. data/lib/graphql/language/visitor.rb +51 -29
  116. data/lib/graphql/language.rb +13 -7
  117. data/lib/graphql/load_application_object_failed_error.rb +14 -5
  118. data/lib/graphql/name_validator.rb +1 -0
  119. data/lib/graphql/pagination/active_record_relation_connection.rb +1 -0
  120. data/lib/graphql/pagination/array_connection.rb +20 -6
  121. data/lib/graphql/pagination/connection.rb +178 -48
  122. data/lib/graphql/pagination/connections.rb +21 -14
  123. data/lib/graphql/pagination/mongoid_relation_connection.rb +1 -0
  124. data/lib/graphql/pagination/relation_connection.rb +123 -22
  125. data/lib/graphql/pagination/sequel_dataset_connection.rb +1 -0
  126. data/lib/graphql/pagination.rb +1 -0
  127. data/lib/graphql/parse_error.rb +1 -0
  128. data/lib/graphql/query/context/scoped_context.rb +2 -1
  129. data/lib/graphql/query/context.rb +106 -35
  130. data/lib/graphql/query/fingerprint.rb +15 -7
  131. data/lib/graphql/query/input_validation_result.rb +1 -0
  132. data/lib/graphql/query/null_context.rb +1 -0
  133. data/lib/graphql/query/partial.rb +28 -15
  134. data/lib/graphql/query/result.rb +15 -5
  135. data/lib/graphql/query/validation_pipeline.rb +16 -6
  136. data/lib/graphql/query/variable_validation_error.rb +1 -0
  137. data/lib/graphql/query/variables.rb +9 -2
  138. data/lib/graphql/query.rb +193 -49
  139. data/lib/graphql/railtie.rb +7 -3
  140. data/lib/graphql/rake_task/validate.rb +72 -17
  141. data/lib/graphql/rake_task.rb +55 -23
  142. data/lib/graphql/relay/range_add.rb +32 -21
  143. data/lib/graphql/relay.rb +1 -0
  144. data/lib/graphql/rubocop/graphql/base_cop.rb +1 -0
  145. data/lib/graphql/rubocop/graphql/default_null_true.rb +9 -6
  146. data/lib/graphql/rubocop/graphql/default_required_true.rb +9 -6
  147. data/lib/graphql/rubocop/graphql/field_type_in_block.rb +12 -8
  148. data/lib/graphql/rubocop/graphql/root_types_in_block.rb +9 -5
  149. data/lib/graphql/rubocop.rb +1 -0
  150. data/lib/graphql/runtime_error.rb +1 -0
  151. data/lib/graphql/runtime_type_error.rb +1 -0
  152. data/lib/graphql/schema/addition.rb +18 -6
  153. data/lib/graphql/schema/always_visible.rb +1 -0
  154. data/lib/graphql/schema/argument.rb +265 -42
  155. data/lib/graphql/schema/base_64_encoder.rb +2 -2
  156. data/lib/graphql/schema/build_from_definition/resolve_map/default_resolve.rb +1 -0
  157. data/lib/graphql/schema/build_from_definition/resolve_map.rb +2 -2
  158. data/lib/graphql/schema/build_from_definition.rb +94 -27
  159. data/lib/graphql/schema/built_in_types.rb +1 -0
  160. data/lib/graphql/schema/directive/deprecated.rb +1 -0
  161. data/lib/graphql/schema/directive/feature.rb +39 -22
  162. data/lib/graphql/schema/directive/flagged.rb +6 -1
  163. data/lib/graphql/schema/directive/include.rb +1 -0
  164. data/lib/graphql/schema/directive/one_of.rb +1 -0
  165. data/lib/graphql/schema/directive/skip.rb +1 -0
  166. data/lib/graphql/schema/directive/specified_by.rb +1 -0
  167. data/lib/graphql/schema/directive/transform.rb +17 -8
  168. data/lib/graphql/schema/directive.rb +12 -7
  169. data/lib/graphql/schema/enum.rb +99 -38
  170. data/lib/graphql/schema/enum_value.rb +21 -13
  171. data/lib/graphql/schema/field/connection_extension.rb +10 -2
  172. data/lib/graphql/schema/field/scope_extension.rb +1 -0
  173. data/lib/graphql/schema/field.rb +621 -109
  174. data/lib/graphql/schema/field_extension.rb +89 -34
  175. data/lib/graphql/schema/find_inherited_value.rb +5 -3
  176. data/lib/graphql/schema/finder.rb +22 -8
  177. data/lib/graphql/schema/has_single_input_argument.rb +39 -6
  178. data/lib/graphql/schema/input_object.rb +40 -13
  179. data/lib/graphql/schema/interface.rb +33 -17
  180. data/lib/graphql/schema/introspection_system.rb +7 -3
  181. data/lib/graphql/schema/late_bound_type.rb +2 -2
  182. data/lib/graphql/schema/list.rb +15 -4
  183. data/lib/graphql/schema/loader.rb +23 -12
  184. data/lib/graphql/schema/member/base_dsl_methods.rb +58 -12
  185. data/lib/graphql/schema/member/build_type.rb +16 -5
  186. data/lib/graphql/schema/member/graphql_type_names.rb +10 -6
  187. data/lib/graphql/schema/member/has_arguments.rb +115 -48
  188. data/lib/graphql/schema/member/has_ast_node.rb +1 -0
  189. data/lib/graphql/schema/member/has_authorization.rb +5 -0
  190. data/lib/graphql/schema/member/has_dataloader.rb +91 -34
  191. data/lib/graphql/schema/member/has_deprecation_reason.rb +15 -2
  192. data/lib/graphql/schema/member/has_directives.rb +38 -10
  193. data/lib/graphql/schema/member/has_fields.rb +151 -70
  194. data/lib/graphql/schema/member/has_interfaces.rb +10 -2
  195. data/lib/graphql/schema/member/has_path.rb +14 -5
  196. data/lib/graphql/schema/member/has_unresolved_type_error.rb +1 -0
  197. data/lib/graphql/schema/member/has_validators.rb +19 -4
  198. data/lib/graphql/schema/member/relay_shortcuts.rb +10 -2
  199. data/lib/graphql/schema/member/scoped.rb +14 -3
  200. data/lib/graphql/schema/member/type_system_helpers.rb +36 -6
  201. data/lib/graphql/schema/member/validates_input.rb +1 -0
  202. data/lib/graphql/schema/member.rb +9 -2
  203. data/lib/graphql/schema/mutation.rb +50 -46
  204. data/lib/graphql/schema/non_null.rb +21 -5
  205. data/lib/graphql/schema/object.rb +33 -12
  206. data/lib/graphql/schema/printer.rb +52 -31
  207. data/lib/graphql/schema/ractor_shareable.rb +6 -2
  208. data/lib/graphql/schema/relay_classic_mutation.rb +3 -3
  209. data/lib/graphql/schema/resolver/has_payload_type.rb +29 -7
  210. data/lib/graphql/schema/resolver.rb +156 -45
  211. data/lib/graphql/schema/scalar.rb +1 -0
  212. data/lib/graphql/schema/subscription.rb +67 -28
  213. data/lib/graphql/schema/timeout.rb +65 -25
  214. data/lib/graphql/schema/type_expression.rb +14 -5
  215. data/lib/graphql/schema/type_membership.rb +29 -10
  216. data/lib/graphql/schema/union.rb +4 -2
  217. data/lib/graphql/schema/unique_within_type.rb +24 -5
  218. data/lib/graphql/schema/validator/all_validator.rb +17 -9
  219. data/lib/graphql/schema/validator/allow_blank_validator.rb +8 -2
  220. data/lib/graphql/schema/validator/allow_null_validator.rb +8 -2
  221. data/lib/graphql/schema/validator/exclusion_validator.rb +14 -5
  222. data/lib/graphql/schema/validator/format_validator.rb +21 -10
  223. data/lib/graphql/schema/validator/inclusion_validator.rb +15 -6
  224. data/lib/graphql/schema/validator/length_validator.rb +23 -12
  225. data/lib/graphql/schema/validator/numericality_validator.rb +29 -16
  226. data/lib/graphql/schema/validator/required_validator.rb +45 -31
  227. data/lib/graphql/schema/validator.rb +89 -25
  228. data/lib/graphql/schema/visibility/migration.rb +14 -7
  229. data/lib/graphql/schema/visibility/profile.rb +65 -20
  230. data/lib/graphql/schema/visibility/visit.rb +12 -10
  231. data/lib/graphql/schema/visibility.rb +24 -20
  232. data/lib/graphql/schema/warden.rb +117 -31
  233. data/lib/graphql/schema/wrapper.rb +4 -1
  234. data/lib/graphql/schema.rb +1046 -300
  235. data/lib/graphql/static_validation/all_rules.rb +2 -1
  236. data/lib/graphql/static_validation/base_visitor.rb +59 -9
  237. data/lib/graphql/static_validation/definition_dependencies.rb +27 -7
  238. data/lib/graphql/static_validation/error.rb +3 -0
  239. data/lib/graphql/static_validation/interpreter_visitor.rb +1 -0
  240. data/lib/graphql/static_validation/literal_validator.rb +1 -0
  241. data/lib/graphql/static_validation/rules/argument_literals_are_compatible.rb +4 -0
  242. data/lib/graphql/static_validation/rules/argument_literals_are_compatible_error.rb +1 -0
  243. data/lib/graphql/static_validation/rules/argument_names_are_unique.rb +3 -0
  244. data/lib/graphql/static_validation/rules/argument_names_are_unique_error.rb +1 -0
  245. data/lib/graphql/static_validation/rules/arguments_are_defined.rb +3 -0
  246. data/lib/graphql/static_validation/rules/arguments_are_defined_error.rb +1 -0
  247. data/lib/graphql/static_validation/rules/directives_are_defined.rb +3 -0
  248. data/lib/graphql/static_validation/rules/directives_are_defined_error.rb +1 -0
  249. data/lib/graphql/static_validation/rules/directives_are_in_valid_locations.rb +3 -0
  250. data/lib/graphql/static_validation/rules/directives_are_in_valid_locations_error.rb +1 -0
  251. data/lib/graphql/static_validation/rules/fields_are_defined_on_type.rb +3 -0
  252. data/lib/graphql/static_validation/rules/fields_are_defined_on_type_error.rb +1 -0
  253. data/lib/graphql/static_validation/rules/fields_have_appropriate_selections.rb +9 -1
  254. data/lib/graphql/static_validation/rules/fields_have_appropriate_selections_error.rb +1 -0
  255. data/lib/graphql/static_validation/rules/fields_will_merge.rb +295 -134
  256. data/lib/graphql/static_validation/rules/fields_will_merge_error.rb +14 -2
  257. data/lib/graphql/static_validation/rules/fragment_names_are_unique.rb +3 -0
  258. data/lib/graphql/static_validation/rules/fragment_names_are_unique_error.rb +1 -0
  259. data/lib/graphql/static_validation/rules/fragment_spreads_are_possible.rb +3 -0
  260. data/lib/graphql/static_validation/rules/fragment_spreads_are_possible_error.rb +1 -0
  261. data/lib/graphql/static_validation/rules/fragment_types_exist.rb +3 -0
  262. data/lib/graphql/static_validation/rules/fragment_types_exist_error.rb +1 -0
  263. data/lib/graphql/static_validation/rules/fragments_are_finite.rb +3 -0
  264. data/lib/graphql/static_validation/rules/fragments_are_finite_error.rb +1 -0
  265. data/lib/graphql/static_validation/rules/fragments_are_named.rb +3 -0
  266. data/lib/graphql/static_validation/rules/fragments_are_named_error.rb +1 -0
  267. data/lib/graphql/static_validation/rules/fragments_are_on_composite_types.rb +3 -0
  268. data/lib/graphql/static_validation/rules/fragments_are_on_composite_types_error.rb +1 -0
  269. data/lib/graphql/static_validation/rules/fragments_are_used.rb +3 -0
  270. data/lib/graphql/static_validation/rules/fragments_are_used_error.rb +1 -0
  271. data/lib/graphql/static_validation/rules/input_object_names_are_unique.rb +3 -0
  272. data/lib/graphql/static_validation/rules/input_object_names_are_unique_error.rb +1 -0
  273. data/lib/graphql/static_validation/rules/mutation_root_exists.rb +3 -0
  274. data/lib/graphql/static_validation/rules/mutation_root_exists_error.rb +1 -0
  275. data/lib/graphql/static_validation/rules/no_definitions_are_present.rb +3 -0
  276. data/lib/graphql/static_validation/rules/no_definitions_are_present_error.rb +1 -0
  277. data/lib/graphql/static_validation/rules/not_single_subscription_error.rb +1 -0
  278. data/lib/graphql/static_validation/rules/one_of_input_objects_are_valid.rb +4 -0
  279. data/lib/graphql/static_validation/rules/one_of_input_objects_are_valid_error.rb +1 -0
  280. data/lib/graphql/static_validation/rules/operation_names_are_valid.rb +3 -0
  281. data/lib/graphql/static_validation/rules/operation_names_are_valid_error.rb +1 -0
  282. data/lib/graphql/static_validation/rules/query_root_exists.rb +3 -0
  283. data/lib/graphql/static_validation/rules/query_root_exists_error.rb +1 -0
  284. data/lib/graphql/static_validation/rules/required_arguments_are_present.rb +4 -1
  285. data/lib/graphql/static_validation/rules/required_arguments_are_present_error.rb +1 -0
  286. data/lib/graphql/static_validation/rules/required_input_object_attributes_are_present.rb +4 -0
  287. data/lib/graphql/static_validation/rules/required_input_object_attributes_are_present_error.rb +1 -0
  288. data/lib/graphql/static_validation/rules/subscription_root_exists_and_single_subscription_selection.rb +43 -5
  289. data/lib/graphql/static_validation/rules/subscription_root_exists_error.rb +1 -0
  290. data/lib/graphql/static_validation/rules/unique_directives_per_location.rb +3 -0
  291. data/lib/graphql/static_validation/rules/unique_directives_per_location_error.rb +1 -0
  292. data/lib/graphql/static_validation/rules/variable_default_values_are_correctly_typed.rb +3 -0
  293. data/lib/graphql/static_validation/rules/variable_default_values_are_correctly_typed_error.rb +1 -0
  294. data/lib/graphql/static_validation/rules/variable_names_are_unique.rb +3 -0
  295. data/lib/graphql/static_validation/rules/variable_names_are_unique_error.rb +1 -0
  296. data/lib/graphql/static_validation/rules/variable_usages_are_allowed.rb +207 -51
  297. data/lib/graphql/static_validation/rules/variable_usages_are_allowed_error.rb +1 -0
  298. data/lib/graphql/static_validation/rules/variables_are_input_types.rb +3 -0
  299. data/lib/graphql/static_validation/rules/variables_are_input_types_error.rb +1 -0
  300. data/lib/graphql/static_validation/rules/variables_are_used_and_defined.rb +6 -3
  301. data/lib/graphql/static_validation/rules/variables_are_used_and_defined_error.rb +1 -0
  302. data/lib/graphql/static_validation/validation_context.rb +3 -2
  303. data/lib/graphql/static_validation/validation_timeout_error.rb +1 -0
  304. data/lib/graphql/static_validation/validator.rb +41 -16
  305. data/lib/graphql/static_validation.rb +1 -0
  306. data/lib/graphql/string_encoding_error.rb +1 -0
  307. data/lib/graphql/subscriptions/action_cable_subscriptions.rb +85 -65
  308. data/lib/graphql/subscriptions/broadcast_analyzer.rb +10 -4
  309. data/lib/graphql/subscriptions/default_subscription_resolve_extension.rb +1 -0
  310. data/lib/graphql/subscriptions/event.rb +25 -6
  311. data/lib/graphql/subscriptions/serialize.rb +58 -19
  312. data/lib/graphql/subscriptions.rb +172 -46
  313. data/lib/graphql/testing/helpers.rb +17 -4
  314. data/lib/graphql/testing/mock_action_cable.rb +55 -33
  315. data/lib/graphql/testing.rb +1 -0
  316. data/lib/graphql/tracing/active_support_notifications_trace.rb +17 -9
  317. data/lib/graphql/tracing/active_support_notifications_tracing.rb +2 -1
  318. data/lib/graphql/tracing/appoptics_trace.rb +2 -1
  319. data/lib/graphql/tracing/appoptics_tracing.rb +2 -1
  320. data/lib/graphql/tracing/appsignal_trace.rb +16 -7
  321. data/lib/graphql/tracing/appsignal_tracing.rb +7 -3
  322. data/lib/graphql/tracing/call_legacy_tracers.rb +1 -0
  323. data/lib/graphql/tracing/data_dog_trace.rb +17 -6
  324. data/lib/graphql/tracing/data_dog_tracing.rb +10 -3
  325. data/lib/graphql/tracing/detailed_trace/active_record_backend.rb +1 -0
  326. data/lib/graphql/tracing/detailed_trace/memory_backend.rb +1 -0
  327. data/lib/graphql/tracing/detailed_trace/redis_backend.rb +1 -0
  328. data/lib/graphql/tracing/detailed_trace.rb +105 -42
  329. data/lib/graphql/tracing/legacy_hooks_trace.rb +5 -0
  330. data/lib/graphql/tracing/legacy_trace.rb +1 -0
  331. data/lib/graphql/tracing/monitor_trace.rb +17 -11
  332. data/lib/graphql/tracing/new_relic_trace.rb +17 -8
  333. data/lib/graphql/tracing/new_relic_tracing.rb +7 -3
  334. data/lib/graphql/tracing/notifications_trace.rb +11 -8
  335. data/lib/graphql/tracing/notifications_tracing.rb +23 -7
  336. data/lib/graphql/tracing/null_trace.rb +1 -0
  337. data/lib/graphql/tracing/perfetto_trace/trace_pb.rb +1 -0
  338. data/lib/graphql/tracing/perfetto_trace.rb +41 -19
  339. data/lib/graphql/tracing/platform_trace.rb +3 -1
  340. data/lib/graphql/tracing/platform_tracing.rb +16 -7
  341. data/lib/graphql/tracing/prometheus_trace/graphql_collector.rb +1 -0
  342. data/lib/graphql/tracing/prometheus_trace.rb +22 -13
  343. data/lib/graphql/tracing/prometheus_tracing.rb +1 -0
  344. data/lib/graphql/tracing/scout_trace.rb +10 -4
  345. data/lib/graphql/tracing/scout_tracing.rb +7 -3
  346. data/lib/graphql/tracing/sentry_trace.rb +12 -5
  347. data/lib/graphql/tracing/statsd_trace.rb +12 -6
  348. data/lib/graphql/tracing/statsd_tracing.rb +7 -1
  349. data/lib/graphql/tracing/trace.rb +231 -58
  350. data/lib/graphql/tracing.rb +25 -9
  351. data/lib/graphql/type_kinds.rb +2 -1
  352. data/lib/graphql/types/big_int.rb +1 -0
  353. data/lib/graphql/types/boolean.rb +1 -0
  354. data/lib/graphql/types/float.rb +1 -0
  355. data/lib/graphql/types/id.rb +1 -0
  356. data/lib/graphql/types/int.rb +2 -1
  357. data/lib/graphql/types/iso_8601_date.rb +21 -4
  358. data/lib/graphql/types/iso_8601_date_time.rb +33 -6
  359. data/lib/graphql/types/iso_8601_duration.rb +42 -9
  360. data/lib/graphql/types/json.rb +1 -0
  361. data/lib/graphql/types/relay/base_connection.rb +38 -32
  362. data/lib/graphql/types/relay/base_edge.rb +15 -9
  363. data/lib/graphql/types/relay/connection_behaviors.rb +19 -3
  364. data/lib/graphql/types/relay/edge_behaviors.rb +17 -4
  365. data/lib/graphql/types/relay/has_node_field.rb +6 -1
  366. data/lib/graphql/types/relay/has_nodes_field.rb +6 -1
  367. data/lib/graphql/types/relay/node.rb +1 -0
  368. data/lib/graphql/types/relay/node_behaviors.rb +5 -1
  369. data/lib/graphql/types/relay/page_info.rb +1 -0
  370. data/lib/graphql/types/relay/page_info_behaviors.rb +1 -0
  371. data/lib/graphql/types/relay.rb +4 -3
  372. data/lib/graphql/types/string.rb +1 -0
  373. data/lib/graphql/types.rb +1 -0
  374. data/lib/graphql/unauthorized_enum_value_error.rb +4 -1
  375. data/lib/graphql/unauthorized_error.rb +11 -4
  376. data/lib/graphql/unauthorized_field_error.rb +4 -1
  377. data/lib/graphql/unresolved_type_error.rb +16 -5
  378. data/lib/graphql/version.rb +2 -1
  379. data/lib/graphql.rb +37 -9
  380. data/readme.md +1 -1
  381. metadata +89 -5
  382. data/.yardopts +0 -5
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+ # typed: true
2
3
  require "securerandom"
3
4
  require "graphql/subscriptions/broadcast_analyzer"
4
5
  require "graphql/subscriptions/event"
@@ -21,7 +22,7 @@ module GraphQL
21
22
  class SubscriptionScopeMissingError < GraphQL::Error
22
23
  end
23
24
 
24
- # @see {Subscriptions#initialize} for options, concrete implementations may add options.
25
+ # See [GraphQL::Subscriptions](rdoc-ref:GraphQL::Subscriptions) for the base options; concrete implementations may add options.
25
26
  def self.use(defn, options = {})
26
27
  schema = defn.is_a?(Class) ? defn : defn.target
27
28
 
@@ -35,8 +36,13 @@ module GraphQL
35
36
  nil
36
37
  end
37
38
 
38
- # @param schema [Class] the GraphQL schema this manager belongs to
39
- # @param validate_update [Boolean] If false, then validation is skipped when executing updates
39
+ # **Parameters**
40
+ #
41
+ # - `schema` (`Class`) — the GraphQL schema this manager belongs to
42
+ # - `validate_update` (`Boolean`) — If false, then validation is skipped when executing updates
43
+ #
44
+ # :call-seq:
45
+ # initialize(Class schema:, bool validate_update:, broadcast:, default_broadcastable:, **rest)
40
46
  def initialize(schema:, validate_update: true, broadcast: false, default_broadcastable: false, **rest)
41
47
  if broadcast
42
48
  schema.query_analyzer(Subscriptions::BroadcastAnalyzer)
@@ -46,17 +52,28 @@ module GraphQL
46
52
  @validate_update = validate_update
47
53
  end
48
54
 
49
- # @return [Boolean] Used when fields don't have `broadcastable:` explicitly set
55
+ # **Returns**
56
+ #
57
+ # - `Boolean` — Used when fields don't have `broadcastable:` explicitly set
50
58
  attr_reader :default_broadcastable
51
59
 
52
60
  # Fetch subscriptions matching this field + arguments pair
53
61
  # And pass them off to the queue.
54
- # @param event_name [String]
55
- # @param args [Hash<String, Symbol => Object]
56
- # @param object [Object]
57
- # @param scope [Symbol, String]
58
- # @param context [Hash]
59
- # @return [void]
62
+ #
63
+ # **Parameters**
64
+ #
65
+ # - `event_name` (`String`)
66
+ # - `args` (`Hash<String, Symbol => Object>`) — Arguments passed to the subscription resolver
67
+ # - `object` (`Object`)
68
+ # - `scope` (`Symbol, String`)
69
+ # - `context` (`Hash`)
70
+ #
71
+ # **Returns**
72
+ #
73
+ # - `void`
74
+ #
75
+ # :call-seq:
76
+ # trigger(String event_name, Hash[String | Symbol, Object] args, Object object, Symbol | String scope:, Hash context:) -> void
60
77
  def trigger(event_name, args, object, scope: nil, context: {})
61
78
  # Make something as context-like as possible, even though there isn't a current query:
62
79
  dummy_query = @schema.query_class.new(@schema, "{ __typename }", validate: false, context: context)
@@ -97,10 +114,18 @@ module GraphQL
97
114
  #
98
115
  # Load `subscription_id`'s GraphQL data, re-evaluate the query and return the result.
99
116
  #
100
- # @param subscription_id [String]
101
- # @param event [GraphQL::Subscriptions::Event] The event which was triggered
102
- # @param object [Object] The value for the subscription field
103
- # @return [GraphQL::Query::Result]
117
+ # **Parameters**
118
+ #
119
+ # - `subscription_id` (`String`)
120
+ # - `event` (`GraphQL::Subscriptions::Event`) — The event which was triggered
121
+ # - `object` (`Object`) — The value for the subscription field
122
+ #
123
+ # **Returns**
124
+ #
125
+ # - `GraphQL::Query::Result`
126
+ #
127
+ # :call-seq:
128
+ # execute_update(String subscription_id, GraphQL::Subscriptions::Event event, Object object) -> GraphQL::Query::Result
104
129
  def execute_update(subscription_id, event, object)
105
130
  # Lookup the saved data for this subscription
106
131
  query_data = read_subscription(subscription_id)
@@ -146,15 +171,26 @@ module GraphQL
146
171
  # Define this method to customize whether to validate
147
172
  # this subscription when executing an update.
148
173
  #
149
- # @return [Boolean] defaults to `true`, or false if `validate: false` is provided.
174
+ # **Returns**
175
+ #
176
+ # - `Boolean` — defaults to `true`, or false if `validate: false` is provided.
177
+ #
178
+ # :call-seq:
179
+ # validate_update?(query:, context:, root_value:, subscription_topic:, operation_name:, variables:) -> bool
150
180
  def validate_update?(query:, context:, root_value:, subscription_topic:, operation_name:, variables:)
151
181
  @validate_update
152
182
  end
153
183
 
154
184
  # Run the update query for this subscription and deliver it
155
- # @see {#execute_update}
156
- # @see {#deliver}
157
- # @return [void]
185
+ # See [execute_update](rdoc-ref:#execute_update)
186
+ # See [deliver](rdoc-ref:#deliver)
187
+ #
188
+ # **Returns**
189
+ #
190
+ # - `void`
191
+ #
192
+ # :call-seq:
193
+ # execute(subscription_id, event, object) -> void
158
194
  def execute(subscription_id, event, object)
159
195
  res = execute_update(subscription_id, event, object)
160
196
  if !res.nil?
@@ -171,48 +207,98 @@ module GraphQL
171
207
 
172
208
  # Event `event` occurred on `object`,
173
209
  # Update all subscribers.
174
- # @param event [Subscriptions::Event]
175
- # @param object [Object]
176
- # @return [void]
210
+ #
211
+ # **Parameters**
212
+ #
213
+ # - `event` (`Subscriptions::Event`)
214
+ # - `object` (`Object`)
215
+ #
216
+ # **Returns**
217
+ #
218
+ # - `void`
219
+ #
220
+ # :call-seq:
221
+ # execute_all(Subscriptions::Event event, Object object) -> void
177
222
  def execute_all(event, object)
178
223
  raise GraphQL::RequiredImplementationMissingError
179
224
  end
180
225
 
181
226
  # The system wants to send an update to this subscription.
182
227
  # Read its data and return it.
183
- # @param subscription_id [String]
184
- # @return [Hash] Containing required keys
228
+ #
229
+ # **Parameters**
230
+ #
231
+ # - `subscription_id` (`String`)
232
+ #
233
+ # **Returns**
234
+ #
235
+ # - `Hash` — Containing required keys
236
+ #
237
+ # :call-seq:
238
+ # read_subscription(String subscription_id) -> Hash
185
239
  def read_subscription(subscription_id)
186
240
  raise GraphQL::RequiredImplementationMissingError
187
241
  end
188
242
 
189
243
  # A subscription query was re-evaluated, returning `result`.
190
244
  # The result should be send to `subscription_id`.
191
- # @param subscription_id [String]
192
- # @param result [Hash]
193
- # @return [void]
245
+ #
246
+ # **Parameters**
247
+ #
248
+ # - `subscription_id` (`String`)
249
+ # - `result` (`Hash`)
250
+ #
251
+ # **Returns**
252
+ #
253
+ # - `void`
254
+ #
255
+ # :call-seq:
256
+ # deliver(String subscription_id, Hash result) -> void
194
257
  def deliver(subscription_id, result)
195
258
  raise GraphQL::RequiredImplementationMissingError
196
259
  end
197
260
 
198
261
  # `query` was executed and found subscriptions to `events`.
199
262
  # Update the database to reflect this new state.
200
- # @param query [GraphQL::Query]
201
- # @param events [Array<GraphQL::Subscriptions::Event>]
202
- # @return [void]
263
+ #
264
+ # **Parameters**
265
+ #
266
+ # - `query` (`GraphQL::Query`)
267
+ # - `events` (`Array<GraphQL::Subscriptions::Event>`)
268
+ #
269
+ # **Returns**
270
+ #
271
+ # - `void`
272
+ #
273
+ # :call-seq:
274
+ # write_subscription(GraphQL::Query query, Array[GraphQL::Subscriptions::Event] events) -> void
203
275
  def write_subscription(query, events)
204
276
  raise GraphQL::RequiredImplementationMissingError
205
277
  end
206
278
 
207
279
  # A subscription was terminated server-side.
208
280
  # Clean up the database.
209
- # @param subscription_id [String]
210
- # @return void.
281
+ #
282
+ # **Parameters**
283
+ #
284
+ # - `subscription_id` (`String`)
285
+ #
286
+ # **Returns**
287
+ #
288
+ # - `Object` — void.
289
+ #
290
+ # :call-seq:
291
+ # delete_subscription(String subscription_id) -> Object
211
292
  def delete_subscription(subscription_id)
212
293
  raise GraphQL::RequiredImplementationMissingError
213
294
  end
214
295
 
215
- # @return [String] A new unique identifier for a subscription
296
+ # **Returns**
297
+ #
298
+ # - `String` — A new unique identifier for a subscription
299
+ #
300
+ # :call-seq:
301
+ # build_id() -> String
216
302
  def build_id
217
303
  SecureRandom.uuid
218
304
  end
@@ -223,13 +309,26 @@ module GraphQL
223
309
  # By default, it converts the identifier to camelcase.
224
310
  # Override this in a subclass to change the transformation.
225
311
  #
226
- # @param event_or_arg_name [String, Symbol]
227
- # @return [String]
312
+ # **Parameters**
313
+ #
314
+ # - `event_or_arg_name` (`String, Symbol`)
315
+ #
316
+ # **Returns**
317
+ #
318
+ # - `String`
319
+ #
320
+ # :call-seq:
321
+ # normalize_name(String | Symbol event_or_arg_name) -> String
228
322
  def normalize_name(event_or_arg_name)
229
323
  Schema::Member::BuildType.camelize(event_or_arg_name.to_s)
230
324
  end
231
325
 
232
- # @return [Boolean] if true, then a query like this one would be broadcasted
326
+ # **Returns**
327
+ #
328
+ # - `Boolean` — if true, then a query like this one would be broadcasted
329
+ #
330
+ # :call-seq:
331
+ # broadcastable?(query_str, **query_options) -> bool
233
332
  def broadcastable?(query_str, **query_options)
234
333
  query = @schema.query_class.new(@schema, query_str, **query_options)
235
334
  if !query.valid?
@@ -240,8 +339,17 @@ module GraphQL
240
339
  end
241
340
 
242
341
  # Called during execution when a new `subscription ...` operation is received
243
- # @param query [GraphQL::Query]
244
- # @return [void]
342
+ #
343
+ # **Parameters**
344
+ #
345
+ # - `query` (`GraphQL::Query`)
346
+ #
347
+ # **Returns**
348
+ #
349
+ # - `void`
350
+ #
351
+ # :call-seq:
352
+ # initialize_subscriptions(GraphQL::Query query) -> void
245
353
  def initialize_subscriptions(query)
246
354
  subs_namespace = query.context.namespace(:subscriptions)
247
355
  subs_namespace[:events] = []
@@ -250,8 +358,17 @@ module GraphQL
250
358
  end
251
359
 
252
360
  # Called during execution when a subscription operation has finished
253
- # @param query [GraphQL::Query]
254
- # @return [void]
361
+ #
362
+ # **Parameters**
363
+ #
364
+ # - `query` (`GraphQL::Query`)
365
+ #
366
+ # **Returns**
367
+ #
368
+ # - `void`
369
+ #
370
+ # :call-seq:
371
+ # finish_subscriptions(GraphQL::Query query) -> void
255
372
  def finish_subscriptions(query)
256
373
  if (events = query.context.namespace(:subscriptions)[:events]) && !events.empty?
257
374
  write_subscription(query, events)
@@ -278,19 +395,30 @@ module GraphQL
278
395
 
279
396
  # Recursively normalize `args` as belonging to `arg_owner`:
280
397
  # - convert symbols to strings,
281
- # - if needed, camelize the string (using {#normalize_name})
282
- # @param arg_owner [GraphQL::Field, GraphQL::BaseType]
283
- # @param args [Hash, Array, Any] some GraphQL input value to coerce as `arg_owner`
284
- # @return [Any] normalized arguments value
398
+ # - if needed, camelize the string (using [normalize name](rdoc-ref:#normalize_name))
399
+ #
400
+ # **Parameters**
401
+ #
402
+ # - `arg_owner` (`GraphQL::Field, GraphQL::BaseType`)
403
+ # - `args` (`Hash, Array, Any`) — some GraphQL input value to coerce as `arg_owner`
404
+ #
405
+ # **Returns**
406
+ #
407
+ # - `Any` — normalized arguments value
408
+ #
409
+ # :call-seq:
410
+ # normalize_arguments(event_name, GraphQL::Field | GraphQL::BaseType arg_owner, Hash | Array | Any args, context) -> Any
285
411
  def normalize_arguments(event_name, arg_owner, args, context)
286
412
  case arg_owner
287
413
  when GraphQL::Schema::Field, Class
288
414
  return args if args.nil?
289
415
 
416
+ arg_owner = arg_owner #: as GraphQL::Schema::Field | GraphQL::Schema::Member::type_definition
290
417
  if arg_owner.is_a?(Class) && !arg_owner.kind.input_object?
291
418
  # it's a type, but not an input object
292
419
  return args
293
420
  end
421
+ arg_owner = arg_owner #: as GraphQL::Schema::Field | singleton(GraphQL::Schema::InputObject)
294
422
  normalized_args = {}
295
423
  missing_arg_names = []
296
424
  args.each do |k, v|
@@ -329,10 +457,8 @@ module GraphQL
329
457
  if !missing_arg_names.empty?
330
458
  arg_owner_name = if arg_owner.is_a?(GraphQL::Schema::Field)
331
459
  arg_owner.path
332
- elsif arg_owner.is_a?(Class)
333
- arg_owner.graphql_name
334
460
  else
335
- arg_owner.to_s
461
+ arg_owner.graphql_name
336
462
  end
337
463
  raise InvalidTriggerError, "Can't trigger Subscription.#{event_name}, received undefined arguments: #{missing_arg_names.join(", ")}. (Should match arguments of #{arg_owner_name}.)"
338
464
  end
@@ -1,9 +1,20 @@
1
1
  # frozen_string_literal: true
2
+ # typed: true
2
3
  module GraphQL
3
4
  module Testing
5
+ #--
6
+ # @requires_ancestor: Kernel
4
7
  module Helpers
5
- # @param schema_class [Class<GraphQL::Schema>]
6
- # @return [Module] A helpers module which always uses the given schema
8
+ # **Parameters**
9
+ #
10
+ # - `schema_class` (`Class<GraphQL::Schema>`)
11
+ #
12
+ # **Returns**
13
+ #
14
+ # - `Module` — A helpers module which always uses the given schema
15
+ #
16
+ # :call-seq:
17
+ # for(Class[GraphQL::Schema] schema_class) -> Module
7
18
  def self.for(schema_class)
8
19
  SchemaHelpers.for(schema_class)
9
20
  end
@@ -40,6 +51,8 @@ module GraphQL
40
51
  end
41
52
 
42
53
  def run_graphql_field(schema, field_path, object, arguments: {}, context: {}, ast_node: nil, lookahead: nil, visibility_profile: nil)
54
+ ast_node = ast_node #: GraphQL::Language::Nodes::Field?
55
+ lookahead = lookahead #: GraphQL::Execution::Lookahead?
43
56
  type_name, *field_names = field_path.split(".")
44
57
  dummy_query = GraphQL::Query.new(schema, "{ __typename }", context: context, visibility_profile: visibility_profile)
45
58
  query_context = dummy_query.context
@@ -144,9 +157,9 @@ module GraphQL
144
157
  super(@@schema_class_for_helpers, field_path, object, arguments: arguments, context: context, visibility_profile: visibility_profile)
145
158
  end
146
159
 
147
- def with_resolution_context(*args, **kwargs, &block)
160
+ def with_resolution_context(**kwargs, &block)
148
161
  # schema will be added later
149
- super(nil, *args, **kwargs, &block)
162
+ super(nil, **kwargs, &block)
150
163
  end
151
164
 
152
165
  def self.for(schema_class)
@@ -1,49 +1,62 @@
1
1
  # frozen_string_literal: true
2
+ # typed: true
2
3
  module GraphQL
3
4
  module Testing
4
5
  # A stub implementation of ActionCable.
5
6
  # Any methods to support the mock backend have `mock` in the name.
6
7
  #
7
- # @example Configuring your schema to use MockActionCable in the test environment
8
- # class MySchema < GraphQL::Schema
9
- # # Use MockActionCable in test:
10
- # use GraphQL::Subscriptions::ActionCableSubscriptions,
11
- # action_cable: Rails.env.test? ? GraphQL::Testing::MockActionCable : ActionCable
12
- # end
8
+ # **Examples**
13
9
  #
14
- # @example Clearing old data before each test
15
- # setup do
16
- # GraphQL::Testing::MockActionCable.clear_mocks
17
- # end
10
+ # **Example: Configuring your schema to use MockActionCable in the test environment**
18
11
  #
19
- # @example Using MockActionCable in a test case
20
- # # Create a channel to use in the test, pass it to GraphQL
21
- # mock_channel = GraphQL::Testing::MockActionCable.get_mock_channel
22
- # ActionCableTestSchema.execute("subscription { newsFlash { text } }", context: { channel: mock_channel })
12
+ # ```ruby
13
+ # class MySchema < GraphQL::Schema
14
+ # # Use MockActionCable in test:
15
+ # use GraphQL::Subscriptions::ActionCableSubscriptions,
16
+ # action_cable: Rails.env.test? ? GraphQL::Testing::MockActionCable : ActionCable
17
+ # end
18
+ # ```
23
19
  #
24
- # # Trigger a subscription update
25
- # ActionCableTestSchema.subscriptions.trigger(:news_flash, {}, {text: "After yesterday's rain, someone stopped on Rio Road to help a box turtle across five lanes of traffic"})
20
+ # **Example: Clearing old data before each test**
26
21
  #
27
- # # Check messages on the channel
28
- # expected_msg = {
29
- # result: {
30
- # "data" => {
31
- # "newsFlash" => {
32
- # "text" => "After yesterday's rain, someone stopped on Rio Road to help a box turtle across five lanes of traffic"
33
- # }
34
- # }
35
- # },
36
- # more: true,
37
- # }
38
- # assert_equal [expected_msg], mock_channel.mock_broadcasted_messages
22
+ # ```ruby
23
+ # setup do
24
+ # GraphQL::Testing::MockActionCable.clear_mocks
25
+ # end
26
+ # ```
27
+ #
28
+ # **Example: Using MockActionCable in a test case**
29
+ #
30
+ # ```ruby
31
+ # # Create a channel to use in the test, pass it to GraphQL
32
+ # mock_channel = GraphQL::Testing::MockActionCable.get_mock_channel
33
+ # ActionCableTestSchema.execute("subscription { newsFlash { text } }", context: { channel: mock_channel })
39
34
  #
35
+ # # Trigger a subscription update
36
+ # ActionCableTestSchema.subscriptions.trigger(:news_flash, {}, {text: "After yesterday's rain, someone stopped on Rio Road to help a box turtle across five lanes of traffic"})
37
+ #
38
+ # # Check messages on the channel
39
+ # expected_msg = {
40
+ # result: {
41
+ # "data" => {
42
+ # "newsFlash" => {
43
+ # "text" => "After yesterday's rain, someone stopped on Rio Road to help a box turtle across five lanes of traffic"
44
+ # }
45
+ # }
46
+ # },
47
+ # more: true,
48
+ # }
49
+ # assert_equal [expected_msg], mock_channel.mock_broadcasted_messages
50
+ # ```
40
51
  class MockActionCable
41
52
  class MockChannel
42
53
  def initialize
43
54
  @mock_broadcasted_messages = []
44
55
  end
45
56
 
46
- # @return [Array<Hash>] Payloads "sent" to this channel by GraphQL-Ruby
57
+ # **Returns**
58
+ #
59
+ # - `Array<Hash>` — Payloads "sent" to this channel by GraphQL-Ruby
47
60
  attr_reader :mock_broadcasted_messages
48
61
 
49
62
  # Called by ActionCableSubscriptions. Implements a Rails API.
@@ -55,8 +68,7 @@ module GraphQL
55
68
  end
56
69
 
57
70
  # Used by mock code
58
- # @api private
59
- class MockStream
71
+ class MockStream # :nodoc:
60
72
  def initialize
61
73
  @mock_channels = {}
62
74
  end
@@ -96,12 +108,22 @@ module GraphQL
96
108
 
97
109
  # Use this as `context[:channel]` to simulate an ActionCable channel
98
110
  #
99
- # @return [GraphQL::Testing::MockActionCable::MockChannel]
111
+ # **Returns**
112
+ #
113
+ # - `GraphQL::Testing::MockActionCable::MockChannel`
114
+ #
115
+ # :call-seq:
116
+ # get_mock_channel() -> GraphQL::Testing::MockActionCable::MockChannel
100
117
  def get_mock_channel
101
118
  MockChannel.new
102
119
  end
103
120
 
104
- # @return [Array<String>] Streams that currently have subscribers
121
+ # **Returns**
122
+ #
123
+ # - `Array<String>` — Streams that currently have subscribers
124
+ #
125
+ # :call-seq:
126
+ # mock_stream_names() -> Array[String]
105
127
  def mock_stream_names
106
128
  @mock_streams.keys
107
129
  end
@@ -1,3 +1,4 @@
1
1
  # frozen_string_literal: true
2
+ # typed: true
2
3
  require "graphql/testing/helpers"
3
4
  require "graphql/testing/mock_action_cable"
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+ # typed: ignore
2
3
 
3
4
  require "graphql/tracing/notifications_trace"
4
5
 
@@ -6,17 +7,24 @@ module GraphQL
6
7
  module Tracing
7
8
  # This implementation forwards events to ActiveSupport::Notifications with a `graphql` suffix.
8
9
  #
9
- # @example Sending execution events to ActiveSupport::Notifications
10
- # class MySchema < GraphQL::Schema
11
- # trace_with(GraphQL::Tracing::ActiveSupportNotificationsTrace)
12
- # end
10
+ # **Examples**
13
11
  #
14
- # @example Subscribing to GraphQL events with ActiveSupport::Notifications
15
- # ActiveSupport::Notifications.subscribe(/graphql/) do |event|
16
- # pp event.name
17
- # pp event.payload
18
- # end
12
+ # **Example: Sending execution events to ActiveSupport::Notifications**
19
13
  #
14
+ # ```ruby
15
+ # class MySchema < GraphQL::Schema
16
+ # trace_with(GraphQL::Tracing::ActiveSupportNotificationsTrace)
17
+ # end
18
+ # ```
19
+ #
20
+ # **Example: Subscribing to GraphQL events with ActiveSupport::Notifications**
21
+ #
22
+ # ```ruby
23
+ # ActiveSupport::Notifications.subscribe(/graphql/) do |event|
24
+ # pp event.name
25
+ # pp event.payload
26
+ # end
27
+ # ```
20
28
  module ActiveSupportNotificationsTrace
21
29
  include NotificationsTrace
22
30
  def initialize(engine: ActiveSupport::Notifications, **rest)
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+ # typed: true
2
3
 
3
4
  require "graphql/tracing/notifications_tracing"
4
5
 
@@ -7,7 +8,7 @@ module GraphQL
7
8
  # This implementation forwards events to ActiveSupport::Notifications
8
9
  # with a `graphql` suffix.
9
10
  #
10
- # @see KEYS for event names
11
+ # See [KEYS](rdoc-ref:KEYS) for event names
11
12
  module ActiveSupportNotificationsTracing
12
13
  # A cache of frequently-used keys to avoid needless string allocations
13
14
  KEYS = NotificationsTracing::KEYS
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+ # typed: ignore
2
3
 
3
4
  require "graphql/tracing/platform_trace"
4
5
 
@@ -10,7 +11,7 @@ module GraphQL
10
11
  #
11
12
  # There are 4 configurations available. They can be set in the
12
13
  # appoptics_apm config file or in code. Please see:
13
- # {https://docs.appoptics.com/kb/apm_tracing/ruby/configure}
14
+ # https://docs.appoptics.com/kb/apm_tracing/ruby/configure
14
15
  #
15
16
  # AppOpticsAPM::Config[:graphql][:enabled] = true|false
16
17
  # AppOpticsAPM::Config[:graphql][:transaction_name] = true|false
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+ # typed: ignore
2
3
 
3
4
  require "graphql/tracing/platform_tracing"
4
5
 
@@ -10,7 +11,7 @@ module GraphQL
10
11
  #
11
12
  # There are 4 configurations available. They can be set in the
12
13
  # appoptics_apm config file or in code. Please see:
13
- # {https://docs.appoptics.com/kb/apm_tracing/ruby/configure}
14
+ # https://docs.appoptics.com/kb/apm_tracing/ruby/configure
14
15
  #
15
16
  # AppOpticsAPM::Config[:graphql][:enabled] = true|false
16
17
  # AppOpticsAPM::Config[:graphql][:transaction_name] = true|false
@@ -1,19 +1,28 @@
1
1
  # frozen_string_literal: true
2
+ # typed: ignore
2
3
  require "graphql/tracing/monitor_trace"
3
4
 
4
5
  module GraphQL
5
6
  module Tracing
6
7
  # Instrumentation for reporting GraphQL-Ruby times to Appsignal.
7
8
  #
8
- # @example Installing the tracer
9
- # class MySchema < GraphQL::Schema
10
- # trace_with GraphQL::Tracing::AppsignalTrace
11
- # end
9
+ # **Examples**
10
+ #
11
+ # **Example: Installing the tracer**
12
+ #
13
+ # ```ruby
14
+ # class MySchema < GraphQL::Schema
15
+ # trace_with GraphQL::Tracing::AppsignalTrace
16
+ # end
17
+ # ```
12
18
  AppsignalTrace = MonitorTrace.create_module("appsignal")
13
19
  module AppsignalTrace
14
- # @param set_action_name [Boolean] If true, the GraphQL operation name will be used as the transaction name.
15
- # This is not advised if you run more than one query per HTTP request, for example, with `graphql-client` or multiplexing.
16
- # It can also be specified per-query with `context[:set_appsignal_action_name]`.
20
+ # **Parameters**
21
+ #
22
+ # - `set_action_name` (`Boolean`) — If true, the GraphQL operation name will be used as the transaction name. This is not advised if you run more than one query per HTTP request, for example, with `graphql-client` or multiplexing. It can also be specified per-query with `context[:set_appsignal_action_name]`.
23
+ #
24
+ # :call-seq:
25
+ # initialize(bool set_action_name:, **rest)
17
26
  def initialize(set_action_name: false, **rest)
18
27
  rest[:set_transaction_name] ||= set_action_name
19
28
  setup_appsignal_monitor(**rest)
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+ # typed: true
2
3
 
3
4
  require "graphql/tracing/platform_tracing"
4
5
 
@@ -16,9 +17,12 @@ module GraphQL
16
17
  "execute_query_lazy" => "execute.graphql",
17
18
  }
18
19
 
19
- # @param set_action_name [Boolean] If true, the GraphQL operation name will be used as the transaction name.
20
- # This is not advised if you run more than one query per HTTP request, for example, with `graphql-client` or multiplexing.
21
- # It can also be specified per-query with `context[:set_appsignal_action_name]`.
20
+ # **Parameters**
21
+ #
22
+ # - `set_action_name` (`Boolean`) — If true, the GraphQL operation name will be used as the transaction name. This is not advised if you run more than one query per HTTP request, for example, with `graphql-client` or multiplexing. It can also be specified per-query with `context[:set_appsignal_action_name]`.
23
+ #
24
+ # :call-seq:
25
+ # initialize(options)
22
26
  def initialize(options = {})
23
27
  @set_action_name = options.fetch(:set_action_name, false)
24
28
  super
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+ # typed: true
2
3
 
3
4
  module GraphQL
4
5
  module Tracing