GitHub - keithpitt/graphql-ruby: Ruby implementation of Facebook's GraphQL

Build Status Gem Version Code Climate Test Coverage built with love

Installation

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

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
    argument :id, !types.ID
    resolve -> (obj, args, ctx) { Post.find(args["id"]) }
  end
end

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

See also:

Execute queries

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

query = GraphQL::Query.new(Schema, query_string)
result_hash = query.result
# {
#   "data" => {
#     "post" => {
#        "id" => 1,
#        "title" => "GraphQL is nice"
#     }
#   }
# }

See also:

To Do

  • To match spec:
  • Field merging
  • Code clean-up
    • Unify unwrapping types (It's on TypeKind but it's still not right)
    • Accept native Ruby types in definitions, then convert them to GraphQL types
    • Make Schema validations run before TypeReducer
    • Remove deprecated params: keyword
  • Cook up some path other than "n+1s everywhere"

Goals

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

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.

Other Resources

P.S.

Thanks to @sgwilym for the great logo! Definition API heavily inspired by @seanchas's implementation of GraphQL