Graphql-ruby objects

From wikinotes

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
  class Name < GraphQL::Schema::Resolver
    type String, null: false

    def resolve
      "Alex"
    end
  end
end

Object resolvers can have arguments, just like method resolvers

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

module Resolvers
  class Name < GraphQL::Schema::Resolver
    type String, null: false

    argument :id, Integer, required: true

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