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 |