Class: GraphQL::Schema::Union

Inherits:
Member
  • Object
show all
Extended by:
Member::HasUnresolvedTypeError
Defined in:
lib/graphql/schema/union.rb

Constant Summary

Constants included from Member::HasDirectives

Member::HasDirectives::NO_DIRECTIVES

Constants included from Member::GraphQLTypeNames

Member::GraphQLTypeNames::Boolean, Member::GraphQLTypeNames::ID, Member::GraphQLTypeNames::Int

Class Method Summary collapse

Methods included from Member::BaseDSLMethods

#accessible?, #authorized?, #default_graphql_name, #description, #graphql_name, #introspection, #introspection?, #mutation, #name, #overridden_graphql_name, #visible?

Methods included from Member::BaseDSLMethods::ConfigurationExtension

#inherited

Methods included from Member::TypeSystemHelpers

#kind, #list?, #non_null?, #to_list_type, #to_non_null_type, #to_type_signature

Methods included from Member::Scoped

#scope_items

Methods included from Member::RelayShortcuts

#connection_type, #connection_type_class, #edge_type, #edge_type_class

Methods included from Member::HasPath

#path

Methods included from Member::HasAstNode

#ast_node

Methods included from Member::HasDirectives

#directive, #directives, #remove_directive

Class Method Details

.all_possible_typesObject


31
32
33
# File 'lib/graphql/schema/union.rb', line 31

def all_possible_types
  type_memberships.map(&:object_type)
end

.assign_type_membership_object_type(object_type) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Update a type membership whose .object_type is a string or late-bound type so that the type membership's .object_type is the given object_type. (This is used for updating the union after the schema as lazily loaded the union member.)


55
56
57
58
59
60
61
62
63
64
65
66
67
68
# File 'lib/graphql/schema/union.rb', line 55

def assign_type_membership_object_type(object_type)
  assert_valid_union_member(object_type)
  type_memberships.each { |tm|
    possible_type = tm.object_type
    if possible_type.is_a?(String) && (possible_type == object_type.name)
      # This is a match of Ruby class names, not graphql names,
      # since strings are used to refer to constants.
      tm.object_type = object_type
    elsif possible_type.is_a?(LateBoundType) && possible_type.graphql_name == object_type.graphql_name
      tm.object_type = object_type
    end
  }
  nil
end

.kindObject


43
44
45
# File 'lib/graphql/schema/union.rb', line 43

def kind
  GraphQL::TypeKinds::UNION
end

.possible_types(*types, context: GraphQL::Query::NullContext, **options) ⇒ Object


13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/graphql/schema/union.rb', line 13

def possible_types(*types, context: GraphQL::Query::NullContext, **options)
  if types.any?
    types.each do |t|
      assert_valid_union_member(t)
      type_memberships << type_membership_class.new(self, t, **options)
    end
  else
    visible_types = []
    warden = Warden.from_context(context)
    type_memberships.each do |type_membership|
      if warden.visible_type_membership?(type_membership, context)
        visible_types << type_membership.object_type
      end
    end
    visible_types
  end
end

.type_membership_class(membership_class = nil) ⇒ Object


35
36
37
38
39
40
41
# File 'lib/graphql/schema/union.rb', line 35

def type_membership_class(membership_class = nil)
  if membership_class
    @type_membership_class = membership_class
  else
    @type_membership_class || find_inherited_value(:type_membership_class, GraphQL::Schema::TypeMembership)
  end
end

.type_membershipsObject


47
48
49
# File 'lib/graphql/schema/union.rb', line 47

def type_memberships
  @type_memberships ||= []
end