Graphql-ruby objects: Difference between revisions

From wikinotes
Line 62: Line 62:
<syntaxhighlight lang="ruby">
<syntaxhighlight lang="ruby">
class QueryRoot < GraphQL::Schema::Object
class QueryRoot < GraphQL::Schema::Object
   field :name, String, null: false do |field|
   field :name, String, null: false
    field.argument(id: Integer, required: true)
  end


   def name(id:)  # <-- the resolver
   def name
     "Alex"
     "Alex"
   end
   end
Line 73: Line 71:


Object resolver
Object resolver
<syntaxhighlight lang="ruby">
class QueryRoot < GraphQL::Schema::Object
  field :name, resolver: Resolvers::Name
end
module Resolvers  # <-- the resolver
  class Name < GraphQL::Schema::Resolver
    type String, null: false
    def resolve
      "Alex"
    end
  end
end
</syntaxhighlight>
Object resolvers can also have arguments
<syntaxhighlight lang="ruby">
<syntaxhighlight lang="ruby">
class QueryRoot < GraphQL::Schema::Object
class QueryRoot < GraphQL::Schema::Object

Revision as of 18:42, 6 September 2021

Documentation

type docs https://graphql-ruby.org/guides#type-definitions-guides
field docs https://graphql-ruby.org/guides#fields-guides

Fields

All objects in graphql are exposed using fields.
Mutations are added as fields to the root Mutation object,
and Queries are added to the root Query object.

Fields

class User < GraphQL::Schema::Object
  field :id, Integer, null: false    # name, returntype, nilable?
  field :age, Integer, null: false   # name, returntype, nilable?

  def id
    return 100
  end

  def age
    return 30
  end
end

Parametrized Fields

USERS = [
  {id: 100, name: "vaderd"},
  {id: 101, name: "skywalkerl"},
]

class QueryRoot < GraphQL::Schema::Object
  field :user, User, null: false do |field|
    field.argument(:id, Integer, required: true)
  end

  def user(id:)
    USERS.find { |user| user[:id] == id }
  end
end

Resolvers

Field resolvers are used to return results for a query.
Resolvers can be expressed as objects, or as methods matching the name of the field.

Method resolver

class QueryRoot < GraphQL::Schema::Object
  field :name, String, null: false

  def name
    "Alex"
  end
end

Object resolver

class QueryRoot < GraphQL::Schema::Object
  field :name, resolver: Resolvers::Name
end

module Resolvers  # <-- the resolver
  class Name < GraphQL::Schema::Resolver
    type String, null: false

    def resolve
      "Alex"
    end
  end
end

Object resolvers can also have arguments

class QueryRoot < GraphQL::Schema::Object
  field :name, resolver: Resolvers::Name
end

module Resolvers  # <-- the resolver
  class Name < GraphQL::Schema::Resolver
    type String, null: false

    argument :id, Integer, required: true

    def resolve(id:)
      "Alex"
    end
  end
end