Class: GraphQL::Schema::BuildFromDefinition::ResolveMap Private
- Inherits:
-
Object
- Object
- GraphQL::Schema::BuildFromDefinition::ResolveMap
- Defined in:
- lib/graphql/schema/build_from_definition/resolve_map.rb,
lib/graphql/schema/build_from_definition/resolve_map/default_resolve.rb
Overview
This class is part of a private API. You should avoid using this class if possible, as it may be removed or be changed in the future.
Wrap a user-provided hash of resolution behavior for easy access at runtime.
Coerce scalar values by:
- Checking for a function in the map like { Date: { coerce_input: ->(val, ctx) { ... }, coerce_result: ->(val, ctx) { ... } } }
- Falling back to a passthrough
Interface/union resolution can be provided as a resolve_type:
key.
Defined Under Namespace
Classes: DefaultResolve
Instance Method Summary collapse
-
#call(type, field, obj, args, ctx) ⇒ Object
private
-
#coerce_input(type, value, ctx) ⇒ Object
private
-
#coerce_result(type, value, ctx) ⇒ Object
private
-
#initialize(user_resolve_hash) ⇒ ResolveMap
constructor
private
A new instance of ResolveMap.
Constructor Details
#initialize(user_resolve_hash) ⇒ ResolveMap
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Returns a new instance of ResolveMap
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/graphql/schema/build_from_definition/resolve_map.rb', line 17 def initialize(user_resolve_hash) @resolve_hash = Hash.new do |h, k| # For each type name, provide a new hash if one wasn't given: h[k] = Hash.new do |h2, k2| if k2 == "coerce_input" || k2 == "coerce_result" # This isn't an object field, it's a scalar coerce function. # Use a passthrough Builder::NullScalarCoerce else # For each field, provide a resolver that will # make runtime checks & replace itself h2[k2] = DefaultResolve.new(h2, k2) end end end @user_resolve_hash = user_resolve_hash # User-provided resolve functions take priority over the default: @user_resolve_hash.each do |type_name, fields| type_name_s = type_name.to_s case fields when Hash fields.each do |field_name, resolve_fn| @resolve_hash[type_name_s][field_name.to_s] = resolve_fn end when Proc # for example, __resolve_type @resolve_hash[type_name_s] = fields end end # Check the normalized hash, not the user input: if @resolve_hash.key?("resolve_type") define_singleton_method :resolve_type do |type, obj, ctx| @resolve_hash.fetch("resolve_type").call(type, obj, ctx) end end end |
Instance Method Details
#call(type, field, obj, args, ctx) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
55 56 57 58 |
# File 'lib/graphql/schema/build_from_definition/resolve_map.rb', line 55 def call(type, field, obj, args, ctx) resolver = @resolve_hash[type.name][field.name] resolver.call(obj, args, ctx) end |
#coerce_input(type, value, ctx) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
60 61 62 |
# File 'lib/graphql/schema/build_from_definition/resolve_map.rb', line 60 def coerce_input(type, value, ctx) @resolve_hash[type.name]["coerce_input"].call(value, ctx) end |
#coerce_result(type, value, ctx) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
64 65 66 |
# File 'lib/graphql/schema/build_from_definition/resolve_map.rb', line 64 def coerce_result(type, value, ctx) @resolve_hash[type.name]["coerce_result"].call(value, ctx) end |