Class: GraphQL::ObjectType

Inherits:
BaseType show all
Extended by:
Define::InstanceDefinable::DeprecatedDefine
Defined in:
lib/graphql/object_type.rb

Instance Attribute Summary collapse

Attributes inherited from BaseType

#ast_node, #default_relay, #default_scalar, #description, #introspection, #name

Instance Method Summary collapse

Methods included from Define::InstanceDefinable::DeprecatedDefine

define

Methods inherited from BaseType

#==, #coerce_input, #coerce_isolated_input, #coerce_isolated_result, #coerce_result, #default_relay?, #default_scalar?, #introspection?, #list?, #non_null?, resolve_related_type, #resolve_type, #to_definition, #to_list_type, #to_non_null_type, #to_s, #type_class, #unwrap, #valid_input?, #valid_isolated_input?, #validate_input, #validate_isolated_input

Methods included from Relay::TypeExtensions

#connection_type, #define_connection, #define_edge, #edge_type

Methods included from Define::InstanceDefinable

#define, #deprecated_define, #metadata, #redefine

Methods included from Define::NonNullWithBang

#!

Constructor Details

#initializeObjectType

Returns a new instance of ObjectType.



19
20
21
22
23
24
25
# File 'lib/graphql/object_type.rb', line 19

def initialize
  super
  @fields = {}
  @clean_inherited_fields = nil
  @structural_interface_type_memberships = []
  @inherited_interface_type_memberships = []
end

Instance Attribute Details

#fieldsHash<String => GraphQL::Field>

Returns Map String fieldnames to their Field implementations.

Returns:



13
14
15
# File 'lib/graphql/object_type.rb', line 13

def fields
  @fields
end

#mutationGraphQL::Relay::Mutation?

Returns The mutation this object type was derived from, if it is an auto-generated payload type.

Returns:

  • (GraphQL::Relay::Mutation, nil)

    The mutation this object type was derived from, if it is an auto-generated payload type.



19
20
21
# File 'lib/graphql/object_type.rb', line 19

def mutation
  @mutation
end

#relay_node_typeObject



10
11
12
# File 'lib/graphql/object_type.rb', line 10

def relay_node_type
  @relay_node_type
end

#structural_interface_type_memberships=(value) ⇒ Object



102
103
104
# File 'lib/graphql/object_type.rb', line 102

def structural_interface_type_memberships=(value)
  @structural_interface_type_memberships = value
end

Instance Method Details

#all_fieldsArray<GraphQL::Field>

These fields don’t have instrumenation applied

Returns:

  • (Array<GraphQL::Field>)

    All fields, including ones inherited from interfaces

See Also:

  • Get fields with instrumentation


75
76
77
# File 'lib/graphql/object_type.rb', line 75

def all_fields
  interface_fields.merge(self.fields).values
end

#get_field(field_name) ⇒ GraphQL::Field

This fields doesnt have instrumenation applied

Returns:

  • (GraphQL::Field)

    The field definition for field_name (may be inherited from interfaces)

See Also:

  • Get field with instrumentation


68
69
70
# File 'lib/graphql/object_type.rb', line 68

def get_field(field_name)
  fields[field_name] || interface_fields[field_name]
end

#implements(interfaces, inherit: false, **options) ⇒ Object

Declare that this object implements this interface. This declaration will be validated when the schema is defined.

Parameters:

  • interfaces (Array<GraphQL::Interface>)

    add a new interface that this type implements

  • inherits (Boolean)

    If true, copy the interfaces’ field definitions to this type



83
84
85
86
87
88
89
90
91
92
93
94
95
96
# File 'lib/graphql/object_type.rb', line 83

def implements(interfaces, inherit: false, **options)
  if !interfaces.is_a?(Array)
    raise ArgumentError, "`implements(interfaces)` must be an array, not #{interfaces.class} (#{interfaces})"
  end
  @clean_inherited_fields = nil

  type_memberships = inherit ? @inherited_interface_type_memberships : @structural_interface_type_memberships
  interfaces.each do |iface|
    iface = BaseType.resolve_related_type(iface)
    if iface.is_a?(GraphQL::InterfaceType)
      type_memberships << iface.type_membership_class.new(iface, self, **options)
    end
  end
end

#initialize_copy(other) ⇒ Object



27
28
29
30
31
32
# File 'lib/graphql/object_type.rb', line 27

def initialize_copy(other)
  super
  @structural_interface_type_memberships = other.structural_interface_type_memberships.dup
  @inherited_interface_type_memberships = other.inherited_interface_type_memberships.dup
  @fields = other.fields.dup
end

#interfaces(ctx = GraphQL::Query::NullContext) ⇒ Object



44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/graphql/object_type.rb', line 44

def interfaces(ctx = GraphQL::Query::NullContext)
  ensure_defined
  visible_ifaces = []
  unfiltered = ctx == GraphQL::Query::NullContext
  [@structural_interface_type_memberships, @inherited_interface_type_memberships].each do |tms|
    tms.each do |type_membership|
      if unfiltered || type_membership.visible?(ctx)
        # if this is derived from a class-based object, we have to
        # get the `.graphql_definition` of the attached interface.
        visible_ifaces << GraphQL::BaseType.resolve_related_type(type_membership.abstract_type)
      end
    end
  end

  visible_ifaces
end

#interfaces=(new_interfaces) ⇒ Object

Deprecated.

Use implements instead of interfaces.

This method declares interfaces for this type AND inherits any field definitions

Parameters:

  • new_interfaces (Array<GraphQL::Interface>)

    interfaces that this type implements



37
38
39
40
41
42
# File 'lib/graphql/object_type.rb', line 37

def interfaces=(new_interfaces)
  @structural_interface_type_memberships = []
  @inherited_interface_type_memberships = []
  @clean_inherited_fields = nil
  implements(new_interfaces, inherit: true)
end

#kindObject



61
62
63
# File 'lib/graphql/object_type.rb', line 61

def kind
  GraphQL::TypeKinds::OBJECT
end

#resolve_type_procObject



98
99
100
# File 'lib/graphql/object_type.rb', line 98

def resolve_type_proc
  nil
end