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