graphql 1.10.2 → 2.0.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of graphql might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/lib/generators/graphql/core.rb +21 -10
- 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 +45 -8
- data/lib/generators/graphql/interface_generator.rb +7 -7
- data/lib/generators/graphql/loader_generator.rb +1 -0
- 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 +6 -30
- data/lib/generators/graphql/mutation_update_generator.rb +22 -0
- data/lib/generators/graphql/object_generator.rb +28 -12
- data/lib/generators/graphql/orm_mutations_base.rb +40 -0
- data/lib/generators/graphql/relay.rb +49 -0
- data/lib/generators/graphql/relay_generator.rb +21 -0
- 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 +8 -0
- data/lib/generators/graphql/templates/base_edge.erb +8 -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_scalar.erb +2 -0
- data/lib/generators/graphql/templates/base_union.erb +2 -0
- data/lib/generators/graphql/templates/enum.erb +7 -1
- data/lib/generators/graphql/templates/graphql_controller.erb +16 -12
- data/lib/generators/graphql/templates/input.erb +9 -0
- data/lib/generators/graphql/templates/interface.erb +6 -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 +9 -0
- data/lib/generators/graphql/templates/object.erb +7 -3
- data/lib/generators/graphql/templates/query_type.erb +3 -3
- data/lib/generators/graphql/templates/scalar.erb +5 -1
- data/lib/generators/graphql/templates/schema.erb +24 -33
- data/lib/generators/graphql/templates/union.erb +6 -2
- data/lib/generators/graphql/type_generator.rb +47 -10
- data/lib/generators/graphql/union_generator.rb +5 -5
- data/lib/graphql/analysis/ast/field_usage.rb +30 -1
- data/lib/graphql/analysis/ast/max_query_complexity.rb +0 -1
- data/lib/graphql/analysis/ast/query_complexity.rb +125 -117
- data/lib/graphql/analysis/ast/query_depth.rb +0 -1
- data/lib/graphql/analysis/ast/visitor.rb +52 -36
- data/lib/graphql/analysis/ast.rb +7 -8
- data/lib/graphql/analysis.rb +0 -7
- data/lib/graphql/backtrace/inspect_result.rb +0 -1
- data/lib/graphql/backtrace/table.rb +31 -18
- data/lib/graphql/backtrace/trace.rb +96 -0
- data/lib/graphql/backtrace/traced_error.rb +0 -1
- data/lib/graphql/backtrace/tracer.rb +39 -9
- data/lib/graphql/backtrace.rb +26 -18
- data/lib/graphql/dataloader/null_dataloader.rb +24 -0
- data/lib/graphql/dataloader/request.rb +19 -0
- data/lib/graphql/dataloader/request_all.rb +19 -0
- data/lib/graphql/dataloader/source.rb +164 -0
- data/lib/graphql/dataloader.rb +311 -0
- data/lib/graphql/date_encoding_error.rb +16 -0
- data/lib/graphql/deprecation.rb +9 -0
- data/lib/graphql/dig.rb +1 -1
- data/lib/graphql/execution/errors.rb +77 -44
- data/lib/graphql/execution/interpreter/argument_value.rb +28 -0
- data/lib/graphql/execution/interpreter/arguments.rb +88 -0
- data/lib/graphql/execution/interpreter/arguments_cache.rb +104 -0
- data/lib/graphql/execution/interpreter/handles_raw_value.rb +18 -0
- data/lib/graphql/execution/interpreter/resolve.rb +62 -24
- data/lib/graphql/execution/interpreter/runtime.rb +826 -464
- data/lib/graphql/execution/interpreter.rb +206 -68
- data/lib/graphql/execution/lazy.rb +11 -21
- data/lib/graphql/execution/lookahead.rb +55 -136
- data/lib/graphql/execution/multiplex.rb +6 -162
- data/lib/graphql/execution.rb +11 -4
- data/lib/graphql/filter.rb +7 -2
- data/lib/graphql/integer_decoding_error.rb +17 -0
- 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 +11 -5
- data/lib/graphql/introspection/dynamic_fields.rb +3 -8
- data/lib/graphql/introspection/entry_points.rb +4 -17
- data/lib/graphql/introspection/enum_value_type.rb +2 -2
- data/lib/graphql/introspection/field_type.rb +9 -5
- data/lib/graphql/introspection/input_value_type.rb +15 -3
- data/lib/graphql/introspection/introspection_query.rb +6 -92
- data/lib/graphql/introspection/schema_type.rb +11 -6
- data/lib/graphql/introspection/type_type.rb +31 -14
- data/lib/graphql/introspection.rb +100 -0
- data/lib/graphql/invalid_null_error.rb +18 -0
- data/lib/graphql/language/block_string.rb +20 -5
- data/lib/graphql/language/cache.rb +37 -0
- data/lib/graphql/language/document_from_schema_definition.rb +96 -44
- data/lib/graphql/language/lexer.rb +216 -1462
- data/lib/graphql/language/nodes.rb +126 -129
- data/lib/graphql/language/parser.rb +997 -933
- data/lib/graphql/language/parser.y +148 -118
- data/lib/graphql/language/printer.rb +48 -23
- data/lib/graphql/language/sanitized_printer.rb +222 -0
- data/lib/graphql/language/token.rb +0 -4
- data/lib/graphql/language/visitor.rb +192 -84
- data/lib/graphql/language.rb +2 -0
- data/lib/graphql/name_validator.rb +2 -7
- data/lib/graphql/pagination/active_record_relation_connection.rb +45 -3
- data/lib/graphql/pagination/array_connection.rb +6 -4
- data/lib/graphql/pagination/connection.rb +105 -23
- data/lib/graphql/pagination/connections.rb +62 -35
- data/lib/graphql/pagination/relation_connection.rb +88 -36
- data/lib/graphql/parse_error.rb +0 -1
- data/lib/graphql/query/context.rb +203 -198
- data/lib/graphql/query/fingerprint.rb +26 -0
- data/lib/graphql/query/input_validation_result.rb +33 -7
- data/lib/graphql/query/null_context.rb +22 -9
- data/lib/graphql/query/validation_pipeline.rb +16 -38
- data/lib/graphql/query/variable_validation_error.rb +3 -3
- data/lib/graphql/query/variables.rb +36 -12
- data/lib/graphql/query.rb +92 -44
- data/lib/graphql/railtie.rb +6 -102
- data/lib/graphql/rake_task/validate.rb +1 -1
- data/lib/graphql/rake_task.rb +41 -10
- data/lib/graphql/relay/range_add.rb +17 -10
- 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 +245 -0
- data/lib/graphql/schema/argument.rb +250 -46
- data/lib/graphql/schema/base_64_encoder.rb +2 -0
- data/lib/graphql/schema/build_from_definition/resolve_map.rb +3 -1
- data/lib/graphql/schema/build_from_definition.rb +243 -89
- data/lib/graphql/schema/directive/deprecated.rb +1 -1
- data/lib/graphql/schema/directive/feature.rb +1 -1
- data/lib/graphql/schema/directive/flagged.rb +57 -0
- data/lib/graphql/schema/directive/include.rb +1 -1
- data/lib/graphql/schema/directive/one_of.rb +12 -0
- data/lib/graphql/schema/directive/skip.rb +1 -1
- data/lib/graphql/schema/directive/transform.rb +14 -2
- data/lib/graphql/schema/directive.rb +108 -20
- data/lib/graphql/schema/enum.rb +105 -44
- data/lib/graphql/schema/enum_value.rb +15 -25
- data/lib/graphql/schema/field/connection_extension.rb +50 -30
- data/lib/graphql/schema/field/scope_extension.rb +1 -1
- data/lib/graphql/schema/field.rb +476 -331
- data/lib/graphql/schema/field_extension.rb +86 -2
- data/lib/graphql/schema/find_inherited_value.rb +6 -8
- data/lib/graphql/schema/finder.rb +5 -5
- data/lib/graphql/schema/input_object.rb +133 -121
- data/lib/graphql/schema/interface.rb +17 -45
- data/lib/graphql/schema/introspection_system.rb +3 -8
- data/lib/graphql/schema/late_bound_type.rb +8 -2
- data/lib/graphql/schema/list.rb +25 -8
- data/lib/graphql/schema/loader.rb +139 -103
- data/lib/graphql/schema/member/base_dsl_methods.rb +29 -35
- data/lib/graphql/schema/member/build_type.rb +19 -14
- data/lib/graphql/schema/member/has_arguments.rb +310 -26
- data/lib/graphql/schema/member/has_ast_node.rb +16 -1
- data/lib/graphql/schema/member/has_deprecation_reason.rb +24 -0
- data/lib/graphql/schema/member/has_directives.rb +118 -0
- data/lib/graphql/schema/member/has_fields.rb +164 -42
- data/lib/graphql/schema/member/has_interfaces.rb +129 -0
- data/lib/graphql/schema/member/has_unresolved_type_error.rb +15 -0
- data/lib/graphql/schema/member/has_validators.rb +57 -0
- data/lib/graphql/schema/member/relay_shortcuts.rb +47 -2
- data/lib/graphql/schema/member/type_system_helpers.rb +20 -3
- data/lib/graphql/schema/member/validates_input.rb +3 -3
- data/lib/graphql/schema/member.rb +6 -6
- data/lib/graphql/schema/mutation.rb +4 -9
- data/lib/graphql/schema/non_null.rb +12 -7
- data/lib/graphql/schema/object.rb +35 -69
- data/lib/graphql/schema/printer.rb +16 -34
- data/lib/graphql/schema/relay_classic_mutation.rb +90 -43
- data/lib/graphql/schema/resolver/has_payload_type.rb +51 -11
- data/lib/graphql/schema/resolver.rb +144 -79
- data/lib/graphql/schema/scalar.rb +27 -18
- data/lib/graphql/schema/subscription.rb +55 -26
- data/lib/graphql/schema/timeout.rb +45 -35
- data/lib/graphql/schema/type_expression.rb +1 -1
- data/lib/graphql/schema/type_membership.rb +21 -4
- data/lib/graphql/schema/union.rb +48 -13
- data/lib/graphql/schema/unique_within_type.rb +1 -2
- 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 +33 -0
- data/lib/graphql/schema/validator/format_validator.rb +48 -0
- data/lib/graphql/schema/validator/inclusion_validator.rb +35 -0
- data/lib/graphql/schema/validator/length_validator.rb +59 -0
- data/lib/graphql/schema/validator/numericality_validator.rb +82 -0
- data/lib/graphql/schema/validator/required_validator.rb +82 -0
- data/lib/graphql/schema/validator.rb +171 -0
- data/lib/graphql/schema/warden.rb +185 -32
- data/lib/graphql/schema/wrapper.rb +0 -5
- data/lib/graphql/schema.rb +471 -1116
- data/lib/graphql/static_validation/all_rules.rb +3 -0
- data/lib/graphql/static_validation/base_visitor.rb +13 -27
- 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 +69 -26
- data/lib/graphql/static_validation/rules/argument_literals_are_compatible.rb +44 -87
- data/lib/graphql/static_validation/rules/argument_literals_are_compatible_error.rb +22 -6
- data/lib/graphql/static_validation/rules/arguments_are_defined.rb +28 -22
- data/lib/graphql/static_validation/rules/arguments_are_defined_error.rb +4 -2
- data/lib/graphql/static_validation/rules/directives_are_defined.rb +12 -6
- 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 +92 -49
- 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/input_object_names_are_unique.rb +30 -0
- data/lib/graphql/static_validation/rules/input_object_names_are_unique_error.rb +30 -0
- 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 +4 -2
- data/lib/graphql/static_validation/rules/required_input_object_attributes_are_present.rb +6 -7
- 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 +9 -10
- data/lib/graphql/static_validation/rules/variable_usages_are_allowed.rb +14 -8
- data/lib/graphql/static_validation/rules/variables_are_used_and_defined.rb +4 -2
- data/lib/graphql/static_validation/validation_context.rb +13 -3
- data/lib/graphql/static_validation/validation_timeout_error.rb +25 -0
- data/lib/graphql/static_validation/validator.rb +32 -20
- data/lib/graphql/static_validation.rb +1 -2
- data/lib/graphql/string_encoding_error.rb +13 -3
- data/lib/graphql/subscriptions/action_cable_subscriptions.rb +126 -19
- data/lib/graphql/subscriptions/broadcast_analyzer.rb +81 -0
- data/lib/graphql/subscriptions/default_subscription_resolve_extension.rb +58 -0
- data/lib/graphql/subscriptions/event.rb +81 -35
- data/lib/graphql/subscriptions/instrumentation.rb +0 -52
- data/lib/graphql/subscriptions/serialize.rb +53 -6
- data/lib/graphql/subscriptions.rb +113 -58
- data/lib/graphql/tracing/active_support_notifications_trace.rb +16 -0
- data/lib/graphql/tracing/active_support_notifications_tracing.rb +8 -21
- data/lib/graphql/tracing/appoptics_trace.rb +231 -0
- data/lib/graphql/tracing/appoptics_tracing.rb +173 -0
- 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 +148 -0
- data/lib/graphql/tracing/data_dog_tracing.rb +26 -2
- data/lib/graphql/tracing/legacy_trace.rb +65 -0
- data/lib/graphql/tracing/new_relic_trace.rb +75 -0
- data/lib/graphql/tracing/new_relic_tracing.rb +1 -12
- data/lib/graphql/tracing/notifications_trace.rb +42 -0
- data/lib/graphql/tracing/notifications_tracing.rb +59 -0
- data/lib/graphql/tracing/platform_trace.rb +109 -0
- data/lib/graphql/tracing/platform_tracing.rb +64 -43
- data/lib/graphql/tracing/prometheus_trace.rb +89 -0
- data/lib/graphql/tracing/prometheus_tracing/graphql_collector.rb +5 -2
- data/lib/graphql/tracing/prometheus_tracing.rb +3 -3
- data/lib/graphql/tracing/scout_trace.rb +72 -0
- data/lib/graphql/tracing/scout_tracing.rb +11 -0
- data/lib/graphql/tracing/statsd_trace.rb +56 -0
- data/lib/graphql/tracing/statsd_tracing.rb +42 -0
- data/lib/graphql/tracing/trace.rb +75 -0
- data/lib/graphql/tracing.rb +23 -71
- data/lib/graphql/type_kinds.rb +6 -3
- data/lib/graphql/types/big_int.rb +5 -1
- data/lib/graphql/types/int.rb +10 -3
- data/lib/graphql/types/iso_8601_date.rb +20 -9
- data/lib/graphql/types/iso_8601_date_time.rb +36 -10
- data/lib/graphql/types/relay/base_connection.rb +18 -92
- data/lib/graphql/types/relay/base_edge.rb +2 -34
- data/lib/graphql/types/relay/connection_behaviors.rb +176 -0
- data/lib/graphql/types/relay/edge_behaviors.rb +75 -0
- data/lib/graphql/types/relay/has_node_field.rb +41 -0
- data/lib/graphql/types/relay/has_nodes_field.rb +41 -0
- data/lib/graphql/types/relay/node.rb +2 -4
- data/lib/graphql/types/relay/node_behaviors.rb +25 -0
- data/lib/graphql/types/relay/page_info.rb +2 -14
- data/lib/graphql/types/relay/page_info_behaviors.rb +30 -0
- data/lib/graphql/types/relay.rb +10 -5
- data/lib/graphql/types/string.rb +8 -2
- data/lib/graphql/unauthorized_error.rb +2 -2
- data/lib/graphql/version.rb +1 -1
- data/lib/graphql.rb +54 -65
- data/readme.md +3 -6
- metadata +116 -236
- data/lib/graphql/analysis/analyze_query.rb +0 -91
- 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/backwards_compatibility.rb +0 -60
- 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 -435
- data/lib/graphql/compatibility/lazy_execution_specification/lazy_schema.rb +0 -111
- data/lib/graphql/compatibility/lazy_execution_specification.rb +0 -213
- 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 -264
- data/lib/graphql/compatibility/schema_parser_specification.rb +0 -680
- 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 -210
- 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 -42
- 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 -107
- data/lib/graphql/enum_type.rb +0 -127
- data/lib/graphql/execution/execute.rb +0 -326
- data/lib/graphql/execution/flatten.rb +0 -40
- data/lib/graphql/execution/instrumentation.rb +0 -92
- data/lib/graphql/execution/interpreter/hash_response.rb +0 -46
- 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 -222
- data/lib/graphql/float_type.rb +0 -2
- data/lib/graphql/function.rb +0 -124
- data/lib/graphql/id_type.rb +0 -2
- data/lib/graphql/input_object_type.rb +0 -132
- data/lib/graphql/int_type.rb +0 -2
- data/lib/graphql/interface_type.rb +0 -65
- 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 -258
- data/lib/graphql/list_type.rb +0 -80
- data/lib/graphql/literal_validation_error.rb +0 -6
- data/lib/graphql/non_null_type.rb +0 -71
- data/lib/graphql/object_type.rb +0 -121
- data/lib/graphql/query/arguments.rb +0 -188
- data/lib/graphql/query/arguments_cache.rb +0 -25
- data/lib/graphql/query/executor.rb +0 -53
- 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 -39
- data/lib/graphql/relay/array_connection.rb +0 -85
- data/lib/graphql/relay/base_connection.rb +0 -176
- 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 -105
- data/lib/graphql/relay/node.rb +0 -36
- data/lib/graphql/relay/page_info.rb +0 -7
- data/lib/graphql/relay/relation_connection.rb +0 -190
- data/lib/graphql/relay/type_extensions.rb +0 -30
- data/lib/graphql/scalar_type.rb +0 -76
- 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 -15
- 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 -132
- data/lib/graphql/schema/middleware_chain.rb +0 -82
- data/lib/graphql/schema/possible_types.rb +0 -39
- data/lib/graphql/schema/rescue_middleware.rb +0 -60
- data/lib/graphql/schema/timeout_middleware.rb +0 -86
- data/lib/graphql/schema/traversal.rb +0 -228
- data/lib/graphql/schema/validation.rb +0 -303
- data/lib/graphql/static_validation/default_visitor.rb +0 -15
- data/lib/graphql/static_validation/no_validate_visitor.rb +0 -10
- data/lib/graphql/string_type.rb +0 -2
- data/lib/graphql/subscriptions/subscription_root.rb +0 -65
- data/lib/graphql/tracing/skylight_tracing.rb +0 -70
- data/lib/graphql/types/relay/base_field.rb +0 -22
- data/lib/graphql/types/relay/base_interface.rb +0 -29
- data/lib/graphql/types/relay/base_object.rb +0 -26
- data/lib/graphql/types/relay/node_field.rb +0 -43
- data/lib/graphql/types/relay/nodes_field.rb +0 -45
- data/lib/graphql/union_type.rb +0 -113
- data/lib/graphql/upgrader/member.rb +0 -936
- data/lib/graphql/upgrader/schema.rb +0 -37
@@ -1,105 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
require "graphql/relay/mutation/instrumentation"
|
3
|
-
require "graphql/relay/mutation/resolve"
|
4
|
-
require "graphql/relay/mutation/result"
|
5
|
-
|
6
|
-
module GraphQL
|
7
|
-
module Relay
|
8
|
-
# @api deprecated
|
9
|
-
class Mutation
|
10
|
-
include GraphQL::Define::InstanceDefinable
|
11
|
-
accepts_definitions(
|
12
|
-
:name, :description, :resolve,
|
13
|
-
:return_type,
|
14
|
-
:return_interfaces,
|
15
|
-
input_field: GraphQL::Define::AssignArgument,
|
16
|
-
return_field: GraphQL::Define::AssignObjectField,
|
17
|
-
function: GraphQL::Define::AssignMutationFunction,
|
18
|
-
)
|
19
|
-
attr_accessor :name, :description, :fields, :arguments
|
20
|
-
attr_writer :return_type, :return_interfaces
|
21
|
-
|
22
|
-
ensure_defined(
|
23
|
-
:input_fields, :return_fields, :name, :description,
|
24
|
-
:fields, :arguments, :return_type,
|
25
|
-
:return_interfaces, :resolve=,
|
26
|
-
:field, :result_class, :input_type
|
27
|
-
)
|
28
|
-
# For backwards compat, but do we need this separate API?
|
29
|
-
alias :return_fields :fields
|
30
|
-
alias :input_fields :arguments
|
31
|
-
|
32
|
-
def initialize
|
33
|
-
@fields = {}
|
34
|
-
@arguments = {}
|
35
|
-
@has_generated_return_type = false
|
36
|
-
end
|
37
|
-
|
38
|
-
def has_generated_return_type?
|
39
|
-
# Trigger the generation of the return type, if it is dynamically generated:
|
40
|
-
return_type
|
41
|
-
@has_generated_return_type
|
42
|
-
end
|
43
|
-
|
44
|
-
def resolve=(new_resolve_proc)
|
45
|
-
@resolve_proc = new_resolve_proc
|
46
|
-
end
|
47
|
-
|
48
|
-
def field
|
49
|
-
@field ||= begin
|
50
|
-
relay_mutation = self
|
51
|
-
field_resolve_proc = @resolve_proc
|
52
|
-
GraphQL::Field.define do
|
53
|
-
type(relay_mutation.return_type)
|
54
|
-
description(relay_mutation.description)
|
55
|
-
argument :input, !relay_mutation.input_type
|
56
|
-
resolve(field_resolve_proc)
|
57
|
-
mutation(relay_mutation)
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
def return_interfaces
|
63
|
-
@return_interfaces ||= []
|
64
|
-
end
|
65
|
-
|
66
|
-
def return_type
|
67
|
-
@return_type ||= begin
|
68
|
-
@has_generated_return_type = true
|
69
|
-
relay_mutation = self
|
70
|
-
GraphQL::ObjectType.define do
|
71
|
-
name("#{relay_mutation.name}Payload")
|
72
|
-
description("Autogenerated return type of #{relay_mutation.name}")
|
73
|
-
field :clientMutationId, types.String, "A unique identifier for the client performing the mutation.", property: :client_mutation_id
|
74
|
-
interfaces relay_mutation.return_interfaces
|
75
|
-
relay_mutation.return_fields.each do |name, field_obj|
|
76
|
-
field name, field: field_obj
|
77
|
-
end
|
78
|
-
mutation(relay_mutation)
|
79
|
-
end
|
80
|
-
end
|
81
|
-
end
|
82
|
-
|
83
|
-
def input_type
|
84
|
-
@input_type ||= begin
|
85
|
-
relay_mutation = self
|
86
|
-
input_object_type = GraphQL::InputObjectType.define do
|
87
|
-
name("#{relay_mutation.name}Input")
|
88
|
-
description("Autogenerated input type of #{relay_mutation.name}")
|
89
|
-
input_field :clientMutationId, types.String, "A unique identifier for the client performing the mutation."
|
90
|
-
mutation(relay_mutation)
|
91
|
-
end
|
92
|
-
input_fields.each do |name, arg|
|
93
|
-
input_object_type.arguments[name] = arg
|
94
|
-
end
|
95
|
-
|
96
|
-
input_object_type
|
97
|
-
end
|
98
|
-
end
|
99
|
-
|
100
|
-
def result_class
|
101
|
-
@result_class ||= Result.define_subclass(self)
|
102
|
-
end
|
103
|
-
end
|
104
|
-
end
|
105
|
-
end
|
data/lib/graphql/relay/node.rb
DELETED
@@ -1,36 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
module GraphQL
|
3
|
-
module Relay
|
4
|
-
# Helpers for working with Relay-specific Node objects.
|
5
|
-
module Node
|
6
|
-
# @return [GraphQL::Field] a field for finding objects by their global ID.
|
7
|
-
def self.field(**kwargs, &block)
|
8
|
-
# We have to define it fresh each time because
|
9
|
-
# its name will be modified and its description
|
10
|
-
# _may_ be modified.
|
11
|
-
field = GraphQL::Types::Relay::NodeField.graphql_definition
|
12
|
-
|
13
|
-
if kwargs.any? || block
|
14
|
-
field = field.redefine(**kwargs, &block)
|
15
|
-
end
|
16
|
-
|
17
|
-
field
|
18
|
-
end
|
19
|
-
|
20
|
-
def self.plural_field(**kwargs, &block)
|
21
|
-
field = GraphQL::Types::Relay::NodesField.graphql_definition
|
22
|
-
|
23
|
-
if kwargs.any? || block
|
24
|
-
field = field.redefine(**kwargs, &block)
|
25
|
-
end
|
26
|
-
|
27
|
-
field
|
28
|
-
end
|
29
|
-
|
30
|
-
# @return [GraphQL::InterfaceType] The interface which all Relay types must implement
|
31
|
-
def self.interface
|
32
|
-
@interface ||= GraphQL::Types::Relay::Node.graphql_definition
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
@@ -1,190 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
module GraphQL
|
3
|
-
module Relay
|
4
|
-
# A connection implementation to expose SQL collection objects.
|
5
|
-
# It works for:
|
6
|
-
# - `ActiveRecord::Relation`
|
7
|
-
# - `Sequel::Dataset`
|
8
|
-
class RelationConnection < BaseConnection
|
9
|
-
def cursor_from_node(item)
|
10
|
-
item_index = paged_nodes.index(item)
|
11
|
-
if item_index.nil?
|
12
|
-
raise("Can't generate cursor, item not found in connection: #{item}")
|
13
|
-
else
|
14
|
-
offset = item_index + 1 + ((paged_nodes_offset || 0) - (relation_offset(sliced_nodes) || 0))
|
15
|
-
|
16
|
-
if after
|
17
|
-
offset += offset_from_cursor(after)
|
18
|
-
elsif before
|
19
|
-
offset += offset_from_cursor(before) - 1 - sliced_nodes_count
|
20
|
-
end
|
21
|
-
|
22
|
-
encode(offset.to_s)
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
def has_next_page
|
27
|
-
if first
|
28
|
-
if defined?(ActiveRecord::Relation) && nodes.is_a?(ActiveRecord::Relation)
|
29
|
-
initial_offset = after ? offset_from_cursor(after) : 0
|
30
|
-
return paged_nodes.length >= first && nodes.offset(first + initial_offset).exists?
|
31
|
-
end
|
32
|
-
return paged_nodes.length >= first && sliced_nodes_count > first
|
33
|
-
end
|
34
|
-
if GraphQL::Relay::ConnectionType.bidirectional_pagination && last
|
35
|
-
return sliced_nodes_count >= last
|
36
|
-
end
|
37
|
-
false
|
38
|
-
end
|
39
|
-
|
40
|
-
def has_previous_page
|
41
|
-
if last
|
42
|
-
paged_nodes.length >= last && sliced_nodes_count > last
|
43
|
-
elsif GraphQL::Relay::ConnectionType.bidirectional_pagination && after
|
44
|
-
# We've already paginated through the collection a bit,
|
45
|
-
# there are nodes behind us
|
46
|
-
offset_from_cursor(after) > 0
|
47
|
-
else
|
48
|
-
false
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
def first
|
53
|
-
return @first if defined? @first
|
54
|
-
|
55
|
-
@first = get_limited_arg(:first)
|
56
|
-
@first = max_page_size if @first && max_page_size && @first > max_page_size
|
57
|
-
@first
|
58
|
-
end
|
59
|
-
|
60
|
-
def last
|
61
|
-
return @last if defined? @last
|
62
|
-
|
63
|
-
@last = get_limited_arg(:last)
|
64
|
-
@last = max_page_size if @last && max_page_size && @last > max_page_size
|
65
|
-
@last
|
66
|
-
end
|
67
|
-
|
68
|
-
private
|
69
|
-
|
70
|
-
# apply first / last limit results
|
71
|
-
# @return [Array]
|
72
|
-
def paged_nodes
|
73
|
-
return @paged_nodes if defined? @paged_nodes
|
74
|
-
|
75
|
-
items = sliced_nodes
|
76
|
-
|
77
|
-
if first
|
78
|
-
if relation_limit(items).nil? || relation_limit(items) > first
|
79
|
-
items = items.limit(first)
|
80
|
-
end
|
81
|
-
end
|
82
|
-
|
83
|
-
if last
|
84
|
-
if relation_limit(items)
|
85
|
-
if last <= relation_limit(items)
|
86
|
-
offset = (relation_offset(items) || 0) + (relation_limit(items) - last)
|
87
|
-
items = items.offset(offset).limit(last)
|
88
|
-
end
|
89
|
-
else
|
90
|
-
slice_count = relation_count(items)
|
91
|
-
offset = (relation_offset(items) || 0) + slice_count - [last, slice_count].min
|
92
|
-
items = items.offset(offset).limit(last)
|
93
|
-
end
|
94
|
-
end
|
95
|
-
|
96
|
-
if max_page_size && !first && !last
|
97
|
-
if relation_limit(items).nil? || relation_limit(items) > max_page_size
|
98
|
-
items = items.limit(max_page_size)
|
99
|
-
end
|
100
|
-
end
|
101
|
-
|
102
|
-
# Store this here so we can convert the relation to an Array
|
103
|
-
# (this avoids an extra DB call on Sequel)
|
104
|
-
@paged_nodes_offset = relation_offset(items)
|
105
|
-
@paged_nodes = items.to_a
|
106
|
-
end
|
107
|
-
|
108
|
-
def paged_nodes_offset
|
109
|
-
paged_nodes && @paged_nodes_offset
|
110
|
-
end
|
111
|
-
|
112
|
-
def relation_offset(relation)
|
113
|
-
if relation.respond_to?(:offset_value)
|
114
|
-
relation.offset_value
|
115
|
-
else
|
116
|
-
relation.opts[:offset]
|
117
|
-
end
|
118
|
-
end
|
119
|
-
|
120
|
-
def relation_limit(relation)
|
121
|
-
if relation.respond_to?(:limit_value)
|
122
|
-
relation.limit_value
|
123
|
-
else
|
124
|
-
relation.opts[:limit]
|
125
|
-
end
|
126
|
-
end
|
127
|
-
|
128
|
-
# If a relation contains a `.group` clause, a `.count` will return a Hash.
|
129
|
-
def relation_count(relation)
|
130
|
-
count_or_hash = if(defined?(ActiveRecord::Relation) && relation.is_a?(ActiveRecord::Relation))
|
131
|
-
relation.respond_to?(:unscope)? relation.unscope(:order).count(:all) : relation.count(:all)
|
132
|
-
else # eg, Sequel::Dataset, don't mess up others
|
133
|
-
relation.count
|
134
|
-
end
|
135
|
-
count_or_hash.is_a?(Integer) ? count_or_hash : count_or_hash.length
|
136
|
-
end
|
137
|
-
|
138
|
-
# Apply cursors to edges
|
139
|
-
def sliced_nodes
|
140
|
-
return @sliced_nodes if defined? @sliced_nodes
|
141
|
-
|
142
|
-
@sliced_nodes = nodes
|
143
|
-
|
144
|
-
if after
|
145
|
-
offset = (relation_offset(@sliced_nodes) || 0) + offset_from_cursor(after)
|
146
|
-
@sliced_nodes = @sliced_nodes.offset(offset)
|
147
|
-
end
|
148
|
-
|
149
|
-
if before && after
|
150
|
-
if offset_from_cursor(after) < offset_from_cursor(before)
|
151
|
-
@sliced_nodes = limit_nodes(@sliced_nodes, offset_from_cursor(before) - offset_from_cursor(after) - 1)
|
152
|
-
else
|
153
|
-
@sliced_nodes = limit_nodes(@sliced_nodes, 0)
|
154
|
-
end
|
155
|
-
|
156
|
-
elsif before
|
157
|
-
@sliced_nodes = limit_nodes(@sliced_nodes, offset_from_cursor(before) - 1)
|
158
|
-
end
|
159
|
-
|
160
|
-
@sliced_nodes
|
161
|
-
end
|
162
|
-
|
163
|
-
def limit_nodes(sliced_nodes, limit)
|
164
|
-
if limit > 0 || defined?(ActiveRecord::Relation) && sliced_nodes.is_a?(ActiveRecord::Relation)
|
165
|
-
sliced_nodes.limit(limit)
|
166
|
-
else
|
167
|
-
sliced_nodes.where(false)
|
168
|
-
end
|
169
|
-
end
|
170
|
-
|
171
|
-
def sliced_nodes_count
|
172
|
-
return @sliced_nodes_count if defined? @sliced_nodes_count
|
173
|
-
|
174
|
-
# If a relation contains a `.group` clause, a `.count` will return a Hash.
|
175
|
-
@sliced_nodes_count = relation_count(sliced_nodes)
|
176
|
-
end
|
177
|
-
|
178
|
-
def offset_from_cursor(cursor)
|
179
|
-
decode(cursor).to_i
|
180
|
-
end
|
181
|
-
end
|
182
|
-
|
183
|
-
if defined?(ActiveRecord::Relation)
|
184
|
-
BaseConnection.register_connection_implementation(ActiveRecord::Relation, RelationConnection)
|
185
|
-
end
|
186
|
-
if defined?(Sequel::Dataset)
|
187
|
-
BaseConnection.register_connection_implementation(Sequel::Dataset, RelationConnection)
|
188
|
-
end
|
189
|
-
end
|
190
|
-
end
|
@@ -1,30 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
module GraphQL
|
3
|
-
module Relay
|
4
|
-
# Mixin for Relay-related methods in type objects
|
5
|
-
# (used by BaseType and Schema::Member).
|
6
|
-
module TypeExtensions
|
7
|
-
# @return [GraphQL::ObjectType] The default connection type for this object type
|
8
|
-
def connection_type
|
9
|
-
@connection_type ||= define_connection
|
10
|
-
end
|
11
|
-
|
12
|
-
# Define a custom connection type for this object type
|
13
|
-
# @return [GraphQL::ObjectType]
|
14
|
-
def define_connection(**kwargs, &block)
|
15
|
-
GraphQL::Relay::ConnectionType.create_type(self, **kwargs, &block)
|
16
|
-
end
|
17
|
-
|
18
|
-
# @return [GraphQL::ObjectType] The default edge type for this object type
|
19
|
-
def edge_type
|
20
|
-
@edge_type ||= define_edge
|
21
|
-
end
|
22
|
-
|
23
|
-
# Define a custom edge type for this object type
|
24
|
-
# @return [GraphQL::ObjectType]
|
25
|
-
def define_edge(**kwargs, &block)
|
26
|
-
GraphQL::Relay::EdgeType.create_type(self, **kwargs, &block)
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
data/lib/graphql/scalar_type.rb
DELETED
@@ -1,76 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
module GraphQL
|
3
|
-
# @api deprecated
|
4
|
-
class ScalarType < GraphQL::BaseType
|
5
|
-
accepts_definitions :coerce, :coerce_input, :coerce_result
|
6
|
-
ensure_defined :coerce_non_null_input, :coerce_result
|
7
|
-
|
8
|
-
module NoOpCoerce
|
9
|
-
def self.call(val, ctx)
|
10
|
-
val
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
def initialize
|
15
|
-
super
|
16
|
-
self.coerce = NoOpCoerce
|
17
|
-
end
|
18
|
-
|
19
|
-
def coerce=(proc)
|
20
|
-
self.coerce_input = proc
|
21
|
-
self.coerce_result = proc
|
22
|
-
end
|
23
|
-
|
24
|
-
def coerce_input=(coerce_input_fn)
|
25
|
-
if !coerce_input_fn.nil?
|
26
|
-
@coerce_input_proc = ensure_two_arg(coerce_input_fn, :coerce_input)
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
def coerce_result(value, ctx = nil)
|
31
|
-
if ctx.nil?
|
32
|
-
warn_deprecated_coerce("coerce_isolated_result")
|
33
|
-
ctx = GraphQL::Query::NullContext
|
34
|
-
end
|
35
|
-
@coerce_result_proc.call(value, ctx)
|
36
|
-
end
|
37
|
-
|
38
|
-
def coerce_result=(coerce_result_fn)
|
39
|
-
if !coerce_result_fn.nil?
|
40
|
-
@coerce_result_proc = ensure_two_arg(coerce_result_fn, :coerce_result)
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
def kind
|
45
|
-
GraphQL::TypeKinds::SCALAR
|
46
|
-
end
|
47
|
-
|
48
|
-
private
|
49
|
-
|
50
|
-
def ensure_two_arg(callable, method_name)
|
51
|
-
GraphQL::BackwardsCompatibility.wrap_arity(callable, from: 1, to: 2, name: "#{name}.#{method_name}(val, ctx)")
|
52
|
-
end
|
53
|
-
|
54
|
-
def coerce_non_null_input(value, ctx)
|
55
|
-
@coerce_input_proc.call(raw_coercion_input(value), ctx)
|
56
|
-
end
|
57
|
-
|
58
|
-
def raw_coercion_input(value)
|
59
|
-
if value.is_a?(GraphQL::Language::Nodes::InputObject)
|
60
|
-
value.to_h
|
61
|
-
elsif value.is_a?(Array)
|
62
|
-
value.map { |element| raw_coercion_input(element) }
|
63
|
-
else
|
64
|
-
value
|
65
|
-
end
|
66
|
-
end
|
67
|
-
|
68
|
-
def validate_non_null_input(value, ctx)
|
69
|
-
result = Query::InputValidationResult.new
|
70
|
-
if value.is_a?(GraphQL::Language::Nodes::Enum) || coerce_non_null_input(value, ctx).nil?
|
71
|
-
result.add_problem("Could not coerce value #{GraphQL::Language.serialize(value)} to #{name}")
|
72
|
-
end
|
73
|
-
result
|
74
|
-
end
|
75
|
-
end
|
76
|
-
end
|
@@ -1,35 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
module GraphQL
|
3
|
-
class Schema
|
4
|
-
# In early GraphQL versions, errors would be "automatically"
|
5
|
-
# rescued and replaced with `"Internal error"`. That behavior
|
6
|
-
# was undesirable but this middleware is offered for people who
|
7
|
-
# want to preserve it.
|
8
|
-
#
|
9
|
-
# It has a couple of differences from the previous behavior:
|
10
|
-
#
|
11
|
-
# - Other parts of the query _will_ be run (previously,
|
12
|
-
# execution would stop when the error was raised and the result
|
13
|
-
# would have no `"data"` key at all)
|
14
|
-
# - The entry in {Query::Context#errors} is a {GraphQL::ExecutionError}, _not_
|
15
|
-
# the originally-raised error.
|
16
|
-
# - The entry in the `"errors"` key includes the location of the field
|
17
|
-
# which raised the errors.
|
18
|
-
#
|
19
|
-
# @example Use CatchallMiddleware with your schema
|
20
|
-
# # All errors will be suppressed and replaced with "Internal error" messages
|
21
|
-
# MySchema.middleware << GraphQL::Schema::CatchallMiddleware
|
22
|
-
#
|
23
|
-
module CatchallMiddleware
|
24
|
-
MESSAGE = "Internal error"
|
25
|
-
|
26
|
-
# Rescue any error and replace it with a {GraphQL::ExecutionError}
|
27
|
-
# whose message is {MESSAGE}
|
28
|
-
def self.call(parent_type, parent_object, field_definition, field_args, query_context)
|
29
|
-
yield
|
30
|
-
rescue StandardError
|
31
|
-
GraphQL::ExecutionError.new(MESSAGE)
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
@@ -1,15 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
module GraphQL
|
3
|
-
class Schema
|
4
|
-
module DefaultTypeError
|
5
|
-
def self.call(type_error, ctx)
|
6
|
-
case type_error
|
7
|
-
when GraphQL::InvalidNullError
|
8
|
-
ctx.errors << type_error
|
9
|
-
when GraphQL::UnresolvedTypeError, GraphQL::StringEncodingError, GraphQL::IntegerEncodingError
|
10
|
-
raise type_error
|
11
|
-
end
|
12
|
-
end
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
@@ -1,152 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module GraphQL
|
4
|
-
class Schema
|
5
|
-
class Member
|
6
|
-
# Support for legacy `accepts_definitions` functions.
|
7
|
-
#
|
8
|
-
# Keep the legacy handler hooked up. Class-based types and fields
|
9
|
-
# will call those legacy handlers during their `.to_graphql`
|
10
|
-
# methods.
|
11
|
-
#
|
12
|
-
# This can help out while transitioning from one to the other.
|
13
|
-
# Eventually, `GraphQL::{X}Type` objects will be removed entirely,
|
14
|
-
# But this can help during the transition.
|
15
|
-
#
|
16
|
-
# @example Applying a function to base object class
|
17
|
-
# # Here's the legacy-style config, which we're calling back to:
|
18
|
-
# GraphQL::ObjectType.accepts_definition({
|
19
|
-
# permission_level: ->(defn, value) { defn.metadata[:permission_level] = value }
|
20
|
-
# })
|
21
|
-
#
|
22
|
-
# class BaseObject < GraphQL::Schema::Object
|
23
|
-
# # Setup a named pass-through to the legacy config functions
|
24
|
-
# accepts_definition :permission_level
|
25
|
-
# end
|
26
|
-
#
|
27
|
-
# class Account < BaseObject
|
28
|
-
# # This value will be passed to the legacy handler:
|
29
|
-
# permission_level 1
|
30
|
-
# end
|
31
|
-
#
|
32
|
-
# # The class gets a reader method which returns the args,
|
33
|
-
# # only marginally useful.
|
34
|
-
# Account.permission_level # => [1]
|
35
|
-
#
|
36
|
-
# # The legacy handler is called, as before:
|
37
|
-
# Account.graphql_definition.metadata[:permission_level] # => 1
|
38
|
-
module AcceptsDefinition
|
39
|
-
def self.included(child)
|
40
|
-
child.extend(AcceptsDefinitionDefinitionMethods)
|
41
|
-
child.prepend(ToGraphQLExtension)
|
42
|
-
child.prepend(InitializeExtension)
|
43
|
-
end
|
44
|
-
|
45
|
-
def self.extended(child)
|
46
|
-
if defined?(child::DefinitionMethods)
|
47
|
-
child::DefinitionMethods.include(AcceptsDefinitionDefinitionMethods)
|
48
|
-
child::DefinitionMethods.prepend(ToGraphQLExtension)
|
49
|
-
else
|
50
|
-
child.extend(AcceptsDefinitionDefinitionMethods)
|
51
|
-
# I tried to use `super`, but super isn't quite right
|
52
|
-
# since the method is defined in the same class itself,
|
53
|
-
# not the superclass
|
54
|
-
child.class_eval do
|
55
|
-
class << self
|
56
|
-
prepend(ToGraphQLExtension)
|
57
|
-
end
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
module AcceptsDefinitionDefinitionMethods
|
63
|
-
def accepts_definition(name)
|
64
|
-
own_accepts_definition_methods << name
|
65
|
-
|
66
|
-
ivar_name = "@#{name}_args"
|
67
|
-
if self.is_a?(Class)
|
68
|
-
define_singleton_method(name) do |*args|
|
69
|
-
if args.any?
|
70
|
-
instance_variable_set(ivar_name, args)
|
71
|
-
end
|
72
|
-
instance_variable_get(ivar_name) || (superclass.respond_to?(name) ? superclass.public_send(name) : nil)
|
73
|
-
end
|
74
|
-
|
75
|
-
define_method(name) do |*args|
|
76
|
-
if args.any?
|
77
|
-
instance_variable_set(ivar_name, args)
|
78
|
-
end
|
79
|
-
instance_variable_get(ivar_name)
|
80
|
-
end
|
81
|
-
else
|
82
|
-
# Special handling for interfaces, define it here
|
83
|
-
# so it's appropriately passed down
|
84
|
-
self::DefinitionMethods.module_eval do
|
85
|
-
define_method(name) do |*args|
|
86
|
-
if args.any?
|
87
|
-
instance_variable_set(ivar_name, args)
|
88
|
-
end
|
89
|
-
instance_variable_get(ivar_name) || ((int = interfaces.first { |i| i.respond_to?()}) && int.public_send(name))
|
90
|
-
end
|
91
|
-
end
|
92
|
-
end
|
93
|
-
end
|
94
|
-
|
95
|
-
def accepts_definition_methods
|
96
|
-
inherited_methods = if self.is_a?(Class)
|
97
|
-
superclass.respond_to?(:accepts_definition_methods) ? superclass.accepts_definition_methods : []
|
98
|
-
elsif self.is_a?(Module)
|
99
|
-
m = []
|
100
|
-
ancestors.each do |a|
|
101
|
-
if a.respond_to?(:own_accepts_definition_methods)
|
102
|
-
m.concat(a.own_accepts_definition_methods)
|
103
|
-
end
|
104
|
-
end
|
105
|
-
m
|
106
|
-
else
|
107
|
-
self.class.accepts_definition_methods
|
108
|
-
end
|
109
|
-
|
110
|
-
own_accepts_definition_methods + inherited_methods
|
111
|
-
end
|
112
|
-
|
113
|
-
def own_accepts_definition_methods
|
114
|
-
@own_accepts_definition_methods ||= []
|
115
|
-
end
|
116
|
-
end
|
117
|
-
|
118
|
-
module ToGraphQLExtension
|
119
|
-
def to_graphql
|
120
|
-
defn = super
|
121
|
-
accepts_definition_methods.each do |method_name|
|
122
|
-
value = public_send(method_name)
|
123
|
-
if !value.nil?
|
124
|
-
defn = defn.redefine { public_send(method_name, *value) }
|
125
|
-
end
|
126
|
-
end
|
127
|
-
defn
|
128
|
-
end
|
129
|
-
end
|
130
|
-
|
131
|
-
module InitializeExtension
|
132
|
-
def initialize(*args, **kwargs, &block)
|
133
|
-
self.class.accepts_definition_methods.each do |method_name|
|
134
|
-
if kwargs.key?(method_name)
|
135
|
-
value = kwargs.delete(method_name)
|
136
|
-
if !value.is_a?(Array)
|
137
|
-
value = [value]
|
138
|
-
end
|
139
|
-
instance_variable_set("@#{method_name}_args", value)
|
140
|
-
end
|
141
|
-
end
|
142
|
-
super(*args, **kwargs, &block)
|
143
|
-
end
|
144
|
-
|
145
|
-
def accepts_definition_methods
|
146
|
-
self.class.accepts_definition_methods
|
147
|
-
end
|
148
|
-
end
|
149
|
-
end
|
150
|
-
end
|
151
|
-
end
|
152
|
-
end
|
@@ -1,31 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module GraphQL
|
4
|
-
class Schema
|
5
|
-
class Member
|
6
|
-
# Adds a layer of caching over user-supplied `.to_graphql` methods.
|
7
|
-
# Users override `.to_graphql`, but all runtime code should use `.graphql_definition`.
|
8
|
-
# @api private
|
9
|
-
# @see concrete classes that extend this, eg {Schema::Object}
|
10
|
-
module CachedGraphQLDefinition
|
11
|
-
# A cached result of {.to_graphql}.
|
12
|
-
# It's cached here so that user-overridden {.to_graphql} implementations
|
13
|
-
# are also cached
|
14
|
-
def graphql_definition
|
15
|
-
@graphql_definition ||= to_graphql
|
16
|
-
end
|
17
|
-
|
18
|
-
# This is for a common interface with .define-based types
|
19
|
-
def type_class
|
20
|
-
self
|
21
|
-
end
|
22
|
-
|
23
|
-
# Wipe out the cached graphql_definition so that `.to_graphql` will be called again.
|
24
|
-
def initialize_copy(original)
|
25
|
-
super
|
26
|
-
@graphql_definition = nil
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|