graphql 1.9.21 → 2.0.0
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 +44 -7
- 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 +63 -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 +22 -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 +29 -2
- 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 +22 -0
- data/lib/graphql/dataloader/request.rb +19 -0
- data/lib/graphql/dataloader/request_all.rb +19 -0
- data/lib/graphql/dataloader/source.rb +155 -0
- data/lib/graphql/dataloader.rb +308 -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 +108 -14
- data/lib/graphql/execution/instrumentation.rb +1 -1
- 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 +37 -25
- data/lib/graphql/execution/interpreter/runtime.rb +715 -387
- data/lib/graphql/execution/interpreter.rb +32 -31
- data/lib/graphql/execution/lazy/lazy_method_map.rb +4 -0
- data/lib/graphql/execution/lazy.rb +5 -1
- data/lib/graphql/execution/lookahead.rb +32 -114
- data/lib/graphql/execution/multiplex.rb +60 -92
- data/lib/graphql/execution.rb +11 -3
- 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 +27 -17
- data/lib/graphql/introspection.rb +99 -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 +99 -63
- data/lib/graphql/language/lexer.rb +53 -27
- data/lib/graphql/language/lexer.rl +5 -3
- data/lib/graphql/language/nodes.rb +64 -93
- data/lib/graphql/language/parser.rb +929 -896
- data/lib/graphql/language/parser.y +125 -102
- data/lib/graphql/language/printer.rb +11 -2
- 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 +77 -0
- data/lib/graphql/pagination/connection.rb +226 -0
- data/lib/graphql/pagination/connections.rb +134 -0
- data/lib/graphql/pagination/mongoid_relation_connection.rb +25 -0
- data/lib/graphql/pagination/relation_connection.rb +226 -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 +51 -190
- data/lib/graphql/query/fingerprint.rb +26 -0
- data/lib/graphql/query/input_validation_result.rb +23 -6
- data/lib/graphql/query/literal_input.rb +26 -11
- data/lib/graphql/query/null_context.rb +24 -8
- data/lib/graphql/query/validation_pipeline.rb +12 -38
- data/lib/graphql/query/variable_validation_error.rb +2 -2
- data/lib/graphql/query/variables.rb +26 -9
- data/lib/graphql/query.rb +62 -32
- data/lib/graphql/railtie.rb +6 -102
- data/lib/graphql/rake_task/validate.rb +3 -0
- data/lib/graphql/rake_task.rb +12 -9
- data/lib/graphql/relay/range_add.rb +23 -9
- 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 +240 -0
- data/lib/graphql/schema/argument.rb +262 -28
- 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 +319 -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/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 +115 -22
- data/lib/graphql/schema/enum_value.rb +16 -21
- data/lib/graphql/schema/field/connection_extension.rb +46 -20
- data/lib/graphql/schema/field/scope_extension.rb +1 -1
- data/lib/graphql/schema/field.rb +376 -291
- 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 +147 -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 +3 -2
- data/lib/graphql/schema/list.rb +46 -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 +23 -14
- data/lib/graphql/schema/member/has_arguments.rb +212 -23
- 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 +98 -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/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 -65
- data/lib/graphql/schema/printer.rb +16 -35
- data/lib/graphql/schema/relay_classic_mutation.rb +57 -32
- data/lib/graphql/schema/resolver/has_payload_type.rb +34 -4
- data/lib/graphql/schema/resolver.rb +133 -79
- data/lib/graphql/schema/scalar.rb +40 -15
- data/lib/graphql/schema/subscription.rb +57 -21
- data/lib/graphql/schema/timeout.rb +29 -15
- data/lib/graphql/schema/type_expression.rb +21 -13
- data/lib/graphql/schema/type_membership.rb +19 -5
- data/lib/graphql/schema/union.rb +39 -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 +182 -32
- data/lib/graphql/schema/wrapper.rb +0 -5
- data/lib/graphql/schema.rb +687 -891
- data/lib/graphql/static_validation/all_rules.rb +2 -0
- data/lib/graphql/static_validation/base_visitor.rb +21 -31
- data/lib/graphql/static_validation/definition_dependencies.rb +0 -1
- data/lib/graphql/static_validation/error.rb +3 -1
- data/lib/graphql/static_validation/literal_validator.rb +51 -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 +1 -1
- 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/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 +1 -1
- 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 +123 -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 +111 -52
- 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 +14 -1
- 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 +57 -29
- 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 +16 -8
- data/lib/graphql/types/iso_8601_date_time.rb +32 -10
- data/lib/graphql/types/relay/base_connection.rb +6 -88
- data/lib/graphql/types/relay/base_edge.rb +2 -34
- data/lib/graphql/types/relay/connection_behaviors.rb +170 -0
- data/lib/graphql/types/relay/default_relay.rb +21 -0
- data/lib/graphql/types/relay/edge_behaviors.rb +64 -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 +97 -231
- 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/interpreter/hash_response.rb +0 -46
- 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/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
@@ -1,50 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
module GraphQL
|
3
|
-
module Execution
|
4
|
-
# @api private
|
5
|
-
module Typecast
|
6
|
-
# @return [Boolean]
|
7
|
-
def self.subtype?(parent_type, child_type)
|
8
|
-
if parent_type == child_type
|
9
|
-
# Equivalent types are subtypes
|
10
|
-
true
|
11
|
-
elsif child_type.is_a?(GraphQL::NonNullType)
|
12
|
-
# A non-null type is a subtype of a nullable type
|
13
|
-
# if its inner type is a subtype of that type
|
14
|
-
if parent_type.is_a?(GraphQL::NonNullType)
|
15
|
-
subtype?(parent_type.of_type, child_type.of_type)
|
16
|
-
else
|
17
|
-
subtype?(parent_type, child_type.of_type)
|
18
|
-
end
|
19
|
-
else
|
20
|
-
case parent_type
|
21
|
-
when GraphQL::InterfaceType
|
22
|
-
# A type is a subtype of an interface
|
23
|
-
# if it implements that interface
|
24
|
-
case child_type
|
25
|
-
when GraphQL::ObjectType
|
26
|
-
child_type.interfaces.include?(parent_type)
|
27
|
-
else
|
28
|
-
false
|
29
|
-
end
|
30
|
-
when GraphQL::UnionType
|
31
|
-
# A type is a subtype of that union
|
32
|
-
# if the union includes that type
|
33
|
-
parent_type.possible_types.include?(child_type)
|
34
|
-
when GraphQL::ListType
|
35
|
-
# A list type is a subtype of another list type
|
36
|
-
# if its inner type is a subtype of the other inner type
|
37
|
-
case child_type
|
38
|
-
when GraphQL::ListType
|
39
|
-
subtype?(parent_type.of_type, child_type.of_type)
|
40
|
-
else
|
41
|
-
false
|
42
|
-
end
|
43
|
-
else
|
44
|
-
false
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
@@ -1,59 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
module GraphQL
|
3
|
-
class Field
|
4
|
-
# Create resolve procs ahead of time based on a {GraphQL::Field}'s `name`, `property`, and `hash_key` configuration.
|
5
|
-
module Resolve
|
6
|
-
module_function
|
7
|
-
|
8
|
-
# @param field [GraphQL::Field] A field that needs a resolve proc
|
9
|
-
# @return [Proc] A resolver for this field, based on its config
|
10
|
-
def create_proc(field)
|
11
|
-
if field.property
|
12
|
-
MethodResolve.new(field)
|
13
|
-
elsif !field.hash_key.nil?
|
14
|
-
HashKeyResolve.new(field.hash_key)
|
15
|
-
else
|
16
|
-
NameResolve.new(field)
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
# These only require `obj` as input
|
21
|
-
class BuiltInResolve
|
22
|
-
end
|
23
|
-
|
24
|
-
# Resolve the field by `public_send`ing `@method_name`
|
25
|
-
class MethodResolve < BuiltInResolve
|
26
|
-
def initialize(field)
|
27
|
-
@method_name = field.property.to_sym
|
28
|
-
end
|
29
|
-
|
30
|
-
def call(obj, args, ctx)
|
31
|
-
obj.public_send(@method_name)
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
# Resolve the field by looking up `@hash_key` with `#[]`
|
36
|
-
class HashKeyResolve < BuiltInResolve
|
37
|
-
def initialize(hash_key)
|
38
|
-
@hash_key = hash_key
|
39
|
-
end
|
40
|
-
|
41
|
-
def call(obj, args, ctx)
|
42
|
-
obj[@hash_key]
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
# Call the field's name at query-time since
|
47
|
-
# it might have changed
|
48
|
-
class NameResolve < BuiltInResolve
|
49
|
-
def initialize(field)
|
50
|
-
@field = field
|
51
|
-
end
|
52
|
-
|
53
|
-
def call(obj, args, ctx)
|
54
|
-
obj.public_send(@field.name)
|
55
|
-
end
|
56
|
-
end
|
57
|
-
end
|
58
|
-
end
|
59
|
-
end
|
data/lib/graphql/field.rb
DELETED
@@ -1,330 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
require "graphql/field/resolve"
|
3
|
-
|
4
|
-
module GraphQL
|
5
|
-
# {Field}s belong to {ObjectType}s and {InterfaceType}s.
|
6
|
-
#
|
7
|
-
# They're usually created with the `field` helper. If you create it by hand, make sure {#name} is a String.
|
8
|
-
#
|
9
|
-
# A field must have a return type, but if you want to defer the return type calculation until later,
|
10
|
-
# you can pass a proc for the return type. That proc will be called when the schema is defined.
|
11
|
-
#
|
12
|
-
# @example Lazy type resolution
|
13
|
-
# # If the field's type isn't defined yet, you can pass a proc
|
14
|
-
# field :city, -> { TypeForModelName.find("City") }
|
15
|
-
#
|
16
|
-
# For complex field definition, you can pass a block to the `field` helper, eg `field :name do ... end`.
|
17
|
-
# This block is equivalent to calling `GraphQL::Field.define { ... }`.
|
18
|
-
#
|
19
|
-
# @example Defining a field with a block
|
20
|
-
# field :city, CityType do
|
21
|
-
# # field definition continues inside the block
|
22
|
-
# end
|
23
|
-
#
|
24
|
-
# ## Resolve
|
25
|
-
#
|
26
|
-
# Fields have `resolve` functions to determine their values at query-time.
|
27
|
-
# The default implementation is to call a method on the object based on the field name.
|
28
|
-
#
|
29
|
-
# @example Create a field which calls a method with the same name.
|
30
|
-
# GraphQL::ObjectType.define do
|
31
|
-
# field :name, types.String, "The name of this thing "
|
32
|
-
# end
|
33
|
-
#
|
34
|
-
# You can specify a custom proc with the `resolve` helper.
|
35
|
-
#
|
36
|
-
# There are some shortcuts for common `resolve` implementations:
|
37
|
-
# - Provide `property:` to call a method with a different name than the field name
|
38
|
-
# - Provide `hash_key:` to resolve the field by doing a key lookup, eg `obj[:my_hash_key]`
|
39
|
-
#
|
40
|
-
# @example Create a field that calls a different method on the object
|
41
|
-
# GraphQL::ObjectType.define do
|
42
|
-
# # use the `property` keyword:
|
43
|
-
# field :firstName, types.String, property: :first_name
|
44
|
-
# end
|
45
|
-
#
|
46
|
-
# @example Create a field looks up with `[hash_key]`
|
47
|
-
# GraphQL::ObjectType.define do
|
48
|
-
# # use the `hash_key` keyword:
|
49
|
-
# field :firstName, types.String, hash_key: :first_name
|
50
|
-
# end
|
51
|
-
#
|
52
|
-
# ## Arguments
|
53
|
-
#
|
54
|
-
# Fields can take inputs; they're called arguments. You can define them with the `argument` helper.
|
55
|
-
#
|
56
|
-
# @example Create a field with an argument
|
57
|
-
# field :students, types[StudentType] do
|
58
|
-
# argument :grade, types.Int
|
59
|
-
# resolve ->(obj, args, ctx) {
|
60
|
-
# Student.where(grade: args[:grade])
|
61
|
-
# }
|
62
|
-
# end
|
63
|
-
#
|
64
|
-
# They can have default values which will be provided to `resolve` if the query doesn't include a value.
|
65
|
-
#
|
66
|
-
# @example Argument with a default value
|
67
|
-
# field :events, types[EventType] do
|
68
|
-
# # by default, don't include past events
|
69
|
-
# argument :includePast, types.Boolean, default_value: false
|
70
|
-
# resolve ->(obj, args, ctx) {
|
71
|
-
# args[:includePast] # => false if no value was provided in the query
|
72
|
-
# # ...
|
73
|
-
# }
|
74
|
-
# end
|
75
|
-
#
|
76
|
-
# Only certain types maybe used for inputs:
|
77
|
-
#
|
78
|
-
# - Scalars
|
79
|
-
# - Enums
|
80
|
-
# - Input Objects
|
81
|
-
# - Lists of those types
|
82
|
-
#
|
83
|
-
# Input types may also be non-null -- in that case, the query will fail
|
84
|
-
# if the input is not present.
|
85
|
-
#
|
86
|
-
# ## Complexity
|
87
|
-
#
|
88
|
-
# Fields can have _complexity_ values which describe the computation cost of resolving the field.
|
89
|
-
# You can provide the complexity as a constant with `complexity:` or as a proc, with the `complexity` helper.
|
90
|
-
#
|
91
|
-
# @example Custom complexity values
|
92
|
-
# # Complexity can be a number or a proc.
|
93
|
-
#
|
94
|
-
# # Complexity can be defined with a keyword:
|
95
|
-
# field :expensive_calculation, !types.Int, complexity: 10
|
96
|
-
#
|
97
|
-
# # Or inside the block:
|
98
|
-
# field :expensive_calculation_2, !types.Int do
|
99
|
-
# complexity ->(ctx, args, child_complexity) { ctx[:current_user].staff? ? 0 : 10 }
|
100
|
-
# end
|
101
|
-
#
|
102
|
-
# @example Calculating the complexity of a list field
|
103
|
-
# field :items, types[ItemType] do
|
104
|
-
# argument :limit, !types.Int
|
105
|
-
# # Multiply the child complexity by the possible items on the list
|
106
|
-
# complexity ->(ctx, args, child_complexity) { child_complexity * args[:limit] }
|
107
|
-
# end
|
108
|
-
#
|
109
|
-
# @example Creating a field, then assigning it to a type
|
110
|
-
# name_field = GraphQL::Field.define do
|
111
|
-
# name("Name")
|
112
|
-
# type(!types.String)
|
113
|
-
# description("The name of this thing")
|
114
|
-
# resolve ->(object, arguments, context) { object.name }
|
115
|
-
# end
|
116
|
-
#
|
117
|
-
# NamedType = GraphQL::ObjectType.define do
|
118
|
-
# # The second argument may be a GraphQL::Field
|
119
|
-
# field :name, name_field
|
120
|
-
# end
|
121
|
-
#
|
122
|
-
class Field
|
123
|
-
include GraphQL::Define::InstanceDefinable
|
124
|
-
accepts_definitions :name, :description, :deprecation_reason,
|
125
|
-
:resolve, :lazy_resolve,
|
126
|
-
:type, :arguments,
|
127
|
-
:property, :hash_key, :complexity,
|
128
|
-
:mutation, :function,
|
129
|
-
:edge_class,
|
130
|
-
:relay_node_field,
|
131
|
-
:relay_nodes_field,
|
132
|
-
:subscription_scope,
|
133
|
-
:trace,
|
134
|
-
:introspection,
|
135
|
-
argument: GraphQL::Define::AssignArgument
|
136
|
-
|
137
|
-
ensure_defined(
|
138
|
-
:name, :deprecation_reason, :description, :description=, :property, :hash_key,
|
139
|
-
:mutation, :arguments, :complexity, :function,
|
140
|
-
:resolve, :resolve=, :lazy_resolve, :lazy_resolve=, :lazy_resolve_proc, :resolve_proc,
|
141
|
-
:type, :type=, :name=, :property=, :hash_key=,
|
142
|
-
:relay_node_field, :relay_nodes_field, :edges?, :edge_class, :subscription_scope,
|
143
|
-
:introspection?
|
144
|
-
)
|
145
|
-
|
146
|
-
# @return [Boolean] True if this is the Relay find-by-id field
|
147
|
-
attr_accessor :relay_node_field
|
148
|
-
|
149
|
-
# @return [Boolean] True if this is the Relay find-by-ids field
|
150
|
-
attr_accessor :relay_nodes_field
|
151
|
-
|
152
|
-
# @return [<#call(obj, args, ctx)>] A proc-like object which can be called to return the field's value
|
153
|
-
attr_reader :resolve_proc
|
154
|
-
|
155
|
-
# @return [<#call(obj, args, ctx)>] A proc-like object which can be called trigger a lazy resolution
|
156
|
-
attr_reader :lazy_resolve_proc
|
157
|
-
|
158
|
-
# @return [String] The name of this field on its {GraphQL::ObjectType} (or {GraphQL::InterfaceType})
|
159
|
-
attr_reader :name
|
160
|
-
alias :graphql_name :name
|
161
|
-
|
162
|
-
# @return [String, nil] The client-facing description of this field
|
163
|
-
attr_accessor :description
|
164
|
-
|
165
|
-
# @return [String, nil] The client-facing reason why this field is deprecated (if present, the field is deprecated)
|
166
|
-
attr_accessor :deprecation_reason
|
167
|
-
|
168
|
-
# @return [Hash<String => GraphQL::Argument>] Map String argument names to their {GraphQL::Argument} implementations
|
169
|
-
attr_accessor :arguments
|
170
|
-
|
171
|
-
# @return [GraphQL::Relay::Mutation, nil] The mutation this field was derived from, if it was derived from a mutation
|
172
|
-
attr_accessor :mutation
|
173
|
-
|
174
|
-
# @return [Numeric, Proc] The complexity for this field (default: 1), as a constant or a proc like `->(query_ctx, args, child_complexity) { } # Numeric`
|
175
|
-
attr_accessor :complexity
|
176
|
-
|
177
|
-
# @return [Symbol, nil] The method to call on `obj` to return this field (overrides {#name} if present)
|
178
|
-
attr_reader :property
|
179
|
-
|
180
|
-
# @return [Object, nil] The key to access with `obj.[]` to resolve this field (overrides {#name} if present)
|
181
|
-
attr_reader :hash_key
|
182
|
-
|
183
|
-
# @return [Object, GraphQL::Function] The function used to derive this field
|
184
|
-
attr_accessor :function
|
185
|
-
|
186
|
-
attr_accessor :arguments_class
|
187
|
-
|
188
|
-
attr_writer :connection
|
189
|
-
attr_writer :introspection
|
190
|
-
|
191
|
-
# @return [nil, String] Prefix for subscription names from this field
|
192
|
-
attr_accessor :subscription_scope
|
193
|
-
|
194
|
-
# @return [Boolean] True if this field should be traced. By default, fields are only traced if they are not a ScalarType or EnumType.
|
195
|
-
attr_accessor :trace
|
196
|
-
|
197
|
-
attr_accessor :ast_node
|
198
|
-
|
199
|
-
# @return [Boolean]
|
200
|
-
def connection?
|
201
|
-
@connection
|
202
|
-
end
|
203
|
-
|
204
|
-
# @return [nil, Class]
|
205
|
-
# @api private
|
206
|
-
attr_accessor :edge_class
|
207
|
-
|
208
|
-
# @return [Boolean]
|
209
|
-
def edges?
|
210
|
-
!!@edge_class
|
211
|
-
end
|
212
|
-
|
213
|
-
# @return [nil, Integer]
|
214
|
-
attr_accessor :connection_max_page_size
|
215
|
-
|
216
|
-
def initialize
|
217
|
-
@complexity = 1
|
218
|
-
@arguments = {}
|
219
|
-
@resolve_proc = build_default_resolver
|
220
|
-
@lazy_resolve_proc = DefaultLazyResolve
|
221
|
-
@relay_node_field = false
|
222
|
-
@connection = false
|
223
|
-
@connection_max_page_size = nil
|
224
|
-
@edge_class = nil
|
225
|
-
@trace = nil
|
226
|
-
@introspection = false
|
227
|
-
end
|
228
|
-
|
229
|
-
def initialize_copy(other)
|
230
|
-
ensure_defined
|
231
|
-
super
|
232
|
-
@arguments = other.arguments.dup
|
233
|
-
end
|
234
|
-
|
235
|
-
# @return [Boolean] Is this field a predefined introspection field?
|
236
|
-
def introspection?
|
237
|
-
@introspection
|
238
|
-
end
|
239
|
-
|
240
|
-
# Get a value for this field
|
241
|
-
# @example resolving a field value
|
242
|
-
# field.resolve(obj, args, ctx)
|
243
|
-
#
|
244
|
-
# @param object [Object] The object this field belongs to
|
245
|
-
# @param arguments [Hash] Arguments declared in the query
|
246
|
-
# @param context [GraphQL::Query::Context]
|
247
|
-
def resolve(object, arguments, context)
|
248
|
-
resolve_proc.call(object, arguments, context)
|
249
|
-
end
|
250
|
-
|
251
|
-
# Provide a new callable for this field's resolve function. If `nil`,
|
252
|
-
# a new resolve proc will be build based on its {#name}, {#property} or {#hash_key}.
|
253
|
-
# @param new_resolve_proc [<#call(obj, args, ctx)>, nil]
|
254
|
-
def resolve=(new_resolve_proc)
|
255
|
-
@resolve_proc = new_resolve_proc || build_default_resolver
|
256
|
-
end
|
257
|
-
|
258
|
-
def type=(new_return_type)
|
259
|
-
@clean_type = nil
|
260
|
-
@dirty_type = new_return_type
|
261
|
-
end
|
262
|
-
|
263
|
-
# Get the return type for this field.
|
264
|
-
def type
|
265
|
-
@clean_type ||= GraphQL::BaseType.resolve_related_type(@dirty_type)
|
266
|
-
end
|
267
|
-
|
268
|
-
def name=(new_name)
|
269
|
-
old_name = @name
|
270
|
-
@name = new_name
|
271
|
-
|
272
|
-
if old_name != new_name && @resolve_proc.is_a?(Field::Resolve::NameResolve)
|
273
|
-
# Since the NameResolve would use the old field name,
|
274
|
-
# reset resolve proc when the name has changed
|
275
|
-
self.resolve = nil
|
276
|
-
end
|
277
|
-
end
|
278
|
-
|
279
|
-
# @param new_property [Symbol] A method to call to resolve this field. Overrides the existing resolve proc.
|
280
|
-
def property=(new_property)
|
281
|
-
@property = new_property
|
282
|
-
self.resolve = nil # reset resolve proc
|
283
|
-
end
|
284
|
-
|
285
|
-
# @param new_hash_key [Symbol] A key to access with `#[key]` to resolve this field. Overrides the existing resolve proc.
|
286
|
-
def hash_key=(new_hash_key)
|
287
|
-
@hash_key = new_hash_key
|
288
|
-
self.resolve = nil # reset resolve proc
|
289
|
-
end
|
290
|
-
|
291
|
-
def to_s
|
292
|
-
"<Field name:#{name || "not-named"} desc:#{description} resolve:#{resolve_proc}>"
|
293
|
-
end
|
294
|
-
|
295
|
-
# If {#resolve} returned an object which should be handled lazily,
|
296
|
-
# this method will be called later to force the object to return its value.
|
297
|
-
# @param obj [Object] The {#resolve}-provided object, registered with {Schema#lazy_resolve}
|
298
|
-
# @param args [GraphQL::Query::Arguments] Arguments to this field
|
299
|
-
# @param ctx [GraphQL::Query::Context] Context for this field
|
300
|
-
# @return [Object] The result of calling the registered method on `obj`
|
301
|
-
def lazy_resolve(obj, args, ctx)
|
302
|
-
@lazy_resolve_proc.call(obj, args, ctx)
|
303
|
-
end
|
304
|
-
|
305
|
-
# Assign a new resolve proc to this field. Used for {#lazy_resolve}
|
306
|
-
def lazy_resolve=(new_lazy_resolve_proc)
|
307
|
-
@lazy_resolve_proc = new_lazy_resolve_proc
|
308
|
-
end
|
309
|
-
|
310
|
-
# Prepare a lazy value for this field. It may be `then`-ed and resolved later.
|
311
|
-
# @return [GraphQL::Execution::Lazy] A lazy wrapper around `obj` and its registered method name
|
312
|
-
def prepare_lazy(obj, args, ctx)
|
313
|
-
GraphQL::Execution::Lazy.new {
|
314
|
-
lazy_resolve(obj, args, ctx)
|
315
|
-
}
|
316
|
-
end
|
317
|
-
|
318
|
-
private
|
319
|
-
|
320
|
-
def build_default_resolver
|
321
|
-
GraphQL::Field::Resolve.create_proc(self)
|
322
|
-
end
|
323
|
-
|
324
|
-
module DefaultLazyResolve
|
325
|
-
def self.call(obj, args, ctx)
|
326
|
-
ctx.schema.sync_lazy(obj)
|
327
|
-
end
|
328
|
-
end
|
329
|
-
end
|
330
|
-
end
|
data/lib/graphql/float_type.rb
DELETED
data/lib/graphql/function.rb
DELETED
@@ -1,153 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
module GraphQL
|
3
|
-
# A reusable container for field logic, including arguments, resolve, return type, and documentation.
|
4
|
-
#
|
5
|
-
# Class-level values defined with the DSL will be inherited,
|
6
|
-
# so {GraphQL::Function}s can extend one another.
|
7
|
-
#
|
8
|
-
# It's OK to override the instance methods here in order to customize behavior of instances.
|
9
|
-
#
|
10
|
-
# @example A reusable GraphQL::Function attached as a field
|
11
|
-
# class FindRecord < GraphQL::Function
|
12
|
-
# attr_reader :type
|
13
|
-
#
|
14
|
-
# def initialize(model:, type:)
|
15
|
-
# @model = model
|
16
|
-
# @type = type
|
17
|
-
# end
|
18
|
-
#
|
19
|
-
# argument :id, GraphQL::ID_TYPE
|
20
|
-
#
|
21
|
-
# def call(obj, args, ctx)
|
22
|
-
# @model.find(args.id)
|
23
|
-
# end
|
24
|
-
# end
|
25
|
-
#
|
26
|
-
# QueryType = GraphQL::ObjectType.define do
|
27
|
-
# name "Query"
|
28
|
-
# field :post, function: FindRecord.new(model: Post, type: PostType)
|
29
|
-
# field :comment, function: FindRecord.new(model: Comment, type: CommentType)
|
30
|
-
# end
|
31
|
-
#
|
32
|
-
# @see {GraphQL::Schema::Resolver} for a replacement for `GraphQL::Function`
|
33
|
-
class Function
|
34
|
-
# @return [Hash<String => GraphQL::Argument>] Arguments, keyed by name
|
35
|
-
def arguments
|
36
|
-
self.class.arguments
|
37
|
-
end
|
38
|
-
|
39
|
-
# @return [GraphQL::BaseType] Return type
|
40
|
-
def type
|
41
|
-
self.class.type
|
42
|
-
end
|
43
|
-
|
44
|
-
# @return [Object] This function's resolver
|
45
|
-
def call(obj, args, ctx)
|
46
|
-
raise GraphQL::RequiredImplementationMissingError
|
47
|
-
end
|
48
|
-
|
49
|
-
# @return [String, nil]
|
50
|
-
def description
|
51
|
-
self.class.description
|
52
|
-
end
|
53
|
-
|
54
|
-
# @return [String, nil]
|
55
|
-
def deprecation_reason
|
56
|
-
self.class.deprecation_reason
|
57
|
-
end
|
58
|
-
|
59
|
-
# @return [Integer, Proc]
|
60
|
-
def complexity
|
61
|
-
self.class.complexity || 1
|
62
|
-
end
|
63
|
-
|
64
|
-
class << self
|
65
|
-
# Define an argument for this function & its subclasses
|
66
|
-
# @see {GraphQL::Field} same arguments as the `argument` definition helper
|
67
|
-
# @return [void]
|
68
|
-
def argument(*args, **kwargs, &block)
|
69
|
-
argument = GraphQL::Argument.from_dsl(*args, **kwargs, &block)
|
70
|
-
own_arguments[argument.name] = argument
|
71
|
-
nil
|
72
|
-
end
|
73
|
-
|
74
|
-
# @return [Hash<String => GraphQL::Argument>] Arguments for this function class, including inherited arguments
|
75
|
-
def arguments
|
76
|
-
if parent_function?
|
77
|
-
own_arguments.merge(superclass.arguments)
|
78
|
-
else
|
79
|
-
own_arguments.dup
|
80
|
-
end
|
81
|
-
end
|
82
|
-
|
83
|
-
# Provides shorthand access to GraphQL's built-in types
|
84
|
-
def types
|
85
|
-
GraphQL::Define::TypeDefiner.instance
|
86
|
-
end
|
87
|
-
|
88
|
-
# Get or set the return type for this function class & descendants
|
89
|
-
# @return [GraphQL::BaseType]
|
90
|
-
def type(premade_type = nil, &block)
|
91
|
-
if block_given?
|
92
|
-
@type = GraphQL::ObjectType.define(&block)
|
93
|
-
elsif premade_type
|
94
|
-
@type = premade_type
|
95
|
-
elsif parent_function?
|
96
|
-
@type || superclass.type
|
97
|
-
else
|
98
|
-
@type
|
99
|
-
end
|
100
|
-
end
|
101
|
-
|
102
|
-
def build_field(function)
|
103
|
-
GraphQL::Field.define(
|
104
|
-
arguments: function.arguments,
|
105
|
-
complexity: function.complexity,
|
106
|
-
type: function.type,
|
107
|
-
resolve: function,
|
108
|
-
description: function.description,
|
109
|
-
function: function,
|
110
|
-
deprecation_reason: function.deprecation_reason,
|
111
|
-
)
|
112
|
-
end
|
113
|
-
|
114
|
-
# Class-level reader/writer which is inherited
|
115
|
-
# @api private
|
116
|
-
def self.inherited_value(name)
|
117
|
-
self.class_eval <<-RUBY
|
118
|
-
def #{name}(new_value = nil)
|
119
|
-
if new_value
|
120
|
-
@#{name} = new_value
|
121
|
-
elsif parent_function?
|
122
|
-
@#{name} || superclass.#{name}
|
123
|
-
else
|
124
|
-
@#{name}
|
125
|
-
end
|
126
|
-
end
|
127
|
-
RUBY
|
128
|
-
end
|
129
|
-
|
130
|
-
# @!method description(new_value = nil)
|
131
|
-
# Get or set this class's description
|
132
|
-
inherited_value(:description)
|
133
|
-
# @!method deprecation_reason(new_value = nil)
|
134
|
-
# Get or set this class's deprecation_reason
|
135
|
-
inherited_value(:deprecation_reason)
|
136
|
-
# @!method complexity(new_value = nil)
|
137
|
-
# Get or set this class's complexity
|
138
|
-
inherited_value(:complexity)
|
139
|
-
|
140
|
-
private
|
141
|
-
|
142
|
-
# Does this function inherit from another function?
|
143
|
-
def parent_function?
|
144
|
-
superclass <= GraphQL::Function
|
145
|
-
end
|
146
|
-
|
147
|
-
# Arguments defined on this class (not superclasses)
|
148
|
-
def own_arguments
|
149
|
-
@own_arguments ||= {}
|
150
|
-
end
|
151
|
-
end
|
152
|
-
end
|
153
|
-
end
|
data/lib/graphql/id_type.rb
DELETED