Class: GraphQL::Schema::Object Private
- 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.
Direct Known Subclasses
Constant Summary
Constants included from Member::GraphQLTypeNames
Member::GraphQLTypeNames::Boolean, Member::GraphQLTypeNames::ID, Member::GraphQLTypeNames::Int
Instance Attribute Summary collapse
-
#context ⇒ GraphQL::Query::Context
readonly
private
The context instance for this query.
-
#object ⇒ Object
readonly
private
The application object this type is wrapping.
Class Method Summary collapse
-
.authorized_new(object, context) ⇒ GraphQL::Schema::Object, GraphQL::Execution::Lazy
private
Make a new instance of this type if the auth check passes, otherwise, raise an error.
-
.fields ⇒ Object
private
Include legacy-style interfaces, too.
-
.implements(*new_interfaces) ⇒ Object
private
-
.interfaces ⇒ Object
private
-
.kind ⇒ Object
private
-
.own_interfaces ⇒ Object
private
-
.to_graphql ⇒ GraphQL::ObjectType
private
Instance Method Summary collapse
-
#initialize(object, context) ⇒ Object
constructor
private
A new instance of Object.
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::TypeSystemHelpers
#kind, #list?, #non_null?, #to_list_type, #to_non_null_type, #to_type_signature
Methods included from Member::BaseDSLMethods
#accessible?, #authorized?, #description, #graphql_name, #introspection, #mutation, #name, #overridden_graphql_name, #to_graphql, #visible?
Methods included from Relay::TypeExtensions
#connection_type, #define_connection, #define_edge, #edge_type
Methods included from Member::CachedGraphQLDefinition
#graphql_definition, #initialize_copy
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
54 55 56 57 |
# File 'lib/graphql/schema/object.rb', line 54 def initialize(object, context) @object = object @context = context end |
Instance Attribute Details
#context ⇒ GraphQL::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
13 14 15 |
# File 'lib/graphql/schema/object.rb', line 13 def context @context end |
#object ⇒ Object (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
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.
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/graphql/schema/object.rb', line 37 def (object, context) context.schema.after_lazy((object, context)) do || if self.new(object, context) else # It failed the authorization check, so go to the schema's authorized object hook err = GraphQL::UnauthorizedError.new(object: object, type: self, context: context) # If a new value was returned, wrap that instead of the original value new_obj = context.schema.(err) if new_obj self.new(new_obj, context) end end end end |
.fields ⇒ 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.
Include legacy-style interfaces, too
81 82 83 84 85 86 87 88 89 90 91 92 93 |
# File 'lib/graphql/schema/object.rb', line 81 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.(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.
60 61 62 63 64 65 66 67 68 69 70 |
# File 'lib/graphql/schema/object.rb', line 60 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 |
.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.
72 73 74 |
# File 'lib/graphql/schema/object.rb', line 72 def interfaces own_interfaces + (superclass <= GraphQL::Schema::Object ? superclass.interfaces : []) end |
.kind ⇒ 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.
113 114 115 |
# File 'lib/graphql/schema/object.rb', line 113 def kind GraphQL::TypeKinds::OBJECT end |
.own_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.
76 77 78 |
# File 'lib/graphql/schema/object.rb', line 76 def own_interfaces @own_interfaces ||= [] end |
.to_graphql ⇒ GraphQL::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.
96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 |
# File 'lib/graphql/schema/object.rb', line 96 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 |