Skip to content

tribune/graphql-ruby

 
 

Repository files navigation

graphql graphql-ruby

Build Status Gem Version Code Climate Test Coverage built with love

A Ruby implementation of GraphQL.

Installation

Install from RubyGems by adding it to your Gemfile, then bundling.

# Gemfile
gem 'graphql'
$ bundle install

Overview

Declare types & build a schema

# Declare a type...
PostType = GraphQL::ObjectType.define do
  name "Post"
  description "A blog post"

  field :id, !types.ID
  field :title, !types.String
  field :body, !types.String
  field :comments, types[!CommentType]
end

# ...and a query root
QueryType = GraphQL::ObjectType.define do
  name "Query"
  description "The query root of this schema"

  field :post do
    type PostType
    argument :id, !types.ID
    resolve -> (obj, args, ctx) { Post.find(args["id"]) }
  end
end

# Then create your schema
Schema = GraphQL::Schema.new(
  query: QueryType,
  max_depth: 8,
)

Execute queries

Execute GraphQL queries on a given schema, from a query string.

result_hash = Schema.execute(query_string)
# {
#   "data" => {
#     "post" => {
#        "id" => 1,
#        "title" => "GraphQL is nice"
#     }
#   }
# }

Use with Relay

If you're building a backend for Relay, you'll need:

Goals

  • Implement the GraphQL spec & support a Relay front end
  • Provide idiomatic, plain-Ruby API with similarities to reference implementation where possible
  • Support Ruby on Rails and Relay

Getting Involved

  • Say hi & ask questions in the #ruby channel on Slack or on Twitter!
  • Report bugs by posting a description, full stack trace, and all relevant code in a GitHub issue.
  • Features & patches are welcome! Consider discussing it in an issue or in the #ruby channel on Slack to make sure we're on the same page.
  • Run the tests with rake test or start up guard with bundle exec guard.

Related Projects

Code

Blog Posts

To Do

  • Type lookup should be by type name (to support reloaded constants in Rails code)
  • Add a complexity validator (reject queries if they're too big)
  • Add docs for shared behaviors & DRY code
  • Revamp the fixture Schema to be more useful (better names, more extensible)
  • Fix when a field's type is left out field :name, "This is the name field"
  • Revisit error handling & debug: option
  • Subscriptions
    • This is a good chance to make an Operation abstraction of which query, mutation and subscription are members
    • For a subscription, graphql would send an outbound message to the system (allow the host application to manage its own subscriptions via Pusher, ActionCable, whatever)

About

Ruby implementation of Facebook's GraphQL

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Ruby 96.1%
  • Yacc 2.6%
  • Other 1.3%