Graphql-ruby objects: Difference between revisions
From wikinotes
(7 intermediate revisions by the same user not shown) | |||
Line 20: | Line 20: | ||
<syntaxhighlight lang="ruby"> | <syntaxhighlight lang="ruby"> | ||
class User < GraphQL::Schema::Object | class User < GraphQL::Schema::Object | ||
field :id, Integer # name, returntype | field :id, Integer, null: false # name, returntype, nilable? | ||
field :age, Integer # name, returntype | field :age, Integer, null: false # name, returntype, nilable? | ||
def id | def id | ||
Line 43: | Line 43: | ||
class QueryRoot < GraphQL::Schema::Object | class QueryRoot < GraphQL::Schema::Object | ||
field :user, User, do |field| | field :user, User, null: false do |field| | ||
field.argument(:id, Integer, required: true) | field.argument(:id, Integer, required: true) | ||
end | end | ||
Line 53: | Line 53: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
</blockquote><!-- Parametrized Fields --> | </blockquote><!-- Parametrized Fields --> | ||
= Resolvers = | |||
<blockquote> | |||
Field resolvers are used to return results for a query.<br> | |||
Resolvers can be expressed as objects, or as methods matching the name of the field. | |||
Method resolver | |||
<syntaxhighlight lang="ruby"> | |||
class QueryRoot < GraphQL::Schema::Object | |||
field :name, String, null: false | |||
def name | |||
"Alex" | |||
end | |||
end | |||
</syntaxhighlight> | |||
Object resolver | |||
<syntaxhighlight lang="ruby"> | |||
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 | |||
</syntaxhighlight> | |||
Object resolvers can have arguments, just like method resolvers | |||
<syntaxhighlight lang="ruby"> | |||
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 | |||
</syntaxhighlight> | |||
</blockquote><!-- Resolvers --> | |||
</blockquote><!-- Fields --> | </blockquote><!-- Fields --> |
Latest revision as of 18:45, 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 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