graphql 1.9.21 → 2.0.16
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 +25 -27
- 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 +31 -2
- data/lib/graphql/analysis/ast/max_query_complexity.rb +0 -1
- data/lib/graphql/analysis/ast/query_complexity.rb +175 -68
- data/lib/graphql/analysis/ast/query_depth.rb +0 -1
- data/lib/graphql/analysis/ast/visitor.rb +17 -8
- data/lib/graphql/analysis/ast.rb +14 -14
- data/lib/graphql/analysis.rb +0 -7
- data/lib/graphql/backtrace/inspect_result.rb +0 -1
- data/lib/graphql/backtrace/table.rb +37 -16
- data/lib/graphql/backtrace/traced_error.rb +0 -1
- data/lib/graphql/backtrace/tracer.rb +39 -9
- data/lib/graphql/backtrace.rb +20 -17
- 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/directive_checks.rb +2 -2
- data/lib/graphql/execution/errors.rb +77 -45
- 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 +105 -0
- data/lib/graphql/execution/interpreter/handles_raw_value.rb +18 -0
- data/lib/graphql/execution/interpreter/resolve.rb +44 -25
- data/lib/graphql/execution/interpreter/runtime.rb +755 -395
- data/lib/graphql/execution/interpreter.rb +201 -74
- data/lib/graphql/execution/lazy/lazy_method_map.rb +4 -0
- data/lib/graphql/execution/lazy.rb +5 -9
- data/lib/graphql/execution/lookahead.rb +65 -136
- data/lib/graphql/execution/multiplex.rb +5 -152
- data/lib/graphql/execution.rb +11 -4
- data/lib/graphql/filter.rb +1 -1
- data/lib/graphql/integer_decoding_error.rb +17 -0
- data/lib/graphql/integer_encoding_error.rb +18 -2
- data/lib/graphql/introspection/base_object.rb +2 -5
- 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 +5 -18
- 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 +41 -11
- data/lib/graphql/introspection/introspection_query.rb +6 -92
- data/lib/graphql/introspection/schema_type.rb +10 -10
- data/lib/graphql/introspection/type_type.rb +34 -17
- 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/definition_slice.rb +21 -10
- data/lib/graphql/language/document_from_schema_definition.rb +104 -68
- data/lib/graphql/language/lexer.rb +83 -40
- data/lib/graphql/language/lexer.rl +31 -9
- data/lib/graphql/language/nodes.rb +64 -93
- data/lib/graphql/language/parser.rb +940 -896
- data/lib/graphql/language/parser.y +130 -103
- 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 +2 -2
- data/lib/graphql/language.rb +3 -1
- data/lib/graphql/name_validator.rb +2 -7
- data/lib/graphql/pagination/active_record_relation_connection.rb +85 -0
- data/lib/graphql/pagination/array_connection.rb +79 -0
- data/lib/graphql/pagination/connection.rb +253 -0
- data/lib/graphql/pagination/connections.rb +135 -0
- data/lib/graphql/pagination/mongoid_relation_connection.rb +25 -0
- data/lib/graphql/pagination/relation_connection.rb +228 -0
- data/lib/graphql/pagination/sequel_dataset_connection.rb +28 -0
- data/lib/graphql/pagination.rb +6 -0
- data/lib/graphql/parse_error.rb +0 -1
- data/lib/graphql/query/context.rb +172 -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 +21 -8
- 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 +39 -12
- data/lib/graphql/query.rb +74 -38
- data/lib/graphql/railtie.rb +6 -102
- data/lib/graphql/rake_task/validate.rb +4 -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 +286 -31
- data/lib/graphql/schema/base_64_encoder.rb +2 -0
- data/lib/graphql/schema/build_from_definition/resolve_map/default_resolve.rb +1 -1
- data/lib/graphql/schema/build_from_definition/resolve_map.rb +13 -5
- data/lib/graphql/schema/build_from_definition.rb +334 -220
- data/lib/graphql/schema/built_in_types.rb +5 -5
- data/lib/graphql/schema/directive/deprecated.rb +18 -0
- 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 +2 -2
- data/lib/graphql/schema/directive/one_of.rb +12 -0
- data/lib/graphql/schema/directive/skip.rb +2 -2
- data/lib/graphql/schema/directive/transform.rb +14 -2
- data/lib/graphql/schema/directive.rb +117 -14
- data/lib/graphql/schema/enum.rb +113 -22
- data/lib/graphql/schema/enum_value.rb +16 -21
- data/lib/graphql/schema/field/connection_extension.rb +50 -20
- data/lib/graphql/schema/field/scope_extension.rb +1 -1
- data/lib/graphql/schema/field.rb +491 -329
- data/lib/graphql/schema/field_extension.rb +89 -2
- data/lib/graphql/schema/find_inherited_value.rb +17 -1
- data/lib/graphql/schema/finder.rb +16 -14
- data/lib/graphql/schema/input_object.rb +182 -60
- data/lib/graphql/schema/interface.rb +28 -43
- data/lib/graphql/schema/introspection_system.rb +101 -38
- data/lib/graphql/schema/late_bound_type.rb +7 -2
- data/lib/graphql/schema/list.rb +61 -3
- data/lib/graphql/schema/loader.rb +144 -102
- data/lib/graphql/schema/member/base_dsl_methods.rb +33 -32
- data/lib/graphql/schema/member/build_type.rb +24 -15
- data/lib/graphql/schema/member/has_arguments.rb +261 -24
- data/lib/graphql/schema/member/has_ast_node.rb +20 -0
- data/lib/graphql/schema/member/has_deprecation_reason.rb +25 -0
- data/lib/graphql/schema/member/has_directives.rb +113 -0
- data/lib/graphql/schema/member/has_fields.rb +99 -34
- data/lib/graphql/schema/member/has_interfaces.rb +88 -0
- data/lib/graphql/schema/member/has_unresolved_type_error.rb +15 -0
- data/lib/graphql/schema/member/has_validators.rb +31 -0
- data/lib/graphql/schema/member/relay_shortcuts.rb +28 -2
- data/lib/graphql/schema/member/type_system_helpers.rb +3 -3
- data/lib/graphql/schema/member/validates_input.rb +33 -0
- data/lib/graphql/schema/member.rb +11 -6
- data/lib/graphql/schema/mutation.rb +4 -9
- data/lib/graphql/schema/non_null.rb +34 -4
- data/lib/graphql/schema/object.rb +38 -60
- data/lib/graphql/schema/printer.rb +16 -35
- data/lib/graphql/schema/relay_classic_mutation.rb +90 -43
- data/lib/graphql/schema/resolver/has_payload_type.rb +46 -6
- data/lib/graphql/schema/resolver.rb +146 -93
- data/lib/graphql/schema/scalar.rb +40 -15
- data/lib/graphql/schema/subscription.rb +55 -26
- data/lib/graphql/schema/timeout.rb +29 -15
- data/lib/graphql/schema/type_expression.rb +21 -13
- data/lib/graphql/schema/type_membership.rb +22 -5
- data/lib/graphql/schema/union.rb +48 -14
- 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 +187 -33
- data/lib/graphql/schema/wrapper.rb +0 -5
- data/lib/graphql/schema.rb +773 -892
- data/lib/graphql/static_validation/all_rules.rb +3 -0
- data/lib/graphql/static_validation/base_visitor.rb +21 -31
- 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 +55 -26
- data/lib/graphql/static_validation/rules/argument_literals_are_compatible.rb +45 -83
- data/lib/graphql/static_validation/rules/argument_literals_are_compatible_error.rb +22 -6
- data/lib/graphql/static_validation/rules/arguments_are_defined.rb +35 -26
- 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 +14 -14
- data/lib/graphql/static_validation/rules/fields_are_defined_on_type.rb +4 -4
- data/lib/graphql/static_validation/rules/fields_have_appropriate_selections.rb +5 -5
- data/lib/graphql/static_validation/rules/fields_will_merge.rb +94 -51
- data/lib/graphql/static_validation/rules/fields_will_merge_error.rb +25 -4
- data/lib/graphql/static_validation/rules/fragment_spreads_are_possible.rb +3 -3
- 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 +9 -10
- 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 +12 -13
- data/lib/graphql/static_validation/rules/variable_usages_are_allowed.rb +19 -14
- data/lib/graphql/static_validation/rules/variables_are_input_types.rb +1 -1
- data/lib/graphql/static_validation/rules/variables_are_used_and_defined.rb +5 -3
- data/lib/graphql/static_validation/type_stack.rb +2 -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 +31 -19
- 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 +129 -22
- 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 +85 -31
- data/lib/graphql/subscriptions/instrumentation.rb +0 -47
- data/lib/graphql/subscriptions/serialize.rb +53 -6
- data/lib/graphql/subscriptions.rb +137 -57
- data/lib/graphql/tracing/active_support_notifications_tracing.rb +8 -17
- data/lib/graphql/tracing/appoptics_tracing.rb +173 -0
- data/lib/graphql/tracing/appsignal_tracing.rb +23 -0
- data/lib/graphql/tracing/data_dog_tracing.rb +34 -2
- data/lib/graphql/tracing/new_relic_tracing.rb +9 -12
- data/lib/graphql/tracing/notifications_tracing.rb +59 -0
- data/lib/graphql/tracing/platform_tracing.rb +67 -38
- data/lib/graphql/tracing/prometheus_tracing/graphql_collector.rb +4 -1
- data/lib/graphql/tracing/prometheus_tracing.rb +8 -0
- data/lib/graphql/tracing/scout_tracing.rb +19 -0
- data/lib/graphql/tracing/statsd_tracing.rb +42 -0
- data/lib/graphql/tracing.rb +15 -36
- 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 -90
- data/lib/graphql/types/relay/base_edge.rb +2 -34
- data/lib/graphql/types/relay/connection_behaviors.rb +158 -0
- data/lib/graphql/types/relay/default_relay.rb +27 -0
- data/lib/graphql/types/relay/edge_behaviors.rb +65 -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 +19 -0
- data/lib/graphql/types/relay/page_info.rb +2 -14
- data/lib/graphql/types/relay/page_info_behaviors.rb +25 -0
- data/lib/graphql/types/relay.rb +11 -5
- data/lib/graphql/types/string.rb +8 -2
- data/lib/graphql/unauthorized_error.rb +2 -2
- data/lib/graphql/unresolved_type_error.rb +2 -2
- data/lib/graphql/version.rb +1 -1
- data/lib/graphql.rb +41 -58
- data/readme.md +3 -6
- metadata +103 -237
- 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 -159
- data/lib/graphql/authorization.rb +0 -82
- data/lib/graphql/backwards_compatibility.rb +0 -60
- data/lib/graphql/base_type.rb +0 -226
- 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 -91
- 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 -311
- 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 -13
- data/lib/graphql/directive/include_directive.rb +0 -2
- data/lib/graphql/directive/skip_directive.rb +0 -2
- data/lib/graphql/directive.rb +0 -104
- data/lib/graphql/enum_type.rb +0 -193
- 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 -330
- data/lib/graphql/float_type.rb +0 -2
- data/lib/graphql/function.rb +0 -153
- data/lib/graphql/id_type.rb +0 -2
- data/lib/graphql/input_object_type.rb +0 -154
- data/lib/graphql/int_type.rb +0 -2
- data/lib/graphql/interface_type.rb +0 -86
- 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/list_type.rb +0 -80
- data/lib/graphql/literal_validation_error.rb +0 -6
- data/lib/graphql/non_null_type.rb +0 -81
- data/lib/graphql/object_type.rb +0 -141
- data/lib/graphql/query/arguments.rb +0 -187
- 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 -116
- 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 -172
- 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 -40
- data/lib/graphql/relay/edge.rb +0 -27
- data/lib/graphql/relay/edge_type.rb +0 -18
- 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 -190
- 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 -133
- 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 -26
- 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 -74
- data/lib/graphql/tracing/skylight_tracing.rb +0 -62
- 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 -135
- data/lib/graphql/upgrader/member.rb +0 -936
- data/lib/graphql/upgrader/schema.rb +0 -37
@@ -2,11 +2,11 @@
|
|
2
2
|
module GraphQL
|
3
3
|
class Schema
|
4
4
|
BUILT_IN_TYPES = {
|
5
|
-
"Int" =>
|
6
|
-
"String" =>
|
7
|
-
"Float" =>
|
8
|
-
"Boolean" =>
|
9
|
-
"ID" =>
|
5
|
+
"Int" => GraphQL::Types::Int,
|
6
|
+
"String" => GraphQL::Types::String,
|
7
|
+
"Float" => GraphQL::Types::Float,
|
8
|
+
"Boolean" => GraphQL::Types::Boolean,
|
9
|
+
"ID" => GraphQL::Types::ID,
|
10
10
|
}
|
11
11
|
end
|
12
12
|
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module GraphQL
|
3
|
+
class Schema
|
4
|
+
class Directive < GraphQL::Schema::Member
|
5
|
+
class Deprecated < GraphQL::Schema::Directive
|
6
|
+
description "Marks an element of a GraphQL schema as no longer supported."
|
7
|
+
locations(GraphQL::Schema::Directive::FIELD_DEFINITION, GraphQL::Schema::Directive::ENUM_VALUE, GraphQL::Schema::Directive::ARGUMENT_DEFINITION, GraphQL::Schema::Directive::INPUT_FIELD_DEFINITION)
|
8
|
+
|
9
|
+
reason_description = "Explains why this element was deprecated, usually also including a "\
|
10
|
+
"suggestion for how to access supported similar data. Formatted "\
|
11
|
+
"in [Markdown](https://daringfireball.net/projects/markdown/)."
|
12
|
+
|
13
|
+
argument :reason, String, reason_description, default_value: Directive::DEFAULT_DEPRECATION_REASON, required: false
|
14
|
+
default_directive true
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module GraphQL
|
3
|
+
class Schema
|
4
|
+
class Directive < GraphQL::Schema::Member
|
5
|
+
# This is _similar_ to {Directive::Feature}, except it's prescribed by the server, not the client.
|
6
|
+
#
|
7
|
+
# In this case, the server hides types and fields _entirely_, unless the current context has certain `:flags` present.
|
8
|
+
class Flagged < GraphQL::Schema::Directive
|
9
|
+
def initialize(target, **options)
|
10
|
+
if target.is_a?(Module) && !target.ancestors.include?(VisibleByFlag)
|
11
|
+
# This is type class of some kind, `include` will put this module
|
12
|
+
# in between the type class itself and its super class, so `super` will work fine
|
13
|
+
target.include(VisibleByFlag)
|
14
|
+
elsif !target.is_a?(VisibleByFlag)
|
15
|
+
# This is an instance of a base class. `include` won't put this in front of the
|
16
|
+
# base class implementation, so we need to `.prepend`.
|
17
|
+
# `#visible?` could probably be moved to a module and then this could use `include` instead.
|
18
|
+
target.class.prepend(VisibleByFlag)
|
19
|
+
end
|
20
|
+
super
|
21
|
+
end
|
22
|
+
|
23
|
+
description "Hides this part of the schema unless the named flag is present in context[:flags]"
|
24
|
+
|
25
|
+
locations(
|
26
|
+
GraphQL::Schema::Directive::FIELD_DEFINITION,
|
27
|
+
GraphQL::Schema::Directive::OBJECT,
|
28
|
+
GraphQL::Schema::Directive::SCALAR,
|
29
|
+
GraphQL::Schema::Directive::ENUM,
|
30
|
+
GraphQL::Schema::Directive::UNION,
|
31
|
+
GraphQL::Schema::Directive::INTERFACE,
|
32
|
+
GraphQL::Schema::Directive::INPUT_OBJECT,
|
33
|
+
GraphQL::Schema::Directive::ENUM_VALUE,
|
34
|
+
GraphQL::Schema::Directive::ARGUMENT_DEFINITION,
|
35
|
+
GraphQL::Schema::Directive::INPUT_FIELD_DEFINITION,
|
36
|
+
)
|
37
|
+
|
38
|
+
argument :by, [String], "Flags to check for this schema member"
|
39
|
+
|
40
|
+
module VisibleByFlag
|
41
|
+
def self.included(schema_class)
|
42
|
+
schema_class.extend(self)
|
43
|
+
end
|
44
|
+
|
45
|
+
def visible?(context)
|
46
|
+
if dir = self.directives.find { |d| d.is_a?(Flagged) }
|
47
|
+
relevant_flags = (f = context[:flags]) && dir.arguments[:by] & f # rubocop:disable Development/ContextIsPassedCop -- definition-related
|
48
|
+
relevant_flags && relevant_flags.any? && super
|
49
|
+
else
|
50
|
+
super
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -11,12 +11,12 @@ module GraphQL
|
|
11
11
|
GraphQL::Schema::Directive::INLINE_FRAGMENT
|
12
12
|
)
|
13
13
|
|
14
|
-
argument :if, Boolean,
|
14
|
+
argument :if, Boolean,
|
15
15
|
description: "Included when true."
|
16
16
|
|
17
17
|
default_directive true
|
18
18
|
|
19
|
-
def self.
|
19
|
+
def self.static_include?(args, ctx)
|
20
20
|
!!args[:if]
|
21
21
|
end
|
22
22
|
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module GraphQL
|
3
|
+
class Schema
|
4
|
+
class Directive < GraphQL::Schema::Member
|
5
|
+
class OneOf < GraphQL::Schema::Directive
|
6
|
+
description "Requires that exactly one field must be supplied and that field must not be `null`."
|
7
|
+
locations(GraphQL::Schema::Directive::INPUT_OBJECT)
|
8
|
+
default_directive true
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -11,12 +11,12 @@ module GraphQL
|
|
11
11
|
GraphQL::Schema::Directive::INLINE_FRAGMENT
|
12
12
|
)
|
13
13
|
|
14
|
-
argument :if, Boolean,
|
14
|
+
argument :if, Boolean,
|
15
15
|
description: "Skipped when true."
|
16
16
|
|
17
17
|
default_directive true
|
18
18
|
|
19
|
-
def self.
|
19
|
+
def self.static_include?(args, ctx)
|
20
20
|
!args[:if]
|
21
21
|
end
|
22
22
|
end
|
@@ -24,7 +24,7 @@ module GraphQL
|
|
24
24
|
GraphQL::Schema::Directive::FIELD,
|
25
25
|
)
|
26
26
|
|
27
|
-
argument :by, String,
|
27
|
+
argument :by, String,
|
28
28
|
description: "The name of the transform to run if applicable"
|
29
29
|
|
30
30
|
TRANSFORMS = [
|
@@ -39,7 +39,19 @@ module GraphQL
|
|
39
39
|
transform_name = arguments[:by]
|
40
40
|
if TRANSFORMS.include?(transform_name) && return_value.respond_to?(transform_name)
|
41
41
|
return_value = return_value.public_send(transform_name)
|
42
|
-
context.namespace(:
|
42
|
+
response = context.namespace(:interpreter_runtime)[:runtime].final_result
|
43
|
+
*keys, last = path
|
44
|
+
keys.each do |key|
|
45
|
+
if response && (response = response[key])
|
46
|
+
next
|
47
|
+
else
|
48
|
+
break
|
49
|
+
end
|
50
|
+
end
|
51
|
+
if response
|
52
|
+
response[last] = return_value
|
53
|
+
end
|
54
|
+
nil
|
43
55
|
end
|
44
56
|
end
|
45
57
|
end
|
@@ -8,7 +8,15 @@ module GraphQL
|
|
8
8
|
# - {.resolve}: Wraps field resolution (so it should call `yield` to continue)
|
9
9
|
class Directive < GraphQL::Schema::Member
|
10
10
|
extend GraphQL::Schema::Member::HasArguments
|
11
|
+
|
11
12
|
class << self
|
13
|
+
# Directives aren't types, they don't have kinds.
|
14
|
+
undef_method :kind
|
15
|
+
|
16
|
+
def path
|
17
|
+
"@#{super}"
|
18
|
+
end
|
19
|
+
|
12
20
|
# Return a name based on the class name,
|
13
21
|
# but downcase the first letter.
|
14
22
|
def default_graphql_name
|
@@ -21,6 +29,11 @@ module GraphQL
|
|
21
29
|
|
22
30
|
def locations(*new_locations)
|
23
31
|
if new_locations.any?
|
32
|
+
new_locations.each do |new_loc|
|
33
|
+
if !LOCATIONS.include?(new_loc.to_sym)
|
34
|
+
raise ArgumentError, "#{self} (#{self.graphql_name}) has an invalid directive location: `locations #{new_loc}` "
|
35
|
+
end
|
36
|
+
end
|
24
37
|
@locations = new_locations
|
25
38
|
else
|
26
39
|
@locations ||= (superclass.respond_to?(:locations) ? superclass.locations : [])
|
@@ -33,26 +46,21 @@ module GraphQL
|
|
33
46
|
elsif @default_directive.nil?
|
34
47
|
@default_directive = (superclass.respond_to?(:default_directive) ? superclass.default_directive : false)
|
35
48
|
else
|
36
|
-
|
49
|
+
!!@default_directive
|
37
50
|
end
|
38
51
|
end
|
39
52
|
|
40
|
-
def
|
41
|
-
|
42
|
-
defn.name = self.graphql_name
|
43
|
-
defn.description = self.description
|
44
|
-
defn.locations = self.locations
|
45
|
-
defn.default_directive = self.default_directive
|
46
|
-
defn.metadata[:type_class] = self
|
47
|
-
arguments.each do |name, arg_defn|
|
48
|
-
arg_graphql = arg_defn.to_graphql
|
49
|
-
defn.arguments[arg_graphql.name] = arg_graphql
|
50
|
-
end
|
51
|
-
defn
|
53
|
+
def default_directive?
|
54
|
+
default_directive
|
52
55
|
end
|
53
56
|
|
54
57
|
# If false, this part of the query won't be evaluated
|
55
|
-
def include?(_object,
|
58
|
+
def include?(_object, arguments, context)
|
59
|
+
static_include?(arguments, context)
|
60
|
+
end
|
61
|
+
|
62
|
+
# Determines whether {Execution::Lookahead} considers the field to be selected
|
63
|
+
def static_include?(_arguments, _context)
|
56
64
|
true
|
57
65
|
end
|
58
66
|
|
@@ -60,6 +68,52 @@ module GraphQL
|
|
60
68
|
def resolve(object, arguments, context)
|
61
69
|
yield
|
62
70
|
end
|
71
|
+
|
72
|
+
# Continuing is passed as a block, yield to continue.
|
73
|
+
def resolve_each(object, arguments, context)
|
74
|
+
yield
|
75
|
+
end
|
76
|
+
|
77
|
+
def on_field?
|
78
|
+
locations.include?(FIELD)
|
79
|
+
end
|
80
|
+
|
81
|
+
def on_fragment?
|
82
|
+
locations.include?(FRAGMENT_SPREAD) && locations.include?(INLINE_FRAGMENT)
|
83
|
+
end
|
84
|
+
|
85
|
+
def on_operation?
|
86
|
+
locations.include?(QUERY) && locations.include?(MUTATION) && locations.include?(SUBSCRIPTION)
|
87
|
+
end
|
88
|
+
|
89
|
+
def repeatable?
|
90
|
+
!!@repeatable
|
91
|
+
end
|
92
|
+
|
93
|
+
def repeatable(new_value)
|
94
|
+
@repeatable = new_value
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
# @return [GraphQL::Schema::Field, GraphQL::Schema::Argument, Class, Module]
|
99
|
+
attr_reader :owner
|
100
|
+
|
101
|
+
# @return [GraphQL::Interpreter::Arguments]
|
102
|
+
attr_reader :arguments
|
103
|
+
|
104
|
+
def initialize(owner, **arguments)
|
105
|
+
@owner = owner
|
106
|
+
assert_valid_owner
|
107
|
+
# It's be nice if we had the real context here, but we don't. What we _would_ get is:
|
108
|
+
# - error handling
|
109
|
+
# - lazy resolution
|
110
|
+
# Probably, those won't be needed here, since these are configuration arguments,
|
111
|
+
# not runtime arguments.
|
112
|
+
@arguments = self.class.coerce_arguments(nil, arguments, Query::NullContext)
|
113
|
+
end
|
114
|
+
|
115
|
+
def graphql_name
|
116
|
+
self.class.graphql_name
|
63
117
|
end
|
64
118
|
|
65
119
|
LOCATIONS = [
|
@@ -81,6 +135,7 @@ module GraphQL
|
|
81
135
|
ENUM_VALUE = :ENUM_VALUE,
|
82
136
|
INPUT_OBJECT = :INPUT_OBJECT,
|
83
137
|
INPUT_FIELD_DEFINITION = :INPUT_FIELD_DEFINITION,
|
138
|
+
VARIABLE_DEFINITION = :VARIABLE_DEFINITION,
|
84
139
|
]
|
85
140
|
|
86
141
|
DEFAULT_DEPRECATION_REASON = 'No longer supported'
|
@@ -103,7 +158,55 @@ module GraphQL
|
|
103
158
|
ENUM_VALUE: 'Location adjacent to an enum value definition.',
|
104
159
|
INPUT_OBJECT: 'Location adjacent to an input object type definition.',
|
105
160
|
INPUT_FIELD_DEFINITION: 'Location adjacent to an input object field definition.',
|
161
|
+
VARIABLE_DEFINITION: 'Location adjacent to a variable definition.',
|
106
162
|
}
|
163
|
+
|
164
|
+
private
|
165
|
+
|
166
|
+
def assert_valid_owner
|
167
|
+
case @owner
|
168
|
+
when Class
|
169
|
+
if @owner < GraphQL::Schema::Object
|
170
|
+
assert_has_location(OBJECT)
|
171
|
+
elsif @owner < GraphQL::Schema::Union
|
172
|
+
assert_has_location(UNION)
|
173
|
+
elsif @owner < GraphQL::Schema::Enum
|
174
|
+
assert_has_location(ENUM)
|
175
|
+
elsif @owner < GraphQL::Schema::InputObject
|
176
|
+
assert_has_location(INPUT_OBJECT)
|
177
|
+
elsif @owner < GraphQL::Schema::Scalar
|
178
|
+
assert_has_location(SCALAR)
|
179
|
+
elsif @owner < GraphQL::Schema
|
180
|
+
assert_has_location(SCHEMA)
|
181
|
+
else
|
182
|
+
raise "Unexpected directive owner class: #{@owner}"
|
183
|
+
end
|
184
|
+
when Module
|
185
|
+
assert_has_location(INTERFACE)
|
186
|
+
when GraphQL::Schema::Argument
|
187
|
+
if @owner.owner.is_a?(GraphQL::Schema::Field)
|
188
|
+
assert_has_location(ARGUMENT_DEFINITION)
|
189
|
+
else
|
190
|
+
assert_has_location(INPUT_FIELD_DEFINITION)
|
191
|
+
end
|
192
|
+
when GraphQL::Schema::Field
|
193
|
+
assert_has_location(FIELD_DEFINITION)
|
194
|
+
when GraphQL::Schema::EnumValue
|
195
|
+
assert_has_location(ENUM_VALUE)
|
196
|
+
else
|
197
|
+
raise "Unexpected directive owner: #{@owner.inspect}"
|
198
|
+
end
|
199
|
+
end
|
200
|
+
|
201
|
+
def assert_has_location(location)
|
202
|
+
if !self.class.locations.include?(location)
|
203
|
+
raise ArgumentError, <<-MD
|
204
|
+
Directive `@#{self.class.graphql_name}` can't be attached to #{@owner.graphql_name} because #{location} isn't included in its locations (#{self.class.locations.join(", ")}).
|
205
|
+
|
206
|
+
Use `locations(#{location})` to update this directive's definition, or remove it from #{@owner.graphql_name}.
|
207
|
+
MD
|
208
|
+
end
|
209
|
+
end
|
107
210
|
end
|
108
211
|
end
|
109
212
|
end
|
data/lib/graphql/schema/enum.rb
CHANGED
@@ -20,12 +20,21 @@ module GraphQL
|
|
20
20
|
# end
|
21
21
|
class Schema
|
22
22
|
class Enum < GraphQL::Schema::Member
|
23
|
-
extend GraphQL::Schema::Member::
|
23
|
+
extend GraphQL::Schema::Member::ValidatesInput
|
24
24
|
|
25
|
-
class
|
26
|
-
|
27
|
-
|
25
|
+
class UnresolvedValueError < GraphQL::Error
|
26
|
+
def initialize(value:, enum:, context:)
|
27
|
+
fix_message = ", but this isn't a valid value for `#{enum.graphql_name}`. Update the field or resolver to return one of `#{enum.graphql_name}`'s values instead."
|
28
|
+
message = if (cp = context[:current_path]) && (cf = context[:current_field])
|
29
|
+
"`#{cf.path}` returned `#{value.inspect}` at `#{cp.join(".")}`#{fix_message}"
|
30
|
+
else
|
31
|
+
"`#{value.inspect}` was returned for `#{enum.graphql_name}`#{fix_message}"
|
32
|
+
end
|
33
|
+
super(message)
|
34
|
+
end
|
35
|
+
end
|
28
36
|
|
37
|
+
class << self
|
29
38
|
# Define a value for this enum
|
30
39
|
# @param graphql_name [String, Symbol] the GraphQL value for this, usually `SCREAMING_CASE`
|
31
40
|
# @param description [String], the GraphQL description for this value, present in documentation
|
@@ -36,42 +45,124 @@ module GraphQL
|
|
36
45
|
def value(*args, **kwargs, &block)
|
37
46
|
kwargs[:owner] = self
|
38
47
|
value = enum_value_class.new(*args, **kwargs, &block)
|
39
|
-
|
40
|
-
|
48
|
+
key = value.graphql_name
|
49
|
+
prev_value = own_values[key]
|
50
|
+
case prev_value
|
51
|
+
when nil
|
52
|
+
own_values[key] = value
|
53
|
+
when GraphQL::Schema::EnumValue
|
54
|
+
own_values[key] = [prev_value, value]
|
55
|
+
when Array
|
56
|
+
prev_value << value
|
57
|
+
else
|
58
|
+
raise "Invariant: Unexpected enum value for #{key.inspect}: #{prev_value.inspect}"
|
59
|
+
end
|
60
|
+
value
|
41
61
|
end
|
42
62
|
|
43
|
-
# @return [
|
44
|
-
def
|
45
|
-
inherited_values = superclass
|
46
|
-
|
47
|
-
|
63
|
+
# @return [Array<GraphQL::Schema::EnumValue>] Possible values of this enum
|
64
|
+
def enum_values(context = GraphQL::Query::NullContext)
|
65
|
+
inherited_values = superclass.respond_to?(:enum_values) ? superclass.enum_values(context) : nil
|
66
|
+
visible_values = []
|
67
|
+
warden = Warden.from_context(context)
|
68
|
+
own_values.each do |key, values_entry|
|
69
|
+
if (v = Warden.visible_entry?(:visible_enum_value?, values_entry, context, warden))
|
70
|
+
visible_values << v
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
if inherited_values
|
75
|
+
# Local values take precedence over inherited ones
|
76
|
+
inherited_values.each do |i_val|
|
77
|
+
if !visible_values.any? { |v| v.graphql_name == i_val.graphql_name }
|
78
|
+
visible_values << i_val
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
visible_values
|
48
84
|
end
|
49
85
|
|
50
|
-
# @return [
|
51
|
-
def
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
values.each do |name, val|
|
57
|
-
enum_type.add_value(val.to_graphql)
|
86
|
+
# @return [Array<Schema::EnumValue>] An unfiltered list of all definitions
|
87
|
+
def all_enum_value_definitions
|
88
|
+
all_defns = if superclass.respond_to?(:all_enum_value_definitions)
|
89
|
+
superclass.all_enum_value_definitions
|
90
|
+
else
|
91
|
+
[]
|
58
92
|
end
|
59
|
-
|
60
|
-
|
93
|
+
|
94
|
+
@own_values && @own_values.each do |_key, value|
|
95
|
+
if value.is_a?(Array)
|
96
|
+
all_defns.concat(value)
|
97
|
+
else
|
98
|
+
all_defns << value
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
all_defns
|
103
|
+
end
|
104
|
+
|
105
|
+
# @return [Hash<String => GraphQL::Schema::EnumValue>] Possible values of this enum, keyed by name.
|
106
|
+
def values(context = GraphQL::Query::NullContext)
|
107
|
+
enum_values(context).each_with_object({}) { |val, obj| obj[val.graphql_name] = val }
|
61
108
|
end
|
62
109
|
|
63
110
|
# @return [Class] for handling `value(...)` inputs and building `GraphQL::Enum::EnumValue`s out of them
|
64
111
|
def enum_value_class(new_enum_value_class = nil)
|
65
112
|
if new_enum_value_class
|
66
113
|
@enum_value_class = new_enum_value_class
|
114
|
+
elsif defined?(@enum_value_class) && @enum_value_class
|
115
|
+
@enum_value_class
|
116
|
+
else
|
117
|
+
superclass <= GraphQL::Schema::Enum ? superclass.enum_value_class : nil
|
67
118
|
end
|
68
|
-
@enum_value_class || (superclass <= GraphQL::Schema::Enum ? superclass.enum_value_class : nil)
|
69
119
|
end
|
70
120
|
|
71
121
|
def kind
|
72
122
|
GraphQL::TypeKinds::ENUM
|
73
123
|
end
|
74
124
|
|
125
|
+
def validate_non_null_input(value_name, ctx, max_errors: nil)
|
126
|
+
allowed_values = ctx.warden.enum_values(self)
|
127
|
+
matching_value = allowed_values.find { |v| v.graphql_name == value_name }
|
128
|
+
|
129
|
+
if matching_value.nil?
|
130
|
+
GraphQL::Query::InputValidationResult.from_problem("Expected #{GraphQL::Language.serialize(value_name)} to be one of: #{allowed_values.map(&:graphql_name).join(', ')}")
|
131
|
+
else
|
132
|
+
nil
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
136
|
+
def coerce_result(value, ctx)
|
137
|
+
warden = ctx.warden
|
138
|
+
all_values = warden ? warden.enum_values(self) : values.each_value
|
139
|
+
enum_value = all_values.find { |val| val.value == value }
|
140
|
+
if enum_value
|
141
|
+
enum_value.graphql_name
|
142
|
+
else
|
143
|
+
raise self::UnresolvedValueError.new(enum: self, value: value, context: ctx)
|
144
|
+
end
|
145
|
+
end
|
146
|
+
|
147
|
+
def coerce_input(value_name, ctx)
|
148
|
+
all_values = ctx.warden ? ctx.warden.enum_values(self) : values.each_value
|
149
|
+
|
150
|
+
if v = all_values.find { |val| val.graphql_name == value_name }
|
151
|
+
v.value
|
152
|
+
elsif v = all_values.find { |val| val.value == value_name }
|
153
|
+
# this is for matching default values, which are "inputs", but they're
|
154
|
+
# the Ruby value, not the GraphQL string.
|
155
|
+
v.value
|
156
|
+
else
|
157
|
+
nil
|
158
|
+
end
|
159
|
+
end
|
160
|
+
|
161
|
+
def inherited(child_class)
|
162
|
+
child_class.const_set(:UnresolvedValueError, Class.new(Schema::Enum::UnresolvedValueError))
|
163
|
+
super
|
164
|
+
end
|
165
|
+
|
75
166
|
private
|
76
167
|
|
77
168
|
def own_values
|
@@ -13,12 +13,6 @@ module GraphQL
|
|
13
13
|
# # arguments to `value(...)` in Enum classes are passed here
|
14
14
|
# super
|
15
15
|
# end
|
16
|
-
#
|
17
|
-
# def to_graphql
|
18
|
-
# enum_value = super
|
19
|
-
# # customize the derived GraphQL::EnumValue here
|
20
|
-
# enum_value
|
21
|
-
# end
|
22
16
|
# end
|
23
17
|
#
|
24
18
|
# class BaseEnum < GraphQL::Schema::Enum
|
@@ -26,23 +20,31 @@ module GraphQL
|
|
26
20
|
# enum_value_class CustomEnumValue
|
27
21
|
# end
|
28
22
|
class EnumValue < GraphQL::Schema::Member
|
29
|
-
include GraphQL::Schema::Member::AcceptsDefinition
|
30
23
|
include GraphQL::Schema::Member::HasPath
|
24
|
+
include GraphQL::Schema::Member::HasAstNode
|
25
|
+
include GraphQL::Schema::Member::HasDirectives
|
26
|
+
include GraphQL::Schema::Member::HasDeprecationReason
|
31
27
|
|
32
28
|
attr_reader :graphql_name
|
33
29
|
|
34
30
|
# @return [Class] The enum type that owns this value
|
35
31
|
attr_reader :owner
|
36
32
|
|
37
|
-
|
38
|
-
attr_accessor :deprecation_reason
|
39
|
-
|
40
|
-
def initialize(graphql_name, desc = nil, owner:, description: nil, value: nil, deprecation_reason: nil, &block)
|
33
|
+
def initialize(graphql_name, desc = nil, owner:, ast_node: nil, directives: nil, description: nil, value: nil, deprecation_reason: nil, &block)
|
41
34
|
@graphql_name = graphql_name.to_s
|
35
|
+
GraphQL::NameValidator.validate!(@graphql_name)
|
42
36
|
@description = desc || description
|
43
37
|
@value = value.nil? ? @graphql_name : value
|
44
|
-
|
38
|
+
if deprecation_reason
|
39
|
+
self.deprecation_reason = deprecation_reason
|
40
|
+
end
|
45
41
|
@owner = owner
|
42
|
+
@ast_node = ast_node
|
43
|
+
if directives
|
44
|
+
directives.each do |dir_class, dir_options|
|
45
|
+
directive(dir_class, **dir_options)
|
46
|
+
end
|
47
|
+
end
|
46
48
|
|
47
49
|
if block_given?
|
48
50
|
instance_eval(&block)
|
@@ -63,15 +65,8 @@ module GraphQL
|
|
63
65
|
@value
|
64
66
|
end
|
65
67
|
|
66
|
-
|
67
|
-
|
68
|
-
enum_value = GraphQL::EnumType::EnumValue.new
|
69
|
-
enum_value.name = @graphql_name
|
70
|
-
enum_value.description = @description
|
71
|
-
enum_value.value = @value
|
72
|
-
enum_value.deprecation_reason = @deprecation_reason
|
73
|
-
enum_value.metadata[:type_class] = self
|
74
|
-
enum_value
|
68
|
+
def inspect
|
69
|
+
"#<#{self.class} #{path} @value=#{@value.inspect}#{description ? " @description=#{description.inspect}" : ""}>"
|
75
70
|
end
|
76
71
|
|
77
72
|
def visible?(_ctx); true; end
|
@@ -18,32 +18,62 @@ module GraphQL
|
|
18
18
|
next_args.delete(:last)
|
19
19
|
next_args.delete(:before)
|
20
20
|
next_args.delete(:after)
|
21
|
-
yield(object, next_args)
|
21
|
+
yield(object, next_args, arguments)
|
22
22
|
end
|
23
23
|
|
24
24
|
def after_resolve(value:, object:, arguments:, context:, memo:)
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
25
|
+
original_arguments = memo
|
26
|
+
# rename some inputs to avoid conflicts inside the block
|
27
|
+
maybe_lazy = value
|
28
|
+
value = nil
|
29
|
+
context.schema.after_lazy(maybe_lazy) do |resolved_value|
|
30
|
+
value = resolved_value
|
31
|
+
if value.is_a? GraphQL::ExecutionError
|
32
|
+
# This isn't even going to work because context doesn't have ast_node anymore
|
33
|
+
context.add_error(value)
|
34
|
+
nil
|
35
|
+
elsif value.nil?
|
36
|
+
nil
|
37
|
+
elsif value.is_a?(GraphQL::Pagination::Connection)
|
38
|
+
# update the connection with some things that may not have been provided
|
39
|
+
value.context ||= context
|
40
|
+
value.parent ||= object.object
|
41
|
+
value.first_value ||= original_arguments[:first]
|
42
|
+
value.after_value ||= original_arguments[:after]
|
43
|
+
value.last_value ||= original_arguments[:last]
|
44
|
+
value.before_value ||= original_arguments[:before]
|
45
|
+
value.arguments ||= original_arguments # rubocop:disable Development/ContextIsPassedCop -- unrelated .arguments method
|
46
|
+
value.field ||= field
|
47
|
+
if field.has_max_page_size? && !value.has_max_page_size_override?
|
48
|
+
value.max_page_size = field.max_page_size
|
49
|
+
end
|
50
|
+
if field.has_default_page_size? && !value.has_default_page_size_override?
|
51
|
+
value.default_page_size = field.default_page_size
|
52
|
+
end
|
53
|
+
if context.schema.new_connections? && (custom_t = context.schema.connections.edge_class_for_field(@field))
|
54
|
+
value.edge_class = custom_t
|
55
|
+
end
|
56
|
+
value
|
57
|
+
elsif context.schema.new_connections?
|
58
|
+
context.namespace(:connections)[:all_wrappers] ||= context.schema.connections.all_wrappers
|
59
|
+
context.schema.connections.wrap(field, object.object, value, original_arguments, context)
|
60
|
+
else
|
61
|
+
if object.is_a?(GraphQL::Schema::Object)
|
62
|
+
object = object.object
|
63
|
+
end
|
64
|
+
connection_class = GraphQL::Relay::BaseConnection.connection_for_nodes(value)
|
65
|
+
connection_class.new(
|
66
|
+
value,
|
67
|
+
original_arguments,
|
68
|
+
field: field,
|
69
|
+
max_page_size: field.max_page_size,
|
70
|
+
default_page_size: field.default_page_size,
|
71
|
+
parent: object,
|
72
|
+
context: context,
|
73
|
+
)
|
34
74
|
end
|
35
|
-
connection_class = GraphQL::Relay::BaseConnection.connection_for_nodes(value)
|
36
|
-
connection_class.new(
|
37
|
-
value,
|
38
|
-
arguments,
|
39
|
-
field: field,
|
40
|
-
max_page_size: field.max_page_size,
|
41
|
-
parent: object,
|
42
|
-
context: context,
|
43
|
-
)
|
44
75
|
end
|
45
76
|
end
|
46
|
-
|
47
77
|
end
|
48
78
|
end
|
49
79
|
end
|