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 rootMutation
object,
and Queries are added to the rootQuery
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 endParametrized 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 endResolvers
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 endObject 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 endObject 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