graphql 1.13.14 → 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 (187) 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 +2 -9
  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/dynamic_fields.rb +3 -8
  19. data/lib/graphql/introspection/entry_points.rb +2 -15
  20. data/lib/graphql/language/document_from_schema_definition.rb +0 -17
  21. data/lib/graphql/pagination/connections.rb +2 -28
  22. data/lib/graphql/query/context.rb +1 -185
  23. data/lib/graphql/query/literal_input.rb +8 -13
  24. data/lib/graphql/query/validation_pipeline.rb +8 -37
  25. data/lib/graphql/query/variables.rb +22 -18
  26. data/lib/graphql/query.rb +5 -35
  27. data/lib/graphql/railtie.rb +0 -104
  28. data/lib/graphql/relay/range_add.rb +0 -4
  29. data/lib/graphql/relay.rb +0 -15
  30. data/lib/graphql/schema/addition.rb +1 -8
  31. data/lib/graphql/schema/argument.rb +1 -25
  32. data/lib/graphql/schema/build_from_definition.rb +0 -1
  33. data/lib/graphql/schema/directive.rb +0 -21
  34. data/lib/graphql/schema/enum.rb +1 -18
  35. data/lib/graphql/schema/enum_value.rb +0 -22
  36. data/lib/graphql/schema/field.rb +2 -185
  37. data/lib/graphql/schema/input_object.rb +9 -56
  38. data/lib/graphql/schema/interface.rb +0 -25
  39. data/lib/graphql/schema/introspection_system.rb +3 -8
  40. data/lib/graphql/schema/late_bound_type.rb +2 -2
  41. data/lib/graphql/schema/list.rb +0 -6
  42. data/lib/graphql/schema/loader.rb +0 -1
  43. data/lib/graphql/schema/member/base_dsl_methods.rb +0 -5
  44. data/lib/graphql/schema/member/build_type.rb +4 -6
  45. data/lib/graphql/schema/member/has_arguments.rb +14 -18
  46. data/lib/graphql/schema/member/has_fields.rb +2 -2
  47. data/lib/graphql/schema/member/has_interfaces.rb +0 -2
  48. data/lib/graphql/schema/member.rb +0 -6
  49. data/lib/graphql/schema/mutation.rb +0 -9
  50. data/lib/graphql/schema/non_null.rb +1 -7
  51. data/lib/graphql/schema/object.rb +0 -40
  52. data/lib/graphql/schema/relay_classic_mutation.rb +17 -28
  53. data/lib/graphql/schema/scalar.rb +0 -15
  54. data/lib/graphql/schema/union.rb +0 -16
  55. data/lib/graphql/schema/warden.rb +1 -1
  56. data/lib/graphql/schema/wrapper.rb +0 -5
  57. data/lib/graphql/schema.rb +106 -945
  58. data/lib/graphql/static_validation/base_visitor.rb +4 -21
  59. data/lib/graphql/static_validation/rules/directives_are_in_valid_locations.rb +12 -12
  60. data/lib/graphql/static_validation/validator.rb +2 -24
  61. data/lib/graphql/static_validation.rb +0 -2
  62. data/lib/graphql/subscriptions/default_subscription_resolve_extension.rb +38 -1
  63. data/lib/graphql/subscriptions/event.rb +1 -1
  64. data/lib/graphql/subscriptions/instrumentation.rb +0 -51
  65. data/lib/graphql/subscriptions.rb +4 -13
  66. data/lib/graphql/tracing/data_dog_tracing.rb +2 -19
  67. data/lib/graphql/tracing/platform_tracing.rb +4 -31
  68. data/lib/graphql/tracing.rb +0 -2
  69. data/lib/graphql/types/relay/connection_behaviors.rb +2 -6
  70. data/lib/graphql/types/relay/default_relay.rb +0 -10
  71. data/lib/graphql/types/relay/node_behaviors.rb +5 -1
  72. data/lib/graphql/types/relay.rb +0 -2
  73. data/lib/graphql/version.rb +1 -1
  74. data/lib/graphql.rb +1 -65
  75. metadata +6 -132
  76. data/lib/graphql/analysis/analyze_query.rb +0 -98
  77. data/lib/graphql/analysis/field_usage.rb +0 -45
  78. data/lib/graphql/analysis/max_query_complexity.rb +0 -26
  79. data/lib/graphql/analysis/max_query_depth.rb +0 -26
  80. data/lib/graphql/analysis/query_complexity.rb +0 -88
  81. data/lib/graphql/analysis/query_depth.rb +0 -43
  82. data/lib/graphql/analysis/reducer_state.rb +0 -48
  83. data/lib/graphql/argument.rb +0 -131
  84. data/lib/graphql/authorization.rb +0 -82
  85. data/lib/graphql/backtrace/legacy_tracer.rb +0 -56
  86. data/lib/graphql/backwards_compatibility.rb +0 -61
  87. data/lib/graphql/base_type.rb +0 -232
  88. data/lib/graphql/boolean_type.rb +0 -2
  89. data/lib/graphql/compatibility/execution_specification/counter_schema.rb +0 -53
  90. data/lib/graphql/compatibility/execution_specification/specification_schema.rb +0 -200
  91. data/lib/graphql/compatibility/execution_specification.rb +0 -436
  92. data/lib/graphql/compatibility/lazy_execution_specification/lazy_schema.rb +0 -111
  93. data/lib/graphql/compatibility/lazy_execution_specification.rb +0 -215
  94. data/lib/graphql/compatibility/query_parser_specification/parse_error_specification.rb +0 -87
  95. data/lib/graphql/compatibility/query_parser_specification/query_assertions.rb +0 -79
  96. data/lib/graphql/compatibility/query_parser_specification.rb +0 -266
  97. data/lib/graphql/compatibility/schema_parser_specification.rb +0 -682
  98. data/lib/graphql/compatibility.rb +0 -5
  99. data/lib/graphql/define/assign_argument.rb +0 -12
  100. data/lib/graphql/define/assign_connection.rb +0 -13
  101. data/lib/graphql/define/assign_enum_value.rb +0 -18
  102. data/lib/graphql/define/assign_global_id_field.rb +0 -11
  103. data/lib/graphql/define/assign_mutation_function.rb +0 -34
  104. data/lib/graphql/define/assign_object_field.rb +0 -42
  105. data/lib/graphql/define/defined_object_proxy.rb +0 -53
  106. data/lib/graphql/define/instance_definable.rb +0 -255
  107. data/lib/graphql/define/no_definition_error.rb +0 -7
  108. data/lib/graphql/define/non_null_with_bang.rb +0 -16
  109. data/lib/graphql/define/type_definer.rb +0 -31
  110. data/lib/graphql/define.rb +0 -31
  111. data/lib/graphql/deprecated_dsl.rb +0 -55
  112. data/lib/graphql/directive/deprecated_directive.rb +0 -2
  113. data/lib/graphql/directive/include_directive.rb +0 -2
  114. data/lib/graphql/directive/skip_directive.rb +0 -2
  115. data/lib/graphql/directive.rb +0 -107
  116. data/lib/graphql/enum_type.rb +0 -133
  117. data/lib/graphql/execution/execute.rb +0 -333
  118. data/lib/graphql/execution/flatten.rb +0 -40
  119. data/lib/graphql/execution/typecast.rb +0 -50
  120. data/lib/graphql/field/resolve.rb +0 -59
  121. data/lib/graphql/field.rb +0 -226
  122. data/lib/graphql/float_type.rb +0 -2
  123. data/lib/graphql/function.rb +0 -128
  124. data/lib/graphql/id_type.rb +0 -2
  125. data/lib/graphql/input_object_type.rb +0 -138
  126. data/lib/graphql/int_type.rb +0 -2
  127. data/lib/graphql/interface_type.rb +0 -72
  128. data/lib/graphql/internal_representation/document.rb +0 -27
  129. data/lib/graphql/internal_representation/node.rb +0 -206
  130. data/lib/graphql/internal_representation/print.rb +0 -51
  131. data/lib/graphql/internal_representation/rewrite.rb +0 -184
  132. data/lib/graphql/internal_representation/scope.rb +0 -88
  133. data/lib/graphql/internal_representation/visit.rb +0 -36
  134. data/lib/graphql/internal_representation.rb +0 -7
  135. data/lib/graphql/list_type.rb +0 -80
  136. data/lib/graphql/non_null_type.rb +0 -71
  137. data/lib/graphql/object_type.rb +0 -130
  138. data/lib/graphql/query/arguments.rb +0 -189
  139. data/lib/graphql/query/arguments_cache.rb +0 -24
  140. data/lib/graphql/query/executor.rb +0 -52
  141. data/lib/graphql/query/serial_execution/field_resolution.rb +0 -92
  142. data/lib/graphql/query/serial_execution/operation_resolution.rb +0 -19
  143. data/lib/graphql/query/serial_execution/selection_resolution.rb +0 -23
  144. data/lib/graphql/query/serial_execution/value_resolution.rb +0 -87
  145. data/lib/graphql/query/serial_execution.rb +0 -40
  146. data/lib/graphql/relay/array_connection.rb +0 -83
  147. data/lib/graphql/relay/base_connection.rb +0 -189
  148. data/lib/graphql/relay/connection_instrumentation.rb +0 -54
  149. data/lib/graphql/relay/connection_resolve.rb +0 -43
  150. data/lib/graphql/relay/connection_type.rb +0 -54
  151. data/lib/graphql/relay/edge.rb +0 -27
  152. data/lib/graphql/relay/edge_type.rb +0 -19
  153. data/lib/graphql/relay/edges_instrumentation.rb +0 -39
  154. data/lib/graphql/relay/global_id_resolve.rb +0 -17
  155. data/lib/graphql/relay/mongo_relation_connection.rb +0 -50
  156. data/lib/graphql/relay/mutation/instrumentation.rb +0 -23
  157. data/lib/graphql/relay/mutation/resolve.rb +0 -56
  158. data/lib/graphql/relay/mutation/result.rb +0 -38
  159. data/lib/graphql/relay/mutation.rb +0 -106
  160. data/lib/graphql/relay/node.rb +0 -39
  161. data/lib/graphql/relay/page_info.rb +0 -7
  162. data/lib/graphql/relay/relation_connection.rb +0 -188
  163. data/lib/graphql/relay/type_extensions.rb +0 -32
  164. data/lib/graphql/scalar_type.rb +0 -91
  165. data/lib/graphql/schema/catchall_middleware.rb +0 -35
  166. data/lib/graphql/schema/default_parse_error.rb +0 -10
  167. data/lib/graphql/schema/default_type_error.rb +0 -17
  168. data/lib/graphql/schema/member/accepts_definition.rb +0 -164
  169. data/lib/graphql/schema/member/cached_graphql_definition.rb +0 -58
  170. data/lib/graphql/schema/member/instrumentation.rb +0 -131
  171. data/lib/graphql/schema/middleware_chain.rb +0 -82
  172. data/lib/graphql/schema/possible_types.rb +0 -44
  173. data/lib/graphql/schema/rescue_middleware.rb +0 -60
  174. data/lib/graphql/schema/timeout_middleware.rb +0 -88
  175. data/lib/graphql/schema/traversal.rb +0 -228
  176. data/lib/graphql/schema/validation.rb +0 -313
  177. data/lib/graphql/static_validation/default_visitor.rb +0 -15
  178. data/lib/graphql/static_validation/no_validate_visitor.rb +0 -10
  179. data/lib/graphql/string_type.rb +0 -2
  180. data/lib/graphql/subscriptions/subscription_root.rb +0 -76
  181. data/lib/graphql/tracing/opentelemetry_tracing.rb +0 -101
  182. data/lib/graphql/tracing/skylight_tracing.rb +0 -70
  183. data/lib/graphql/types/relay/node_field.rb +0 -24
  184. data/lib/graphql/types/relay/nodes_field.rb +0 -43
  185. data/lib/graphql/union_type.rb +0 -115
  186. data/lib/graphql/upgrader/member.rb +0 -937
  187. data/lib/graphql/upgrader/schema.rb +0 -38
@@ -1,101 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module GraphQL
4
- module Tracing
5
- class OpenTelemetryTracing < PlatformTracing
6
- self.platform_keys = {
7
- 'lex' => 'graphql.lex',
8
- 'parse' => 'graphql.parse',
9
- 'validate' => 'graphql.validate',
10
- 'analyze_query' => 'graphql.analyze_query',
11
- 'analyze_multiplex' => 'graphql.analyze_multiplex',
12
- 'execute_query' => 'graphql.execute_query',
13
- 'execute_query_lazy' => 'graphql.execute_query_lazy',
14
- 'execute_multiplex' => 'graphql.execute_multiplex'
15
- }
16
-
17
- def platform_trace(platform_key, key, data)
18
- return yield if platform_key.nil?
19
-
20
- tracer.in_span(platform_key, attributes: attributes_for(key, data)) do |span, _context|
21
- yield.tap do |response|
22
- errors = response[:errors]&.compact&.map { |e| e.to_h }&.to_json if key == 'validate'
23
- unless errors.nil?
24
- span.add_event(
25
- 'graphql.validation.error',
26
- attributes: {
27
- 'message' => errors
28
- }
29
- )
30
- end
31
- end
32
- end
33
- end
34
-
35
- def platform_field_key(type, field)
36
- "#{type.graphql_name}.#{field.graphql_name}"
37
- end
38
-
39
- def platform_authorized_key(type)
40
- "#{type.graphql_name}.authorized"
41
- end
42
-
43
- def platform_resolve_type_key(type)
44
- "#{type.graphql_name}.resolve_type"
45
- end
46
-
47
- private
48
-
49
- def tracer
50
- OpenTelemetry::Instrumentation::GraphQL::Instrumentation.instance.tracer
51
- end
52
-
53
- def config
54
- OpenTelemetry::Instrumentation::GraphQL::Instrumentation.instance.config
55
- end
56
-
57
- def platform_key_enabled?(ctx, key)
58
- return false unless config[key]
59
-
60
- ns = ctx.namespace(:opentelemetry)
61
- return true if ns.empty? # restores original behavior so that keys are returned if tracing is not set in context.
62
- return false unless ns.key?(key) && ns[key]
63
-
64
- return true
65
- end
66
-
67
- def attributes_for(key, data)
68
- attributes = {}
69
- case key
70
- when 'execute_query'
71
- attributes['selected_operation_name'] = data[:query].selected_operation_name if data[:query].selected_operation_name
72
- attributes['selected_operation_type'] = data[:query].selected_operation.operation_type
73
- attributes['query_string'] = data[:query].query_string
74
- end
75
- attributes
76
- end
77
-
78
- def cached_platform_key(ctx, key, trace_phase)
79
- cache = ctx.namespace(self.class)[:platform_key_cache] ||= {}
80
-
81
- cache.fetch(key) do
82
- cache[key] = if trace_phase == :field
83
- return unless platform_key_enabled?(ctx, :enable_platform_field)
84
-
85
- yield
86
- elsif trace_phase == :authorized
87
- return unless platform_key_enabled?(ctx, :enable_platform_authorized)
88
-
89
- yield
90
- elsif trace_phase == :resolve_type
91
- return unless platform_key_enabled?(ctx, :enable_platform_resolve_type)
92
-
93
- yield
94
- else
95
- raise "Unknown trace phase"
96
- end
97
- end
98
- end
99
- end
100
- end
101
- end
@@ -1,70 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module GraphQL
4
- module Tracing
5
- class SkylightTracing < PlatformTracing
6
- self.platform_keys = {
7
- "lex" => "graphql.language",
8
- "parse" => "graphql.language",
9
- "validate" => "graphql.prepare",
10
- "analyze_query" => "graphql.prepare",
11
- "analyze_multiplex" => "graphql.prepare",
12
- "execute_multiplex" => "graphql.execute",
13
- "execute_query" => "graphql.execute",
14
- "execute_query_lazy" => "graphql.execute",
15
- }
16
-
17
- # @param set_endpoint_name [Boolean] If true, the GraphQL operation name will be used as the endpoint name.
18
- # This is not advised if you run more than one query per HTTP request, for example, with `graphql-client` or multiplexing.
19
- # It can also be specified per-query with `context[:set_skylight_endpoint_name]`.
20
- def initialize(options = {})
21
- GraphQL::Deprecation.warn("GraphQL::Tracing::SkylightTracing is deprecated and will be removed in GraphQL-Ruby 2.0, please enable Skylight's GraphQL probe instead: https://www.skylight.io/support/getting-more-from-skylight#graphql.")
22
- @set_endpoint_name = options.fetch(:set_endpoint_name, false)
23
- super
24
- end
25
-
26
- def platform_trace(platform_key, key, data)
27
- if key == "execute_query"
28
- query = data[:query]
29
- title = query.selected_operation_name || "<anonymous>"
30
- category = platform_key
31
- set_endpoint_name_override = query.context[:set_skylight_endpoint_name]
32
- if set_endpoint_name_override == true || (set_endpoint_name_override.nil? && @set_endpoint_name)
33
- # Assign the endpoint so that queries will be grouped
34
- instrumenter = Skylight.instrumenter
35
- if instrumenter
36
- current_trace = instrumenter.current_trace
37
- if current_trace
38
- op_type = query.selected_operation ? query.selected_operation.operation_type : "query"
39
- endpoint = "GraphQL/#{op_type}.#{title}"
40
- current_trace.endpoint = endpoint
41
- end
42
- end
43
- end
44
- elsif key.start_with?("execute_field")
45
- title = platform_key
46
- category = key
47
- else
48
- title = key
49
- category = platform_key
50
- end
51
-
52
- Skylight.instrument(category: category, title: title) do
53
- yield
54
- end
55
- end
56
-
57
- def platform_field_key(type, field)
58
- "graphql.#{type.graphql_name}.#{field.graphql_name}"
59
- end
60
-
61
- def platform_authorized_key(type)
62
- "graphql.authorized.#{type.graphql_name}"
63
- end
64
-
65
- def platform_resolve_type_key(type)
66
- "graphql.resolve_type.#{type.graphql_name}"
67
- end
68
- end
69
- end
70
- end
@@ -1,24 +0,0 @@
1
- # frozen_string_literal: true
2
- module GraphQL
3
- module Types
4
- module Relay
5
- # Don't use this field directly, instead, use one of these approaches:
6
- #
7
- # @example Adding this field directly
8
- # include GraphQL::Types::Relay::HasNodeField
9
- #
10
- # @example Implementing a similar field in your own Query root
11
- #
12
- # field :node, GraphQL::Types::Relay::Node, null: true,
13
- # description: "Fetches an object given its ID" do
14
- # argument :id, ID, required: true
15
- # end
16
- #
17
- # def node(id:)
18
- # context.schema.object_from_id(id, context)
19
- # end
20
- #
21
- DeprecatedNodeField = GraphQL::Schema::Field.new(owner: nil, **HasNodeField.field_options, &HasNodeField.field_block)
22
- end
23
- end
24
- end
@@ -1,43 +0,0 @@
1
- # frozen_string_literal: true
2
- module GraphQL
3
- module Types
4
- module Relay
5
- # Don't use this directly, instead, use one of these:
6
- #
7
- # @example Adding this field directly
8
- # include GraphQL::Types::Relay::HasNodesField
9
- #
10
- # @example Implementing a similar field in your own Query root
11
- #
12
- # field :nodes, [GraphQL::Types::Relay::Node, null: true], null: false,
13
- # description: Fetches a list of objects given a list of IDs." do
14
- # argument :ids, [ID], required: true
15
- # end
16
- #
17
- # def nodes(ids:)
18
- # ids.map do |id|
19
- # context.schema.object_from_id(context, id)
20
- # end
21
- # end
22
- #
23
- def self.const_missing(const_name)
24
- if const_name == :NodesField
25
- message = "NodesField is deprecated, use `include GraphQL::Types::Relay::HasNodesField` instead."
26
- message += "\n(referenced from #{caller(1, 1).first})"
27
- GraphQL::Deprecation.warn(message)
28
-
29
- DeprecatedNodesField
30
- elsif const_name == :NodeField
31
- message = "NodeField is deprecated, use `include GraphQL::Types::Relay::HasNodeField` instead."
32
- message += "\n(referenced from #{caller(1, 1).first})"
33
- GraphQL::Deprecation.warn(message)
34
-
35
- DeprecatedNodeField
36
- else
37
- super
38
- end
39
- end
40
- DeprecatedNodesField = GraphQL::Schema::Field.new(owner: nil, **HasNodesField.field_options, &HasNodesField.field_block)
41
- end
42
- end
43
- end
@@ -1,115 +0,0 @@
1
- # frozen_string_literal: true
2
- module GraphQL
3
- # @api deprecated
4
- class UnionType < GraphQL::BaseType
5
- extend Define::InstanceDefinable::DeprecatedDefine
6
-
7
- # Rubocop was unhappy about the syntax when this was a proc literal
8
- class AcceptPossibleTypesDefinition
9
- def self.call(target, possible_types, options = {})
10
- target.add_possible_types(possible_types, **options)
11
- end
12
- end
13
-
14
- deprecated_accepts_definitions :resolve_type, :type_membership_class,
15
- possible_types: AcceptPossibleTypesDefinition
16
- ensure_defined :possible_types, :resolve_type, :resolve_type_proc, :type_membership_class
17
-
18
- attr_accessor :resolve_type_proc
19
- attr_reader :type_memberships
20
- attr_accessor :type_membership_class
21
-
22
- def initialize
23
- super
24
- @type_membership_class = GraphQL::Schema::TypeMembership
25
- @type_memberships = []
26
- @cached_possible_types = nil
27
- @resolve_type_proc = nil
28
- end
29
-
30
- def initialize_copy(other)
31
- super
32
- @type_membership_class = other.type_membership_class
33
- @type_memberships = other.type_memberships.dup
34
- @cached_possible_types = nil
35
- end
36
-
37
- def kind
38
- GraphQL::TypeKinds::UNION
39
- end
40
-
41
- # @return [Boolean] True if `child_type_defn` is a member of this {UnionType}
42
- def include?(child_type_defn, ctx = GraphQL::Query::NullContext)
43
- possible_types(ctx).include?(child_type_defn)
44
- end
45
-
46
- # @return [Array<GraphQL::ObjectType>] Types which may be found in this union
47
- def possible_types(ctx = GraphQL::Query::NullContext)
48
- if ctx == GraphQL::Query::NullContext
49
- # Only cache the default case; if we cached for every `ctx`, it would be a memory leak
50
- # (The warden should cache calls to this method, so it's called only once per query,
51
- # unless user code calls it directly.)
52
- @cached_possible_types ||= possible_types_for_context(ctx)
53
- else
54
- possible_types_for_context(ctx)
55
- end
56
- end
57
-
58
- def possible_types=(types)
59
- # This is a re-assignment, so clear the previous values
60
- @type_memberships = []
61
- @cached_possible_types = nil
62
- add_possible_types(types, **{})
63
- end
64
-
65
- def add_possible_types(types, **options)
66
- @type_memberships ||= []
67
- Array(types).each { |t|
68
- @type_memberships << self.type_membership_class.new(self, t, **options)
69
- }
70
- nil
71
- end
72
-
73
- # Get a possible type of this {UnionType} by type name
74
- # @param type_name [String]
75
- # @param ctx [GraphQL::Query::Context] The context for the current query
76
- # @return [GraphQL::ObjectType, nil] The type named `type_name` if it exists and is a member of this {UnionType}, (else `nil`)
77
- def get_possible_type(type_name, ctx)
78
- type = ctx.query.get_type(type_name)
79
- type if type && ctx.query.warden.possible_types(self).include?(type)
80
- end
81
-
82
- # Check if a type is a possible type of this {UnionType}
83
- # @param type [String, GraphQL::BaseType] Name of the type or a type definition
84
- # @param ctx [GraphQL::Query::Context] The context for the current query
85
- # @return [Boolean] True if the `type` exists and is a member of this {UnionType}, (else `nil`)
86
- def possible_type?(type, ctx)
87
- type_name = type.is_a?(String) ? type : type.graphql_name
88
- !get_possible_type(type_name, ctx).nil?
89
- end
90
-
91
- def resolve_type(value, ctx)
92
- ctx.query.resolve_type(self, value)
93
- end
94
-
95
- def resolve_type=(new_resolve_type_proc)
96
- @resolve_type_proc = new_resolve_type_proc
97
- end
98
-
99
- def type_memberships=(type_memberships)
100
- @type_memberships = type_memberships
101
- end
102
-
103
- private
104
-
105
- def possible_types_for_context(ctx)
106
- visible_types = []
107
- @type_memberships.each do |type_membership|
108
- if type_membership.visible?(ctx)
109
- visible_types << BaseType.resolve_related_type(type_membership.object_type)
110
- end
111
- end
112
- visible_types
113
- end
114
- end
115
- end