class GraphQL::Schema::Directive::Transform
An example directive to show how you might interact with the runtime.
This directive takes the return value of the tagged part of the query, and if the named transform is whitelisted and applies to the return value, it’s applied by calling a method with that name.
@example Installing the directive
class MySchema < GraphQL::Schema directive(GraphQL::Schema::Directive::Transform) end
@example Transforming strings
viewer { username @transform(by: "upcase") }
Constants
- TRANSFORMS
Public Class Methods
resolve(object, arguments, context) { || ... }
click to toggle source
Implement the Directive
API
# File lib/graphql/schema/directive/transform.rb, line 36 def self.resolve(object, arguments, context) path = context.namespace(:interpreter)[:current_path] return_value = yield transform_name = arguments[:by] if TRANSFORMS.include?(transform_name) && return_value.respond_to?(transform_name) return_value = return_value.public_send(transform_name) response = context.namespace(:interpreter)[:runtime].final_result *keys, last = path keys.each do |key| if response && (response = response[key]) next else break end end if response response[last] = return_value end nil end end