class GraphQL::Field
@api deprecated
Attributes
@return [Hash<String => GraphQL::Argument>] Map String argument names to their {GraphQL::Argument} implementations
@return [Numeric, Proc] The complexity for this field (default: 1), as a constant or a proc like `->(query_ctx, args, child_complexity) { } # Numeric`
@return [nil, Integer]
@return [String, nil] The client-facing reason why this field is deprecated (if present, the field is deprecated)
@return [String, nil] The client-facing description of this field
@return [nil, Class] @api private
@return [Object, GraphQL::Function] The function used to derive this field
@return [String] The name of this field on its {GraphQL::ObjectType} (or {GraphQL::InterfaceType})
@return [Object, nil] The key to access with `obj.[]` to resolve this field (overrides {#name} if present)
@return [<#call(obj, args, ctx)>] A proc-like object which can be called trigger a lazy resolution
@return [GraphQL::Relay::Mutation, nil] The mutation this field was derived from, if it was derived from a mutation
@return [String] The name of this field on its {GraphQL::ObjectType} (or {GraphQL::InterfaceType})
@return [Symbol, nil] The method to call on `obj` to return this field (overrides {#name} if present)
@return [Boolean] True if this is the Relay
find-by-id field
@return [Boolean] True if this is the Relay
find-by-ids field
@return [<#call(obj, args, ctx)>] A proc-like object which can be called to return the field's value
@return [nil, String] Prefix for subscription names from this field
@return [Boolean] True if this field should be traced. By default, fields are only traced if they are not a ScalarType
or EnumType
.
Public Class Methods
# File lib/graphql/field.rb, line 104 def initialize @complexity = 1 @arguments = {} @resolve_proc = build_default_resolver @lazy_resolve_proc = DefaultLazyResolve @relay_node_field = false @connection = false @connection_max_page_size = nil @edge_class = nil @trace = nil @introspection = false end
Public Instance Methods
@return [Boolean]
# File lib/graphql/field.rb, line 88 def connection? @connection end
@return [Boolean]
# File lib/graphql/field.rb, line 97 def edges? !!@edge_class end
# File lib/graphql/field.rb, line 210 def get_argument(argument_name) arguments[argument_name] end
@param new_hash_key [Symbol] A key to access with `#[key]` to resolve this field. Overrides the existing resolve proc.
# File lib/graphql/field.rb, line 174 def hash_key=(new_hash_key) @hash_key = new_hash_key self.resolve = nil # reset resolve proc end
GraphQL::Define::InstanceDefinable#initialize_copy
# File lib/graphql/field.rb, line 117 def initialize_copy(other) ensure_defined super @arguments = other.arguments.dup end
@return [Boolean] Is this field a predefined introspection field?
# File lib/graphql/field.rb, line 124 def introspection? @introspection end
If {#resolve} returned an object which should be handled lazily, this method will be called later to force the object to return its value. @param obj [Object] The {#resolve}-provided object, registered with {Schema#lazy_resolve} @param args [GraphQL::Query::Arguments] Arguments to this field @param ctx [GraphQL::Query::Context] Context for this field @return [Object] The result of calling the registered method on `obj`
# File lib/graphql/field.rb, line 189 def lazy_resolve(obj, args, ctx) @lazy_resolve_proc.call(obj, args, ctx) end
Assign a new resolve proc to this field. Used for {#lazy_resolve}
# File lib/graphql/field.rb, line 194 def lazy_resolve=(new_lazy_resolve_proc) @lazy_resolve_proc = new_lazy_resolve_proc end
# File lib/graphql/field.rb, line 156 def name=(new_name) old_name = defined?(@name) ? @name : nil @name = new_name if old_name != new_name && @resolve_proc.is_a?(Field::Resolve::NameResolve) # Since the NameResolve would use the old field name, # reset resolve proc when the name has changed self.resolve = nil end end
Prepare a lazy value for this field. It may be `then`-ed and resolved later. @return [GraphQL::Execution::Lazy] A lazy wrapper around `obj` and its registered method name
# File lib/graphql/field.rb, line 200 def prepare_lazy(obj, args, ctx) GraphQL::Execution::Lazy.new { lazy_resolve(obj, args, ctx) } end
@param new_property [Symbol] A method to call to resolve this field. Overrides the existing resolve proc.
# File lib/graphql/field.rb, line 168 def property=(new_property) @property = new_property self.resolve = nil # reset resolve proc end
Get a value for this field @example resolving a field value
field.resolve(obj, args, ctx)
@param object [Object] The object this field belongs to @param arguments [Hash] Arguments declared in the query @param context [GraphQL::Query::Context]
# File lib/graphql/field.rb, line 135 def resolve(object, arguments, context) resolve_proc.call(object, arguments, context) end
Provide a new callable for this field's resolve function. If `nil`, a new resolve proc will be build based on its {#name}, {#property} or {#hash_key}. @param new_resolve_proc [<#call(obj, args, ctx)>, nil]
# File lib/graphql/field.rb, line 142 def resolve=(new_resolve_proc) @resolve_proc = new_resolve_proc || build_default_resolver end
# File lib/graphql/field.rb, line 179 def to_s "<Field name:#{name || "not-named"} desc:#{description} resolve:#{resolve_proc}>" end
Get the return type for this field.
# File lib/graphql/field.rb, line 152 def type @clean_type ||= GraphQL::BaseType.resolve_related_type(@dirty_type) end
# File lib/graphql/field.rb, line 146 def type=(new_return_type) @clean_type = nil @dirty_type = new_return_type end
# File lib/graphql/field.rb, line 206 def type_class metadata[:type_class] end
Private Instance Methods
# File lib/graphql/field.rb, line 216 def build_default_resolver GraphQL::Field::Resolve.create_proc(self) end