graphql 1.13.25 → 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/graphql/analysis/ast/query_complexity.rb +1 -1
- data/lib/graphql/analysis/ast/query_depth.rb +0 -1
- data/lib/graphql/analysis/ast/visitor.rb +1 -1
- data/lib/graphql/analysis/ast.rb +0 -10
- data/lib/graphql/analysis.rb +0 -7
- data/lib/graphql/backtrace/table.rb +0 -18
- data/lib/graphql/backtrace/tracer.rb +1 -2
- data/lib/graphql/backtrace.rb +2 -8
- data/lib/graphql/dig.rb +1 -1
- data/lib/graphql/execution/errors.rb +1 -9
- data/lib/graphql/execution/interpreter/runtime.rb +6 -13
- data/lib/graphql/execution/interpreter.rb +0 -22
- data/lib/graphql/execution/lazy.rb +1 -1
- data/lib/graphql/execution/lookahead.rb +6 -13
- data/lib/graphql/execution/multiplex.rb +50 -107
- data/lib/graphql/execution.rb +11 -3
- data/lib/graphql/introspection/directive_type.rb +2 -2
- data/lib/graphql/introspection/dynamic_fields.rb +3 -8
- data/lib/graphql/introspection/entry_points.rb +2 -15
- data/lib/graphql/introspection/field_type.rb +1 -1
- data/lib/graphql/introspection/schema_type.rb +2 -2
- data/lib/graphql/introspection/type_type.rb +5 -5
- data/lib/graphql/language/document_from_schema_definition.rb +0 -17
- data/lib/graphql/language/nodes.rb +0 -3
- data/lib/graphql/pagination/connections.rb +2 -28
- data/lib/graphql/pagination/relation_connection.rb +0 -2
- data/lib/graphql/query/context.rb +1 -185
- data/lib/graphql/query/input_validation_result.rb +0 -9
- data/lib/graphql/query/literal_input.rb +8 -13
- data/lib/graphql/query/validation_pipeline.rb +6 -34
- data/lib/graphql/query/variable_validation_error.rb +2 -2
- data/lib/graphql/query/variables.rb +8 -31
- data/lib/graphql/query.rb +5 -34
- data/lib/graphql/railtie.rb +0 -104
- data/lib/graphql/relay/range_add.rb +0 -4
- data/lib/graphql/relay.rb +0 -15
- data/lib/graphql/schema/addition.rb +1 -8
- data/lib/graphql/schema/argument.rb +6 -28
- data/lib/graphql/schema/build_from_definition.rb +7 -9
- data/lib/graphql/schema/directive.rb +1 -22
- data/lib/graphql/schema/enum.rb +3 -19
- data/lib/graphql/schema/enum_value.rb +1 -23
- data/lib/graphql/schema/field.rb +22 -221
- data/lib/graphql/schema/input_object.rb +17 -65
- data/lib/graphql/schema/interface.rb +1 -30
- data/lib/graphql/schema/introspection_system.rb +3 -8
- data/lib/graphql/schema/late_bound_type.rb +2 -2
- data/lib/graphql/schema/list.rb +3 -24
- data/lib/graphql/schema/loader.rb +0 -1
- data/lib/graphql/schema/member/base_dsl_methods.rb +1 -6
- data/lib/graphql/schema/member/build_type.rb +4 -6
- data/lib/graphql/schema/member/has_arguments.rb +16 -20
- data/lib/graphql/schema/member/has_fields.rb +3 -3
- data/lib/graphql/schema/member/has_interfaces.rb +1 -13
- data/lib/graphql/schema/member/validates_input.rb +2 -2
- data/lib/graphql/schema/member.rb +0 -6
- data/lib/graphql/schema/mutation.rb +0 -9
- data/lib/graphql/schema/non_null.rb +3 -9
- data/lib/graphql/schema/object.rb +0 -40
- data/lib/graphql/schema/relay_classic_mutation.rb +17 -28
- data/lib/graphql/schema/scalar.rb +1 -16
- data/lib/graphql/schema/union.rb +0 -16
- data/lib/graphql/schema/warden.rb +3 -12
- data/lib/graphql/schema/wrapper.rb +0 -5
- data/lib/graphql/schema.rb +106 -945
- data/lib/graphql/static_validation/base_visitor.rb +4 -21
- data/lib/graphql/static_validation/rules/directives_are_in_valid_locations.rb +12 -12
- data/lib/graphql/static_validation/validator.rb +2 -24
- data/lib/graphql/static_validation.rb +0 -2
- data/lib/graphql/subscriptions/default_subscription_resolve_extension.rb +38 -1
- data/lib/graphql/subscriptions/event.rb +1 -1
- data/lib/graphql/subscriptions/instrumentation.rb +0 -51
- data/lib/graphql/subscriptions.rb +4 -13
- data/lib/graphql/tracing/data_dog_tracing.rb +16 -20
- data/lib/graphql/tracing/platform_tracing.rb +4 -32
- data/lib/graphql/tracing.rb +0 -1
- data/lib/graphql/types/relay/connection_behaviors.rb +2 -6
- data/lib/graphql/types/relay/default_relay.rb +0 -10
- data/lib/graphql/types/relay/node_behaviors.rb +5 -1
- data/lib/graphql/types/relay.rb +0 -2
- data/lib/graphql/types/string.rb +1 -1
- data/lib/graphql/version.rb +1 -1
- data/lib/graphql.rb +1 -66
- metadata +28 -164
- data/lib/graphql/analysis/analyze_query.rb +0 -98
- data/lib/graphql/analysis/field_usage.rb +0 -45
- data/lib/graphql/analysis/max_query_complexity.rb +0 -26
- data/lib/graphql/analysis/max_query_depth.rb +0 -26
- data/lib/graphql/analysis/query_complexity.rb +0 -88
- data/lib/graphql/analysis/query_depth.rb +0 -43
- data/lib/graphql/analysis/reducer_state.rb +0 -48
- data/lib/graphql/argument.rb +0 -131
- data/lib/graphql/authorization.rb +0 -82
- data/lib/graphql/backtrace/legacy_tracer.rb +0 -56
- data/lib/graphql/backwards_compatibility.rb +0 -61
- data/lib/graphql/base_type.rb +0 -232
- data/lib/graphql/boolean_type.rb +0 -2
- data/lib/graphql/compatibility/execution_specification/counter_schema.rb +0 -53
- data/lib/graphql/compatibility/execution_specification/specification_schema.rb +0 -200
- data/lib/graphql/compatibility/execution_specification.rb +0 -436
- data/lib/graphql/compatibility/lazy_execution_specification/lazy_schema.rb +0 -111
- data/lib/graphql/compatibility/lazy_execution_specification.rb +0 -215
- data/lib/graphql/compatibility/query_parser_specification/parse_error_specification.rb +0 -87
- data/lib/graphql/compatibility/query_parser_specification/query_assertions.rb +0 -79
- data/lib/graphql/compatibility/query_parser_specification.rb +0 -266
- data/lib/graphql/compatibility/schema_parser_specification.rb +0 -682
- data/lib/graphql/compatibility.rb +0 -5
- data/lib/graphql/define/assign_argument.rb +0 -12
- data/lib/graphql/define/assign_connection.rb +0 -13
- data/lib/graphql/define/assign_enum_value.rb +0 -18
- data/lib/graphql/define/assign_global_id_field.rb +0 -11
- data/lib/graphql/define/assign_mutation_function.rb +0 -34
- data/lib/graphql/define/assign_object_field.rb +0 -42
- data/lib/graphql/define/defined_object_proxy.rb +0 -53
- data/lib/graphql/define/instance_definable.rb +0 -255
- 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 -55
- 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 -133
- data/lib/graphql/execution/execute.rb +0 -333
- data/lib/graphql/execution/flatten.rb +0 -40
- data/lib/graphql/execution/typecast.rb +0 -50
- data/lib/graphql/field/resolve.rb +0 -59
- data/lib/graphql/field.rb +0 -226
- data/lib/graphql/float_type.rb +0 -2
- data/lib/graphql/function.rb +0 -128
- data/lib/graphql/id_type.rb +0 -2
- data/lib/graphql/input_object_type.rb +0 -138
- data/lib/graphql/int_type.rb +0 -2
- data/lib/graphql/interface_type.rb +0 -72
- data/lib/graphql/internal_representation/document.rb +0 -27
- data/lib/graphql/internal_representation/node.rb +0 -206
- data/lib/graphql/internal_representation/print.rb +0 -51
- data/lib/graphql/internal_representation/rewrite.rb +0 -184
- data/lib/graphql/internal_representation/scope.rb +0 -88
- data/lib/graphql/internal_representation/visit.rb +0 -36
- data/lib/graphql/internal_representation.rb +0 -7
- data/lib/graphql/list_type.rb +0 -80
- data/lib/graphql/non_null_type.rb +0 -71
- data/lib/graphql/object_type.rb +0 -130
- data/lib/graphql/query/arguments.rb +0 -189
- data/lib/graphql/query/arguments_cache.rb +0 -24
- data/lib/graphql/query/executor.rb +0 -52
- data/lib/graphql/query/serial_execution/field_resolution.rb +0 -92
- data/lib/graphql/query/serial_execution/operation_resolution.rb +0 -19
- data/lib/graphql/query/serial_execution/selection_resolution.rb +0 -23
- data/lib/graphql/query/serial_execution/value_resolution.rb +0 -87
- data/lib/graphql/query/serial_execution.rb +0 -40
- data/lib/graphql/relay/array_connection.rb +0 -83
- data/lib/graphql/relay/base_connection.rb +0 -189
- data/lib/graphql/relay/connection_instrumentation.rb +0 -54
- data/lib/graphql/relay/connection_resolve.rb +0 -43
- data/lib/graphql/relay/connection_type.rb +0 -54
- 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 -39
- data/lib/graphql/relay/global_id_resolve.rb +0 -17
- data/lib/graphql/relay/mongo_relation_connection.rb +0 -50
- data/lib/graphql/relay/mutation/instrumentation.rb +0 -23
- data/lib/graphql/relay/mutation/resolve.rb +0 -56
- data/lib/graphql/relay/mutation/result.rb +0 -38
- data/lib/graphql/relay/mutation.rb +0 -106
- data/lib/graphql/relay/node.rb +0 -39
- data/lib/graphql/relay/page_info.rb +0 -7
- data/lib/graphql/relay/relation_connection.rb +0 -188
- data/lib/graphql/relay/type_extensions.rb +0 -32
- data/lib/graphql/scalar_type.rb +0 -91
- data/lib/graphql/schema/catchall_middleware.rb +0 -35
- data/lib/graphql/schema/default_parse_error.rb +0 -10
- data/lib/graphql/schema/default_type_error.rb +0 -17
- data/lib/graphql/schema/member/accepts_definition.rb +0 -164
- data/lib/graphql/schema/member/cached_graphql_definition.rb +0 -58
- data/lib/graphql/schema/member/instrumentation.rb +0 -131
- data/lib/graphql/schema/middleware_chain.rb +0 -82
- data/lib/graphql/schema/possible_types.rb +0 -44
- data/lib/graphql/schema/rescue_middleware.rb +0 -60
- data/lib/graphql/schema/timeout_middleware.rb +0 -88
- data/lib/graphql/schema/traversal.rb +0 -228
- data/lib/graphql/schema/validation.rb +0 -313
- data/lib/graphql/static_validation/default_visitor.rb +0 -15
- data/lib/graphql/static_validation/no_validate_visitor.rb +0 -10
- data/lib/graphql/string_type.rb +0 -2
- data/lib/graphql/subscriptions/subscription_root.rb +0 -76
- data/lib/graphql/tracing/skylight_tracing.rb +0 -70
- data/lib/graphql/types/relay/node_field.rb +0 -24
- data/lib/graphql/types/relay/nodes_field.rb +0 -43
- data/lib/graphql/union_type.rb +0 -115
- data/lib/graphql/upgrader/member.rb +0 -937
- data/lib/graphql/upgrader/schema.rb +0 -38
@@ -1,12 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
module GraphQL
|
3
|
-
module Define
|
4
|
-
# Turn argument configs into a {GraphQL::Argument}.
|
5
|
-
module AssignArgument
|
6
|
-
def self.call(target, *args, **kwargs, &block)
|
7
|
-
argument = GraphQL::Argument.from_dsl(*args, **kwargs, &block)
|
8
|
-
target.arguments[argument.name] = argument
|
9
|
-
end
|
10
|
-
end
|
11
|
-
end
|
12
|
-
end
|
@@ -1,13 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
module GraphQL
|
3
|
-
module Define
|
4
|
-
module AssignConnection
|
5
|
-
def self.call(type_defn, *field_args, max_page_size: nil, **field_kwargs, &field_block)
|
6
|
-
underlying_field = GraphQL::Define::AssignObjectField.call(type_defn, *field_args, **field_kwargs, &field_block)
|
7
|
-
underlying_field.connection_max_page_size = max_page_size
|
8
|
-
underlying_field.connection = true
|
9
|
-
type_defn.fields[underlying_field.name] = underlying_field
|
10
|
-
end
|
11
|
-
end
|
12
|
-
end
|
13
|
-
end
|
@@ -1,18 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
module GraphQL
|
3
|
-
module Define
|
4
|
-
# @api deprecated
|
5
|
-
module AssignEnumValue
|
6
|
-
def self.call(enum_type, name, desc = nil, deprecation_reason: nil, value: name, &block)
|
7
|
-
enum_value = GraphQL::EnumType::EnumValue.define(
|
8
|
-
name: name.to_s,
|
9
|
-
description: desc,
|
10
|
-
deprecation_reason: deprecation_reason,
|
11
|
-
value: value,
|
12
|
-
&block
|
13
|
-
)
|
14
|
-
enum_type.add_value(enum_value)
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
@@ -1,11 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
module GraphQL
|
3
|
-
module Define
|
4
|
-
module AssignGlobalIdField
|
5
|
-
def self.call(type_defn, field_name, **field_kwargs)
|
6
|
-
resolve = GraphQL::Relay::GlobalIdResolve.new(type: type_defn)
|
7
|
-
GraphQL::Define::AssignObjectField.call(type_defn, field_name, **field_kwargs, type: GraphQL::DEPRECATED_ID_TYPE.to_non_null_type, resolve: resolve)
|
8
|
-
end
|
9
|
-
end
|
10
|
-
end
|
11
|
-
end
|
@@ -1,34 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
module GraphQL
|
3
|
-
module Define
|
4
|
-
module AssignMutationFunction
|
5
|
-
def self.call(target, function)
|
6
|
-
# TODO: get all this logic somewhere easier to test
|
7
|
-
|
8
|
-
if !function.type.is_a?(GraphQL::ObjectType)
|
9
|
-
raise "Mutation functions must return object types (not #{function.type.unwrap})"
|
10
|
-
end
|
11
|
-
|
12
|
-
target.return_type = function.type.redefine {
|
13
|
-
name(target.name + "Payload")
|
14
|
-
field :clientMutationId, types.String, "A unique identifier for the client performing the mutation.", property: :client_mutation_id
|
15
|
-
}
|
16
|
-
|
17
|
-
target.arguments = function.arguments
|
18
|
-
target.description = function.description
|
19
|
-
target.resolve = ->(o, a, c) {
|
20
|
-
res = function.call(o, a, c)
|
21
|
-
ResultProxy.new(res, a[:clientMutationId])
|
22
|
-
}
|
23
|
-
end
|
24
|
-
|
25
|
-
class ResultProxy < SimpleDelegator
|
26
|
-
attr_reader :client_mutation_id
|
27
|
-
def initialize(target, client_mutation_id)
|
28
|
-
@client_mutation_id = client_mutation_id
|
29
|
-
super(target)
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
@@ -1,42 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
module GraphQL
|
3
|
-
module Define
|
4
|
-
# @api deprecated
|
5
|
-
module AssignObjectField
|
6
|
-
def self.call(owner_type, name, type_or_field = nil, desc = nil, function: nil, field: nil, relay_mutation_function: nil, **kwargs, &block)
|
7
|
-
name_s = name.to_s
|
8
|
-
|
9
|
-
# Move some positional args into keywords if they're present
|
10
|
-
desc && kwargs[:description] ||= desc
|
11
|
-
name && kwargs[:name] ||= name_s
|
12
|
-
|
13
|
-
if !type_or_field.nil? && !type_or_field.is_a?(GraphQL::Field)
|
14
|
-
# Maybe a string, proc or BaseType
|
15
|
-
kwargs[:type] = type_or_field
|
16
|
-
end
|
17
|
-
|
18
|
-
base_field = if type_or_field.is_a?(GraphQL::Field)
|
19
|
-
type_or_field.redefine(name: name_s)
|
20
|
-
elsif function
|
21
|
-
func_field = GraphQL::Function.build_field(function)
|
22
|
-
func_field.name = name_s
|
23
|
-
func_field
|
24
|
-
elsif field.is_a?(GraphQL::Field)
|
25
|
-
field.redefine(name: name_s)
|
26
|
-
else
|
27
|
-
nil
|
28
|
-
end
|
29
|
-
|
30
|
-
obj_field = if base_field
|
31
|
-
base_field.redefine(**kwargs, &block)
|
32
|
-
else
|
33
|
-
GraphQL::Field.define(**kwargs, &block)
|
34
|
-
end
|
35
|
-
|
36
|
-
|
37
|
-
# Attach the field to the type
|
38
|
-
owner_type.fields[name_s] = obj_field
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
@@ -1,53 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module GraphQL
|
4
|
-
module Define
|
5
|
-
# This object delegates most methods to a dictionary of functions, {@dictionary}.
|
6
|
-
# {@target} is passed to the specified function, along with any arguments and block.
|
7
|
-
# This allows a method-based DSL without adding methods to the defined class.
|
8
|
-
class DefinedObjectProxy
|
9
|
-
extend GraphQL::Ruby2Keywords
|
10
|
-
# The object which will be defined by definition functions
|
11
|
-
attr_reader :target
|
12
|
-
|
13
|
-
def initialize(target)
|
14
|
-
@target = target
|
15
|
-
@dictionary = target.class.dictionary
|
16
|
-
end
|
17
|
-
|
18
|
-
# Provides shorthand access to GraphQL's built-in types
|
19
|
-
def types
|
20
|
-
GraphQL::Define::TypeDefiner.instance
|
21
|
-
end
|
22
|
-
|
23
|
-
# Allow `plugin` to perform complex initialization on the definition.
|
24
|
-
# Calls `plugin.use(defn, **kwargs)`.
|
25
|
-
# @param plugin [<#use(defn, **kwargs)>] A plugin object
|
26
|
-
# @param kwargs [Hash] Any options for the plugin
|
27
|
-
def use(plugin, **kwargs)
|
28
|
-
# https://bugs.ruby-lang.org/issues/10708
|
29
|
-
if kwargs == {}
|
30
|
-
plugin.use(self)
|
31
|
-
else
|
32
|
-
plugin.use(self, **kwargs)
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
# Lookup a function from the dictionary and call it if it's found.
|
37
|
-
def method_missing(name, *args, &block)
|
38
|
-
definition = @dictionary[name]
|
39
|
-
if definition
|
40
|
-
definition.call(@target, *args, &block)
|
41
|
-
else
|
42
|
-
msg = "#{@target.class.name} can't define '#{name}'"
|
43
|
-
raise NoDefinitionError, msg, caller
|
44
|
-
end
|
45
|
-
end
|
46
|
-
ruby2_keywords :method_missing
|
47
|
-
|
48
|
-
def respond_to_missing?(name, include_private = false)
|
49
|
-
@dictionary[name] || super
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
@@ -1,255 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
module GraphQL
|
3
|
-
module Define
|
4
|
-
# @api deprecated
|
5
|
-
module InstanceDefinable
|
6
|
-
module DeprecatedDefine
|
7
|
-
def define(**kwargs, &block)
|
8
|
-
deprecated_caller = caller(1, 1).first
|
9
|
-
if deprecated_caller.include?("lib/graphql")
|
10
|
-
deprecated_caller = caller(2, 10).find { |c| !c.include?("lib/graphql") }
|
11
|
-
end
|
12
|
-
|
13
|
-
if deprecated_caller
|
14
|
-
GraphQL::Deprecation.warn <<-ERR
|
15
|
-
#{self}.define will be removed in GraphQL-Ruby 2.0; use a class-based definition instead. See https://graphql-ruby.org/schema/class_based_api.html.
|
16
|
-
-> called from #{deprecated_caller}
|
17
|
-
ERR
|
18
|
-
end
|
19
|
-
deprecated_define(**kwargs, &block)
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
def self.included(base)
|
24
|
-
base.extend(ClassMethods)
|
25
|
-
base.ensure_defined(:metadata)
|
26
|
-
end
|
27
|
-
|
28
|
-
# @api deprecated
|
29
|
-
def metadata
|
30
|
-
@metadata ||= {}
|
31
|
-
end
|
32
|
-
|
33
|
-
# @api deprecated
|
34
|
-
def deprecated_define(**kwargs, &block)
|
35
|
-
# make sure the previous definition_proc was executed:
|
36
|
-
ensure_defined
|
37
|
-
stash_dependent_methods
|
38
|
-
@pending_definition = Definition.new(kwargs, block)
|
39
|
-
nil
|
40
|
-
end
|
41
|
-
|
42
|
-
# @api deprecated
|
43
|
-
def define(**kwargs, &block)
|
44
|
-
deprecated_define(**kwargs, &block)
|
45
|
-
end
|
46
|
-
|
47
|
-
# @api deprecated
|
48
|
-
def redefine(**kwargs, &block)
|
49
|
-
ensure_defined
|
50
|
-
new_inst = self.dup
|
51
|
-
new_inst.deprecated_define(**kwargs, &block)
|
52
|
-
new_inst
|
53
|
-
end
|
54
|
-
|
55
|
-
def initialize_copy(other)
|
56
|
-
super
|
57
|
-
@metadata = other.metadata.dup
|
58
|
-
end
|
59
|
-
|
60
|
-
private
|
61
|
-
|
62
|
-
# Run the definition block if it hasn't been run yet.
|
63
|
-
# This can only be run once: the block is deleted after it's used.
|
64
|
-
# You have to call this before using any value which could
|
65
|
-
# come from the definition block.
|
66
|
-
# @return [void]
|
67
|
-
def ensure_defined
|
68
|
-
if @pending_definition
|
69
|
-
defn = @pending_definition
|
70
|
-
@pending_definition = nil
|
71
|
-
|
72
|
-
revive_dependent_methods
|
73
|
-
|
74
|
-
begin
|
75
|
-
defn_proxy = DefinedObjectProxy.new(self)
|
76
|
-
# Apply definition from `define(...)` kwargs
|
77
|
-
defn.define_keywords.each do |keyword, value|
|
78
|
-
# Don't splat string hashes, which blows up on Rubies before 2.7
|
79
|
-
if value.is_a?(Hash) && !value.empty? && value.each_key.all? { |k| k.is_a?(Symbol) }
|
80
|
-
defn_proxy.public_send(keyword, **value)
|
81
|
-
else
|
82
|
-
defn_proxy.public_send(keyword, value)
|
83
|
-
end
|
84
|
-
end
|
85
|
-
# and/or apply definition from `define { ... }` block
|
86
|
-
if defn.define_proc
|
87
|
-
defn_proxy.instance_eval(&defn.define_proc)
|
88
|
-
end
|
89
|
-
rescue StandardError
|
90
|
-
# The definition block failed to run, so make this object pending again:
|
91
|
-
stash_dependent_methods
|
92
|
-
@pending_definition = defn
|
93
|
-
raise
|
94
|
-
end
|
95
|
-
end
|
96
|
-
nil
|
97
|
-
end
|
98
|
-
|
99
|
-
# Take the pending methods and put them back on this object's singleton class.
|
100
|
-
# This reverts the process done by {#stash_dependent_methods}
|
101
|
-
# @return [void]
|
102
|
-
def revive_dependent_methods
|
103
|
-
pending_methods = @pending_methods
|
104
|
-
self.singleton_class.class_eval {
|
105
|
-
pending_methods.each do |method|
|
106
|
-
undef_method(method.name) if method_defined?(method.name)
|
107
|
-
define_method(method.name, method)
|
108
|
-
end
|
109
|
-
}
|
110
|
-
@pending_methods = nil
|
111
|
-
end
|
112
|
-
|
113
|
-
# Find the method names which were declared as definition-dependent,
|
114
|
-
# then grab the method definitions off of this object's class
|
115
|
-
# and store them for later.
|
116
|
-
#
|
117
|
-
# Then make a dummy method for each of those method names which:
|
118
|
-
#
|
119
|
-
# - Triggers the pending definition, if there is one
|
120
|
-
# - Calls the same method again.
|
121
|
-
#
|
122
|
-
# It's assumed that {#ensure_defined} will put the original method definitions
|
123
|
-
# back in place with {#revive_dependent_methods}.
|
124
|
-
# @return [void]
|
125
|
-
def stash_dependent_methods
|
126
|
-
method_names = self.class.ensure_defined_method_names
|
127
|
-
@pending_methods = method_names.map { |n| self.class.instance_method(n) }
|
128
|
-
self.singleton_class.class_eval do
|
129
|
-
method_names.each do |method_name|
|
130
|
-
undef_method(method_name) if method_defined?(method_name)
|
131
|
-
define_method(method_name) { |*args, &block|
|
132
|
-
ensure_defined
|
133
|
-
self.send(method_name, *args, &block)
|
134
|
-
}
|
135
|
-
end
|
136
|
-
end
|
137
|
-
end
|
138
|
-
|
139
|
-
class Definition
|
140
|
-
attr_reader :define_keywords, :define_proc
|
141
|
-
def initialize(define_keywords, define_proc)
|
142
|
-
@define_keywords = define_keywords
|
143
|
-
@define_proc = define_proc
|
144
|
-
end
|
145
|
-
end
|
146
|
-
|
147
|
-
module ClassMethods
|
148
|
-
# Create a new instance
|
149
|
-
# and prepare a definition using its {.definitions}.
|
150
|
-
# @api deprecated
|
151
|
-
# @param kwargs [Hash] Key-value pairs corresponding to defininitions from `accepts_definitions`
|
152
|
-
# @param block [Proc] Block which calls helper methods from `accepts_definitions`
|
153
|
-
def deprecated_define(**kwargs, &block)
|
154
|
-
instance = self.new
|
155
|
-
instance.deprecated_define(**kwargs, &block)
|
156
|
-
instance
|
157
|
-
end
|
158
|
-
|
159
|
-
# @api deprecated
|
160
|
-
def define(**kwargs, &block)
|
161
|
-
instance = self.new
|
162
|
-
instance.define(**kwargs, &block)
|
163
|
-
instance
|
164
|
-
end
|
165
|
-
|
166
|
-
# Attach definitions to this class.
|
167
|
-
# Each symbol in `accepts` will be assigned with `{key}=`.
|
168
|
-
# The last entry in accepts may be a hash of name-proc pairs for custom definitions.
|
169
|
-
def accepts_definitions(*accepts)
|
170
|
-
deprecated_caller = caller(0, 1).first
|
171
|
-
if deprecated_caller.include?("lib/graphql")
|
172
|
-
deprecated_caller = caller(2, 10).find { |c| !c.include?("lib/graphql") }
|
173
|
-
end
|
174
|
-
|
175
|
-
if deprecated_caller
|
176
|
-
GraphQL::Deprecation.warn <<-ERR
|
177
|
-
#{self}.accepts_definitions will be removed in GraphQL-Ruby 2.0; use a class-based definition instead. See https://graphql-ruby.org/schema/class_based_api.html.
|
178
|
-
-> called from #{deprecated_caller}
|
179
|
-
ERR
|
180
|
-
end
|
181
|
-
deprecated_accepts_definitions(*accepts)
|
182
|
-
end
|
183
|
-
|
184
|
-
def deprecated_accepts_definitions(*accepts)
|
185
|
-
new_assignments = if accepts.last.is_a?(Hash)
|
186
|
-
accepts.pop.dup
|
187
|
-
else
|
188
|
-
{}
|
189
|
-
end
|
190
|
-
|
191
|
-
accepts.each do |key|
|
192
|
-
new_assignments[key] = AssignAttribute.new(key)
|
193
|
-
end
|
194
|
-
|
195
|
-
@own_dictionary = own_dictionary.merge(new_assignments)
|
196
|
-
end
|
197
|
-
|
198
|
-
def ensure_defined(*method_names)
|
199
|
-
@ensure_defined_method_names ||= []
|
200
|
-
@ensure_defined_method_names.concat(method_names)
|
201
|
-
nil
|
202
|
-
end
|
203
|
-
|
204
|
-
def ensure_defined_method_names
|
205
|
-
own_method_names = @ensure_defined_method_names || []
|
206
|
-
if superclass.respond_to?(:ensure_defined_method_names)
|
207
|
-
superclass.ensure_defined_method_names + own_method_names
|
208
|
-
else
|
209
|
-
own_method_names
|
210
|
-
end
|
211
|
-
end
|
212
|
-
|
213
|
-
# @return [Hash] combined definitions for self and ancestors
|
214
|
-
def dictionary
|
215
|
-
if superclass.respond_to?(:dictionary)
|
216
|
-
own_dictionary.merge(superclass.dictionary)
|
217
|
-
else
|
218
|
-
own_dictionary
|
219
|
-
end
|
220
|
-
end
|
221
|
-
|
222
|
-
# @return [Hash] definitions for this class only
|
223
|
-
def own_dictionary
|
224
|
-
@own_dictionary ||= {}
|
225
|
-
end
|
226
|
-
end
|
227
|
-
|
228
|
-
class AssignMetadataKey
|
229
|
-
def initialize(key)
|
230
|
-
@key = key
|
231
|
-
end
|
232
|
-
|
233
|
-
def call(defn, value = true)
|
234
|
-
defn.metadata[@key] = value
|
235
|
-
end
|
236
|
-
end
|
237
|
-
|
238
|
-
class AssignAttribute
|
239
|
-
extend GraphQL::Ruby2Keywords
|
240
|
-
|
241
|
-
def initialize(attr_name)
|
242
|
-
@attr_assign_method = :"#{attr_name}="
|
243
|
-
end
|
244
|
-
|
245
|
-
# Even though we're just using the first value here,
|
246
|
-
# We have to add a splat here to use `ruby2_keywords`,
|
247
|
-
# so that it will accept a `[{}]` input from the caller.
|
248
|
-
def call(defn, *value)
|
249
|
-
defn.public_send(@attr_assign_method, value.first)
|
250
|
-
end
|
251
|
-
ruby2_keywords :call
|
252
|
-
end
|
253
|
-
end
|
254
|
-
end
|
255
|
-
end
|
@@ -1,16 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
module GraphQL
|
3
|
-
module Define
|
4
|
-
# Wrap the object in NonNullType in response to `!`
|
5
|
-
# @example required Int type
|
6
|
-
# !GraphQL::INT_TYPE
|
7
|
-
#
|
8
|
-
module NonNullWithBang
|
9
|
-
# Make the type non-null
|
10
|
-
# @return [GraphQL::NonNullType] a non-null type which wraps the original type
|
11
|
-
def !
|
12
|
-
to_non_null_type
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
@@ -1,31 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
module GraphQL
|
3
|
-
module Define
|
4
|
-
# Some conveniences for definining return & argument types.
|
5
|
-
#
|
6
|
-
# Passed into initialization blocks, eg {ObjectType#initialize}, {Field#initialize}
|
7
|
-
class TypeDefiner
|
8
|
-
include Singleton
|
9
|
-
# rubocop:disable Naming/MethodName
|
10
|
-
def Int; GraphQL::DEPRECATED_INT_TYPE; end
|
11
|
-
def String; GraphQL::DEPRECATED_STRING_TYPE; end
|
12
|
-
def Float; GraphQL::DEPRECATED_FLOAT_TYPE; end
|
13
|
-
def Boolean; GraphQL::DEPRECATED_BOOLEAN_TYPE; end
|
14
|
-
def ID; GraphQL::DEPRECATED_ID_TYPE; end
|
15
|
-
# rubocop:enable Naming/MethodName
|
16
|
-
|
17
|
-
# Make a {ListType} which wraps the input type
|
18
|
-
#
|
19
|
-
# @example making a list type
|
20
|
-
# list_of_strings = types[types.String]
|
21
|
-
# list_of_strings.inspect
|
22
|
-
# # => "[String]"
|
23
|
-
#
|
24
|
-
# @param type [Type] A type to be wrapped in a ListType
|
25
|
-
# @return [GraphQL::ListType] A ListType wrapping `type`
|
26
|
-
def [](type)
|
27
|
-
type.to_list_type
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
data/lib/graphql/define.rb
DELETED
@@ -1,31 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
require "graphql/define/assign_argument"
|
3
|
-
require "graphql/define/assign_connection"
|
4
|
-
require "graphql/define/assign_enum_value"
|
5
|
-
require "graphql/define/assign_global_id_field"
|
6
|
-
require "graphql/define/assign_mutation_function"
|
7
|
-
require "graphql/define/assign_object_field"
|
8
|
-
require "graphql/define/defined_object_proxy"
|
9
|
-
require "graphql/define/instance_definable"
|
10
|
-
require "graphql/define/no_definition_error"
|
11
|
-
require "graphql/define/non_null_with_bang"
|
12
|
-
require "graphql/define/type_definer"
|
13
|
-
|
14
|
-
module GraphQL
|
15
|
-
module Define
|
16
|
-
# A helper for definitions that store their value in `#metadata`.
|
17
|
-
#
|
18
|
-
# @example Storing application classes with GraphQL types
|
19
|
-
# # Make a custom definition
|
20
|
-
# GraphQL::ObjectType.accepts_definitions(resolves_to_class_names: GraphQL::Define.assign_metadata_key(:resolves_to_class_names))
|
21
|
-
#
|
22
|
-
# # After definition, read the key from metadata
|
23
|
-
# PostType.metadata[:resolves_to_class_names] # => [...]
|
24
|
-
#
|
25
|
-
# @param key [Object] the key to assign in metadata
|
26
|
-
# @return [#call(defn, value)] an assignment for `.accepts_definitions` which writes `key` to `#metadata`
|
27
|
-
def self.assign_metadata_key(key)
|
28
|
-
GraphQL::Define::InstanceDefinable::AssignMetadataKey.new(key)
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
@@ -1,55 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
module GraphQL
|
3
|
-
# There are two ways to apply the deprecated `!` DSL to class-style schema definitions:
|
4
|
-
#
|
5
|
-
# 1. Scoped by file (CRuby only), add to the top of the file:
|
6
|
-
#
|
7
|
-
# using GraphQL::DeprecationDSL
|
8
|
-
#
|
9
|
-
# (This is a "refinement", there are also other ways to scope it.)
|
10
|
-
#
|
11
|
-
# 2. Global application, add before schema definition:
|
12
|
-
#
|
13
|
-
# GraphQL::DeprecationDSL.activate
|
14
|
-
#
|
15
|
-
module DeprecatedDSL
|
16
|
-
TYPE_CLASSES = [
|
17
|
-
GraphQL::Schema::Scalar,
|
18
|
-
GraphQL::Schema::Enum,
|
19
|
-
GraphQL::Schema::InputObject,
|
20
|
-
GraphQL::Schema::Union,
|
21
|
-
GraphQL::Schema::Interface,
|
22
|
-
GraphQL::Schema::Object,
|
23
|
-
]
|
24
|
-
|
25
|
-
def self.activate
|
26
|
-
deprecated_caller = caller(1, 1).first
|
27
|
-
GraphQL::Deprecation.warn "DeprecatedDSL will be removed from GraphQL-Ruby 2.0, use `.to_non_null_type` instead of `!` and remove `.activate` from #{deprecated_caller}"
|
28
|
-
TYPE_CLASSES.each { |c| c.extend(Methods) }
|
29
|
-
GraphQL::Schema::List.include(Methods)
|
30
|
-
GraphQL::Schema::NonNull.include(Methods)
|
31
|
-
end
|
32
|
-
|
33
|
-
module Methods
|
34
|
-
def !
|
35
|
-
deprecated_caller = caller(1, 1).first
|
36
|
-
GraphQL::Deprecation.warn "DeprecatedDSL will be removed from GraphQL-Ruby 2.0, use `.to_non_null_type` instead of `!` at #{deprecated_caller}"
|
37
|
-
to_non_null_type
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
if defined?(::Refinement) && Refinement.private_method_defined?(:import_methods)
|
42
|
-
TYPE_CLASSES.each do |type_class|
|
43
|
-
refine type_class.singleton_class do
|
44
|
-
import_methods Methods
|
45
|
-
end
|
46
|
-
end
|
47
|
-
else
|
48
|
-
TYPE_CLASSES.each do |type_class|
|
49
|
-
refine type_class.singleton_class do
|
50
|
-
include Methods
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|
55
|
-
end
|