Class: GraphQL::Field
- Inherits:
-
Object
- Object
- GraphQL::Field
- Includes:
- Define::InstanceDefinable
- Defined in:
- lib/graphql/field.rb,
lib/graphql/field/resolve.rb
Overview
Fields belong to ObjectTypes and InterfaceTypes.
They’re usually created with the ‘field` helper. If you create it by hand, make sure #name is a String.
A field must have a return type, but if you want to defer the return type calculation until later, you can pass a proc for the return type. That proc will be called when the schema is defined.
For complex field definition, you can pass a block to the ‘field` helper, eg `field :name do … end`. This block is equivalent to calling `GraphQL::Field.define { … }`.
## Resolve
Fields have ‘resolve` functions to determine their values at query-time. The default implementation is to call a method on the object based on the field name.
You can specify a custom proc with the ‘resolve` helper.
There are some shortcuts for common ‘resolve` implementations:
- Provide `property:` to call a method with a different name than the field name
- Provide `hash_key:` to resolve the field by doing a key lookup, eg `obj[:my_hash_key]`
## Arguments
Fields can take inputs; they’re called arguments. You can define them with the ‘argument` helper.
They can have default values which will be provided to ‘resolve` if the query doesn’t include a value.
Only certain types maybe used for inputs:
-
Scalars
-
Enums
-
Input Objects
-
Lists of those types
Input types may also be non-null – in that case, the query will fail if the input is not present.
## Complexity
Fields can have complexity values which describe the computation cost of resolving the field. You can provide the complexity as a constant with ‘complexity:` or as a proc, with the `complexity` helper.
Defined Under Namespace
Modules: Resolve
Instance Attribute Summary collapse
-
#arguments ⇒ Hash<String => GraphQL::Argument>
Map String argument names to their Argument implementations.
-
#complexity ⇒ Numeric, Proc
The complexity for this field (default: 1), as a constant or a proc like ‘-> (query_ctx, args, child_complexity) { } # Numeric`.
-
#name ⇒ String
The name of this field on its ObjectType (or InterfaceType).
-
#resolve_proc ⇒ <#call(obj, args,ctx)>
readonly
A proc-like object which can be called to return the field’s value.
Instance Method Summary collapse
- #hash_key=(new_hash_key) ⇒ Object
-
#initialize ⇒ Field
constructor
A new instance of Field.
- #property=(new_property) ⇒ Object
-
#resolve(object, arguments, context) ⇒ Object
Get a value for this field.
- #resolve=(resolve_proc) ⇒ Object
- #to_s ⇒ Object
-
#type ⇒ Object
Get the return type for this field.
- #type=(new_return_type) ⇒ Object
Methods included from Define::InstanceDefinable
#definition_proc=, included, #metadata
Constructor Details
#initialize ⇒ Field
Returns a new instance of Field.
154 155 156 157 158 |
# File 'lib/graphql/field.rb', line 154 def initialize @complexity = 1 @arguments = {} @resolve_proc = build_default_resolver end |
Instance Attribute Details
#arguments ⇒ Hash<String => GraphQL::Argument>
Returns Map String argument names to their Argument implementations.
139 140 141 142 |
# File 'lib/graphql/field.rb', line 139 def arguments ensure_defined @arguments end |
#complexity ⇒ Numeric, Proc
Returns The complexity for this field (default: 1), as a constant or a proc like ‘-> (query_ctx, args, child_complexity) { } # Numeric`.
147 148 149 150 |
# File 'lib/graphql/field.rb', line 147 def complexity ensure_defined @complexity end |
#name ⇒ String
Returns The name of this field on its ObjectType (or InterfaceType).
131 132 133 134 |
# File 'lib/graphql/field.rb', line 131 def name ensure_defined @name end |
#resolve_proc ⇒ <#call(obj, args,ctx)> (readonly)
Returns A proc-like object which can be called to return the field’s value.
128 129 130 |
# File 'lib/graphql/field.rb', line 128 def resolve_proc @resolve_proc end |
Instance Method Details
#hash_key=(new_hash_key) ⇒ Object
212 213 214 215 216 |
# File 'lib/graphql/field.rb', line 212 def hash_key=(new_hash_key) ensure_defined @hash_key = new_hash_key self.resolve = nil # reset resolve proc end |
#property=(new_property) ⇒ Object
205 206 207 208 209 |
# File 'lib/graphql/field.rb', line 205 def property=(new_property) ensure_defined @property = new_property self.resolve = nil # reset resolve proc end |
#resolve(object, arguments, context) ⇒ Object
Get a value for this field
167 168 169 170 |
# File 'lib/graphql/field.rb', line 167 def resolve(object, arguments, context) ensure_defined resolve_proc.call(object, arguments, context) end |
#resolve=(resolve_proc) ⇒ Object
172 173 174 175 |
# File 'lib/graphql/field.rb', line 172 def resolve=(resolve_proc) ensure_defined @resolve_proc = resolve_proc || build_default_resolver end |
#to_s ⇒ Object
218 219 220 |
# File 'lib/graphql/field.rb', line 218 def to_s "<Field name:#{name || "not-named"} desc:#{description} resolve:#{resolve_proc}>" end |
#type ⇒ Object
Get the return type for this field.
184 185 186 187 188 189 |
# File 'lib/graphql/field.rb', line 184 def type @clean_type ||= begin ensure_defined GraphQL::BaseType.(@dirty_type) end end |
#type=(new_return_type) ⇒ Object
177 178 179 180 181 |
# File 'lib/graphql/field.rb', line 177 def type=(new_return_type) ensure_defined @clean_type = nil @dirty_type = new_return_type end |