graphql 1.13.24 → 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.

Files changed (195) hide show
  1. checksums.yaml +4 -4
  2. data/lib/graphql/analysis/ast/query_complexity.rb +1 -1
  3. data/lib/graphql/analysis/ast/query_depth.rb +0 -1
  4. data/lib/graphql/analysis/ast/visitor.rb +1 -1
  5. data/lib/graphql/analysis/ast.rb +0 -10
  6. data/lib/graphql/analysis.rb +0 -7
  7. data/lib/graphql/backtrace/table.rb +0 -18
  8. data/lib/graphql/backtrace/tracer.rb +1 -2
  9. data/lib/graphql/backtrace.rb +2 -8
  10. data/lib/graphql/dig.rb +1 -1
  11. data/lib/graphql/execution/errors.rb +1 -9
  12. data/lib/graphql/execution/interpreter/runtime.rb +6 -13
  13. data/lib/graphql/execution/interpreter.rb +0 -22
  14. data/lib/graphql/execution/lazy.rb +1 -1
  15. data/lib/graphql/execution/lookahead.rb +6 -13
  16. data/lib/graphql/execution/multiplex.rb +50 -107
  17. data/lib/graphql/execution.rb +11 -3
  18. data/lib/graphql/introspection/directive_type.rb +2 -2
  19. data/lib/graphql/introspection/dynamic_fields.rb +3 -8
  20. data/lib/graphql/introspection/entry_points.rb +2 -15
  21. data/lib/graphql/introspection/field_type.rb +1 -1
  22. data/lib/graphql/introspection/schema_type.rb +2 -2
  23. data/lib/graphql/introspection/type_type.rb +5 -5
  24. data/lib/graphql/language/document_from_schema_definition.rb +0 -17
  25. data/lib/graphql/language/nodes.rb +0 -3
  26. data/lib/graphql/pagination/connections.rb +2 -28
  27. data/lib/graphql/query/context.rb +1 -185
  28. data/lib/graphql/query/input_validation_result.rb +0 -9
  29. data/lib/graphql/query/literal_input.rb +8 -13
  30. data/lib/graphql/query/validation_pipeline.rb +6 -34
  31. data/lib/graphql/query/variable_validation_error.rb +2 -2
  32. data/lib/graphql/query/variables.rb +8 -31
  33. data/lib/graphql/query.rb +5 -34
  34. data/lib/graphql/railtie.rb +0 -104
  35. data/lib/graphql/relay/range_add.rb +0 -4
  36. data/lib/graphql/relay.rb +0 -15
  37. data/lib/graphql/schema/addition.rb +1 -8
  38. data/lib/graphql/schema/argument.rb +6 -28
  39. data/lib/graphql/schema/build_from_definition.rb +7 -9
  40. data/lib/graphql/schema/directive.rb +1 -22
  41. data/lib/graphql/schema/enum.rb +3 -19
  42. data/lib/graphql/schema/enum_value.rb +1 -23
  43. data/lib/graphql/schema/field.rb +22 -221
  44. data/lib/graphql/schema/input_object.rb +17 -65
  45. data/lib/graphql/schema/interface.rb +1 -30
  46. data/lib/graphql/schema/introspection_system.rb +3 -8
  47. data/lib/graphql/schema/late_bound_type.rb +2 -2
  48. data/lib/graphql/schema/list.rb +3 -24
  49. data/lib/graphql/schema/loader.rb +0 -1
  50. data/lib/graphql/schema/member/base_dsl_methods.rb +1 -6
  51. data/lib/graphql/schema/member/build_type.rb +4 -6
  52. data/lib/graphql/schema/member/has_arguments.rb +16 -20
  53. data/lib/graphql/schema/member/has_fields.rb +3 -3
  54. data/lib/graphql/schema/member/has_interfaces.rb +1 -13
  55. data/lib/graphql/schema/member/validates_input.rb +2 -2
  56. data/lib/graphql/schema/member.rb +0 -6
  57. data/lib/graphql/schema/mutation.rb +0 -9
  58. data/lib/graphql/schema/non_null.rb +3 -9
  59. data/lib/graphql/schema/object.rb +0 -40
  60. data/lib/graphql/schema/relay_classic_mutation.rb +17 -28
  61. data/lib/graphql/schema/scalar.rb +1 -16
  62. data/lib/graphql/schema/union.rb +0 -16
  63. data/lib/graphql/schema/warden.rb +3 -12
  64. data/lib/graphql/schema/wrapper.rb +0 -5
  65. data/lib/graphql/schema.rb +106 -945
  66. data/lib/graphql/static_validation/base_visitor.rb +4 -21
  67. data/lib/graphql/static_validation/rules/directives_are_in_valid_locations.rb +12 -12
  68. data/lib/graphql/static_validation/validator.rb +2 -24
  69. data/lib/graphql/static_validation.rb +0 -2
  70. data/lib/graphql/subscriptions/default_subscription_resolve_extension.rb +38 -1
  71. data/lib/graphql/subscriptions/event.rb +1 -1
  72. data/lib/graphql/subscriptions/instrumentation.rb +0 -51
  73. data/lib/graphql/subscriptions.rb +4 -13
  74. data/lib/graphql/tracing/data_dog_tracing.rb +16 -20
  75. data/lib/graphql/tracing/platform_tracing.rb +4 -32
  76. data/lib/graphql/tracing.rb +0 -1
  77. data/lib/graphql/types/relay/connection_behaviors.rb +2 -6
  78. data/lib/graphql/types/relay/default_relay.rb +0 -10
  79. data/lib/graphql/types/relay/node_behaviors.rb +5 -1
  80. data/lib/graphql/types/relay.rb +0 -2
  81. data/lib/graphql/types/string.rb +1 -1
  82. data/lib/graphql/version.rb +1 -1
  83. data/lib/graphql.rb +1 -66
  84. metadata +28 -164
  85. data/lib/graphql/analysis/analyze_query.rb +0 -98
  86. data/lib/graphql/analysis/field_usage.rb +0 -45
  87. data/lib/graphql/analysis/max_query_complexity.rb +0 -26
  88. data/lib/graphql/analysis/max_query_depth.rb +0 -26
  89. data/lib/graphql/analysis/query_complexity.rb +0 -88
  90. data/lib/graphql/analysis/query_depth.rb +0 -43
  91. data/lib/graphql/analysis/reducer_state.rb +0 -48
  92. data/lib/graphql/argument.rb +0 -131
  93. data/lib/graphql/authorization.rb +0 -82
  94. data/lib/graphql/backtrace/legacy_tracer.rb +0 -56
  95. data/lib/graphql/backwards_compatibility.rb +0 -61
  96. data/lib/graphql/base_type.rb +0 -232
  97. data/lib/graphql/boolean_type.rb +0 -2
  98. data/lib/graphql/compatibility/execution_specification/counter_schema.rb +0 -53
  99. data/lib/graphql/compatibility/execution_specification/specification_schema.rb +0 -200
  100. data/lib/graphql/compatibility/execution_specification.rb +0 -436
  101. data/lib/graphql/compatibility/lazy_execution_specification/lazy_schema.rb +0 -111
  102. data/lib/graphql/compatibility/lazy_execution_specification.rb +0 -215
  103. data/lib/graphql/compatibility/query_parser_specification/parse_error_specification.rb +0 -87
  104. data/lib/graphql/compatibility/query_parser_specification/query_assertions.rb +0 -79
  105. data/lib/graphql/compatibility/query_parser_specification.rb +0 -266
  106. data/lib/graphql/compatibility/schema_parser_specification.rb +0 -682
  107. data/lib/graphql/compatibility.rb +0 -5
  108. data/lib/graphql/define/assign_argument.rb +0 -12
  109. data/lib/graphql/define/assign_connection.rb +0 -13
  110. data/lib/graphql/define/assign_enum_value.rb +0 -18
  111. data/lib/graphql/define/assign_global_id_field.rb +0 -11
  112. data/lib/graphql/define/assign_mutation_function.rb +0 -34
  113. data/lib/graphql/define/assign_object_field.rb +0 -42
  114. data/lib/graphql/define/defined_object_proxy.rb +0 -53
  115. data/lib/graphql/define/instance_definable.rb +0 -255
  116. data/lib/graphql/define/no_definition_error.rb +0 -7
  117. data/lib/graphql/define/non_null_with_bang.rb +0 -16
  118. data/lib/graphql/define/type_definer.rb +0 -31
  119. data/lib/graphql/define.rb +0 -31
  120. data/lib/graphql/deprecated_dsl.rb +0 -55
  121. data/lib/graphql/directive/deprecated_directive.rb +0 -2
  122. data/lib/graphql/directive/include_directive.rb +0 -2
  123. data/lib/graphql/directive/skip_directive.rb +0 -2
  124. data/lib/graphql/directive.rb +0 -107
  125. data/lib/graphql/enum_type.rb +0 -133
  126. data/lib/graphql/execution/execute.rb +0 -333
  127. data/lib/graphql/execution/flatten.rb +0 -40
  128. data/lib/graphql/execution/typecast.rb +0 -50
  129. data/lib/graphql/field/resolve.rb +0 -59
  130. data/lib/graphql/field.rb +0 -226
  131. data/lib/graphql/float_type.rb +0 -2
  132. data/lib/graphql/function.rb +0 -128
  133. data/lib/graphql/id_type.rb +0 -2
  134. data/lib/graphql/input_object_type.rb +0 -138
  135. data/lib/graphql/int_type.rb +0 -2
  136. data/lib/graphql/interface_type.rb +0 -72
  137. data/lib/graphql/internal_representation/document.rb +0 -27
  138. data/lib/graphql/internal_representation/node.rb +0 -206
  139. data/lib/graphql/internal_representation/print.rb +0 -51
  140. data/lib/graphql/internal_representation/rewrite.rb +0 -184
  141. data/lib/graphql/internal_representation/scope.rb +0 -88
  142. data/lib/graphql/internal_representation/visit.rb +0 -36
  143. data/lib/graphql/internal_representation.rb +0 -7
  144. data/lib/graphql/list_type.rb +0 -80
  145. data/lib/graphql/non_null_type.rb +0 -71
  146. data/lib/graphql/object_type.rb +0 -130
  147. data/lib/graphql/query/arguments.rb +0 -189
  148. data/lib/graphql/query/arguments_cache.rb +0 -24
  149. data/lib/graphql/query/executor.rb +0 -52
  150. data/lib/graphql/query/serial_execution/field_resolution.rb +0 -92
  151. data/lib/graphql/query/serial_execution/operation_resolution.rb +0 -19
  152. data/lib/graphql/query/serial_execution/selection_resolution.rb +0 -23
  153. data/lib/graphql/query/serial_execution/value_resolution.rb +0 -87
  154. data/lib/graphql/query/serial_execution.rb +0 -40
  155. data/lib/graphql/relay/array_connection.rb +0 -83
  156. data/lib/graphql/relay/base_connection.rb +0 -189
  157. data/lib/graphql/relay/connection_instrumentation.rb +0 -54
  158. data/lib/graphql/relay/connection_resolve.rb +0 -43
  159. data/lib/graphql/relay/connection_type.rb +0 -54
  160. data/lib/graphql/relay/edge.rb +0 -27
  161. data/lib/graphql/relay/edge_type.rb +0 -19
  162. data/lib/graphql/relay/edges_instrumentation.rb +0 -39
  163. data/lib/graphql/relay/global_id_resolve.rb +0 -17
  164. data/lib/graphql/relay/mongo_relation_connection.rb +0 -50
  165. data/lib/graphql/relay/mutation/instrumentation.rb +0 -23
  166. data/lib/graphql/relay/mutation/resolve.rb +0 -56
  167. data/lib/graphql/relay/mutation/result.rb +0 -38
  168. data/lib/graphql/relay/mutation.rb +0 -106
  169. data/lib/graphql/relay/node.rb +0 -39
  170. data/lib/graphql/relay/page_info.rb +0 -7
  171. data/lib/graphql/relay/relation_connection.rb +0 -188
  172. data/lib/graphql/relay/type_extensions.rb +0 -32
  173. data/lib/graphql/scalar_type.rb +0 -91
  174. data/lib/graphql/schema/catchall_middleware.rb +0 -35
  175. data/lib/graphql/schema/default_parse_error.rb +0 -10
  176. data/lib/graphql/schema/default_type_error.rb +0 -17
  177. data/lib/graphql/schema/member/accepts_definition.rb +0 -164
  178. data/lib/graphql/schema/member/cached_graphql_definition.rb +0 -58
  179. data/lib/graphql/schema/member/instrumentation.rb +0 -131
  180. data/lib/graphql/schema/middleware_chain.rb +0 -82
  181. data/lib/graphql/schema/possible_types.rb +0 -44
  182. data/lib/graphql/schema/rescue_middleware.rb +0 -60
  183. data/lib/graphql/schema/timeout_middleware.rb +0 -88
  184. data/lib/graphql/schema/traversal.rb +0 -228
  185. data/lib/graphql/schema/validation.rb +0 -313
  186. data/lib/graphql/static_validation/default_visitor.rb +0 -15
  187. data/lib/graphql/static_validation/no_validate_visitor.rb +0 -10
  188. data/lib/graphql/string_type.rb +0 -2
  189. data/lib/graphql/subscriptions/subscription_root.rb +0 -76
  190. data/lib/graphql/tracing/skylight_tracing.rb +0 -70
  191. data/lib/graphql/types/relay/node_field.rb +0 -24
  192. data/lib/graphql/types/relay/nodes_field.rb +0 -43
  193. data/lib/graphql/union_type.rb +0 -115
  194. data/lib/graphql/upgrader/member.rb +0 -937
  195. 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,7 +0,0 @@
1
- # frozen_string_literal: true
2
- module GraphQL
3
- module Define
4
- class NoDefinitionError < GraphQL::Error
5
- end
6
- end
7
- 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
@@ -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
@@ -1,2 +0,0 @@
1
- # frozen_string_literal: true
2
- GraphQL::Directive::DeprecatedDirective = GraphQL::Schema::Directive::Deprecated.graphql_definition(silence_deprecation_warning: true)
@@ -1,2 +0,0 @@
1
- # frozen_string_literal: true
2
- GraphQL::Directive::IncludeDirective = GraphQL::Schema::Directive::Include.graphql_definition(silence_deprecation_warning: true)
@@ -1,2 +0,0 @@
1
- # frozen_string_literal: true
2
- GraphQL::Directive::SkipDirective = GraphQL::Schema::Directive::Skip.graphql_definition(silence_deprecation_warning: true)