Class: GraphQL::Schema::Object Private

Inherits:
Member
  • Object
show all
Extended by:
Member::AcceptsDefinition, Member::HasFields
Defined in:
lib/graphql/schema/object.rb

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

Constant Summary

Constants included from Member::GraphQLTypeNames

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

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Member::HasFields

add_default_resolve_module, add_field, extended, field, field_class, fields, global_id_field, included, inherited, own_fields

Methods included from Member::CachedGraphQLDefinition

#graphql_definition, #initialize_copy

Methods included from Relay::TypeExtensions

#connection_type, #define_connection, #define_edge, #edge_type

Methods included from Member::BaseDSLMethods

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

Methods included from Member::TypeSystemHelpers

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

Constructor Details

#initialize(object, context) ⇒ 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.

Returns a new instance of Object.



48
49
50
51
# File 'lib/graphql/schema/object.rb', line 48

def initialize(object, context)
  @object = object
  @context = context
end

Instance Attribute Details

#contextGraphQL::Query::Context (readonly)

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.

Returns the context instance for this query.

Returns:



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

def context
  @context
end

#objectObject (readonly)

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.

Returns the application object this type is wrapping.

Returns:

  • (Object)

    the application object this type is wrapping



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

def object
  @object
end

Class Method Details

.authorized_new(object, context) ⇒ GraphQL::Schema::Object, GraphQL::Execution::Lazy

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.

Make a new instance of this type if the auth check passes, otherwise, raise an error.

Probably only the framework should call this method.

This might return a Execution::Lazy if the user-provided .authorized? hook returns some lazy value (like a Promise).

The reason that the auth check is in this wrapper method instead of new is because of how it might return a Promise. It would be weird if .new returned a promise; It would be a headache to try to maintain Promise-y state inside a GraphQL::Schema::Object instance. So, hopefully this wrapper method will do the job.

Parameters:

Returns:

Raises:



37
38
39
40
41
42
43
44
45
# File 'lib/graphql/schema/object.rb', line 37

def authorized_new(object, context)
  context.schema.after_lazy(authorized?(object, context)) do |is_authorized|
    if is_authorized
      self.new(object, context)
    else
      raise GraphQL::UnauthorizedError.new(object: object, type: self, context: context)
    end
  end
end

.fieldsObject

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.

Include legacy-style interfaces, too



75
76
77
78
79
80
81
82
83
84
85
86
87
# File 'lib/graphql/schema/object.rb', line 75

def fields
  all_fields = super
  interfaces.each do |int|
    if int.is_a?(GraphQL::InterfaceType)
      int_f = {}
      int.fields.each do |name, legacy_field|
        int_f[name] = field_class.from_options(name, field: legacy_field)
      end
      all_fields = int_f.merge(all_fields)
    end
  end
  all_fields
end

.implements(*new_interfaces) ⇒ 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.



54
55
56
57
58
59
60
61
62
63
64
# File 'lib/graphql/schema/object.rb', line 54

def implements(*new_interfaces)
  new_interfaces.each do |int|
    if int.is_a?(Module)
      # Include the methods here,
      # `.fields` will use the inheritance chain
      # to find inherited fields
      include(int)
    end
  end
  own_interfaces.concat(new_interfaces)
end

.interfacesObject

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.



66
67
68
# File 'lib/graphql/schema/object.rb', line 66

def interfaces
  own_interfaces + (superclass <= GraphQL::Schema::Object ? superclass.interfaces : [])
end

.kindObject

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.



108
109
110
# File 'lib/graphql/schema/object.rb', line 108

def kind
  GraphQL::TypeKinds::OBJECT
end

.own_interfacesObject

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.



70
71
72
# File 'lib/graphql/schema/object.rb', line 70

def own_interfaces
  @own_interfaces ||= []
end

.to_graphqlGraphQL::ObjectType

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.

Returns:



90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
# File 'lib/graphql/schema/object.rb', line 90

def to_graphql
  obj_type = GraphQL::ObjectType.new
  obj_type.name = graphql_name
  obj_type.description = description
  obj_type.interfaces = interfaces
  obj_type.introspection = introspection
  obj_type.mutation = mutation

  fields.each do |field_name, field_inst|
    field_defn = field_inst.to_graphql
    obj_type.fields[field_defn.name] = field_defn
  end

  obj_type.[:type_class] = self

  obj_type
end