class GraphQL::Rails::Operations::QueryDefinition
DSL
for query definition. TODO: Support resolve-only blocks.
Attributes
field[R]
Public Class Methods
new(klass)
click to toggle source
# File lib/graphql/rails/operations.rb, line 88 def initialize(klass) @klass = klass @field = ::GraphQL::Field.new end
Public Instance Methods
argument(name, type, required = false)
click to toggle source
# File lib/graphql/rails/operations.rb, line 111 def argument(name, type, required = false) argument = ::GraphQL::Argument.define do name Types.to_field_name(name) type Types.resolve(type, required == :required) end @field.arguments[argument.name] = argument end
description(description)
click to toggle source
# File lib/graphql/rails/operations.rb, line 107 def description(description) @field.description = description end
name(name)
click to toggle source
# File lib/graphql/rails/operations.rb, line 93 def name(name) @name = name @field.name = Types.to_field_name(name) end
resolve(&block)
click to toggle source
# File lib/graphql/rails/operations.rb, line 119 def resolve(&block) @field.resolve = -> (obj, args, ctx) do # Instantiate the Operations class with state on this query. instance = @klass.new({ op: :query, name: @name, type: @type, obj: obj, args: Fields.new(args), ctx: ctx, context: ctx }) begin # Run callbacks for this Operations class. instance.run_callbacks(:perform_operation) do # Call out to the app-defined resolver. instance.instance_eval(&block) end rescue => e # Surface messages from standard errors in GraphQL response. ::GraphQL::ExecutionError.new(e.message) rescue ::Exception => e # Log and genericize other runtime errors. Rails.logger.error "Unexpected exception during query: #{@name}" Rails.logger.exception e ::GraphQL::ExecutionError.new('Internal error') end end end
type(type)
click to toggle source
# File lib/graphql/rails/operations.rb, line 102 def type(type) @type = type @field.type = Types.resolve(type) end
uses(type)
click to toggle source
# File lib/graphql/rails/operations.rb, line 98 def uses(type) Types.explicit.push Types.resolve(type) end