Class: GraphQL::Schema::Object
- Extended by:
- Member::HasFields, Member::HasInterfaces
- Defined in:
- lib/graphql/schema/object.rb
Direct Known Subclasses
Introspection::BaseObject, Types::Relay::BaseConnection, Types::Relay::BaseEdge, Types::Relay::PageInfo
Defined Under Namespace
Classes: FieldsAreRequiredError
Constant Summary
Constants included from Member::HasFields
Member::HasFields::CONFLICT_FIELD_NAMES, Member::HasFields::GRAPHQL_RUBY_KEYWORDS, Member::HasFields::RUBY_KEYWORDS
Constants included from Member::GraphQLTypeNames
Member::GraphQLTypeNames::Boolean, Member::GraphQLTypeNames::ID, Member::GraphQLTypeNames::Int
Instance Attribute Summary collapse
-
#context ⇒ GraphQL::Query::Context
readonly
The context instance for this query.
-
#object ⇒ Object
readonly
The application object this type is wrapping.
Attributes included from Member::BaseDSLMethods
#default_graphql_name, #graphql_name
Attributes included from Member::RelayShortcuts
#connection_type, #connection_type_class, #edge_type, #edge_type_class
Attributes included from Member::HasAstNode
Class Method Summary collapse
-
.authorized_new(object, context) ⇒ GraphQL::Schema::Object, GraphQL::Execution::Lazy
Make a new instance of this type if the auth check passes, otherwise, raise an error.
-
.const_missing(name) ⇒ Object
Set up a type-specific invalid null error to use when this object's non-null fields wrongly return
nil
. - .kind ⇒ Object
- .scoped_new(object, context) ⇒ Object
-
.wrap(object, context) ⇒ Object
This is called by the runtime to return an object to call methods on.
- .wrap_scoped(object, context) ⇒ Object
Instance Method Summary collapse
- #dataloader ⇒ GraphQL::Dataloader
-
#initialize(object, context) ⇒ Object
constructor
A new instance of Object.
-
#raw_value(obj) ⇒ Object
Call this in a field method to return a value that should be returned to the client without any further handling by GraphQL.
Methods included from Member::HasFields
add_field, all_field_definitions, field, field_class, global_id_field, has_no_fields, has_no_fields?, own_fields
Methods included from Member::HasInterfaces
implements, interface_type_memberships, interfaces, own_interface_type_memberships
Methods included from Member::BaseDSLMethods
#authorized?, #comment, #default_relay, #description, #introspection, #introspection?, #mutation, #name, #visible?
Methods included from Member::BaseDSLMethods::ConfigurationExtension
Methods included from Member::TypeSystemHelpers
#kind, #list?, #non_null?, #to_list_type, #to_non_null_type, #to_type_signature
Methods included from Member::Scoped
#inherited, #reauthorize_scoped_objects, #scope_items
Methods included from Member::HasPath
Methods included from Member::HasAstNode
Methods included from Member::HasDirectives
add_directive, #directive, #directives, get_directives, #inherited, #remove_directive, remove_directive
Constructor Details
#initialize(object, context) ⇒ Object
Returns a new instance of Object.
112 113 114 115 |
# File 'lib/graphql/schema/object.rb', line 112 def initialize(object, context) @object = object @context = context end |
Instance Attribute Details
#context ⇒ GraphQL::Query::Context (readonly)
Returns the context instance for this query.
23 24 25 |
# File 'lib/graphql/schema/object.rb', line 23 def context @context end |
#object ⇒ Object (readonly)
Returns the application object this type is wrapping.
20 21 22 |
# File 'lib/graphql/schema/object.rb', line 20 def object @object end |
Class Method Details
.authorized_new(object, context) ⇒ GraphQL::Schema::Object, GraphQL::Execution::Lazy
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.
67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 |
# File 'lib/graphql/schema/object.rb', line 67 def (object, context) maybe_lazy_auth_val = context.query.current_trace.(query: context.query, type: self, object: object) do begin (object, context) rescue GraphQL::UnauthorizedError => err context.schema.(err) rescue StandardError => err context.query.handle_or_reraise(err) end end auth_val = if context.schema.lazy?(maybe_lazy_auth_val) GraphQL::Execution::Lazy.new do context.query.current_trace.(query: context.query, type: self, object: object) do context.schema.sync_lazy(maybe_lazy_auth_val) end end else maybe_lazy_auth_val end context.query.after_lazy(auth_val) 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 begin new_obj = context.schema.(err) if new_obj self.new(new_obj, context) else nil end end end end end |
.const_missing(name) ⇒ Object
Set up a type-specific invalid null error to use when this object's non-null fields wrongly return nil
.
It should help with debugging and bug tracker integrations.
120 121 122 123 124 125 126 127 128 |
# File 'lib/graphql/schema/object.rb', line 120 def const_missing(name) if name == :InvalidNullError custom_err_class = GraphQL::InvalidNullError.subclass_for(self) const_set(:InvalidNullError, custom_err_class) custom_err_class else super end end |
.kind ⇒ Object
130 131 132 |
# File 'lib/graphql/schema/object.rb', line 130 def kind GraphQL::TypeKinds::OBJECT end |
.scoped_new(object, context) ⇒ Object
107 108 109 |
# File 'lib/graphql/schema/object.rb', line 107 def scoped_new(object, context) self.new(object, context) end |
.wrap(object, context) ⇒ Object
This is called by the runtime to return an object to call methods on.
46 47 48 |
# File 'lib/graphql/schema/object.rb', line 46 def wrap(object, context) (object, context) end |
.wrap_scoped(object, context) ⇒ Object
41 42 43 |
# File 'lib/graphql/schema/object.rb', line 41 def wrap_scoped(object, context) scoped_new(object, context) end |
Instance Method Details
#dataloader ⇒ GraphQL::Dataloader
26 27 28 |
# File 'lib/graphql/schema/object.rb', line 26 def dataloader context.dataloader end |