Class: GraphQL::Schema::Object
- Extended by:
- Member::HasFields, Member::HasInterfaces
- Includes:
- Member::HasDataloader
- 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::HasDataloader
#dataload, #dataload_association, #dataload_record
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.
| 121 122 123 124 | # File 'lib/graphql/schema/object.rb', line 121 def initialize(object, context) @object = object @context = context end | 
Instance Attribute Details
#context ⇒ GraphQL::Query::Context (readonly)
Returns the context instance for this query.
| 24 25 26 | # File 'lib/graphql/schema/object.rb', line 24 def context @context end | 
#object ⇒ Object (readonly)
Returns the application object this type is wrapping.
| 21 22 23 | # File 'lib/graphql/schema/object.rb', line 21 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.
| 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 106 107 108 109 110 111 112 113 114 | # File 'lib/graphql/schema/object.rb', line 68 def (object, context) context.query.current_trace.(self, object, context) begin 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 ensure context.query.current_trace.(self, object, context, maybe_lazy_auth_val) end auth_val = if context.schema.lazy?(maybe_lazy_auth_val) GraphQL::Execution::Lazy.new do context.query.current_trace.(self, object, context) context.query.current_trace.(query: context.query, type: self, object: object) do res = context.schema.sync_lazy(maybe_lazy_auth_val) context.query.current_trace.(self, object, context, res) res 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.
| 129 130 131 132 133 134 135 136 137 | # File 'lib/graphql/schema/object.rb', line 129 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
| 139 140 141 | # File 'lib/graphql/schema/object.rb', line 139 def kind GraphQL::TypeKinds::OBJECT end | 
.scoped_new(object, context) ⇒ Object
| 116 117 118 | # File 'lib/graphql/schema/object.rb', line 116 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.
| 47 48 49 | # File 'lib/graphql/schema/object.rb', line 47 def wrap(object, context) (object, context) end | 
.wrap_scoped(object, context) ⇒ Object
| 42 43 44 | # File 'lib/graphql/schema/object.rb', line 42 def wrap_scoped(object, context) scoped_new(object, context) end | 
Instance Method Details
#dataloader ⇒ GraphQL::Dataloader
| 27 28 29 | # File 'lib/graphql/schema/object.rb', line 27 def dataloader context.dataloader end |