Giter VIP home page Giter VIP logo

graphql-ruby's Introduction

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)

See also:

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"
#     }
#   }
# }

See also:

Use with Relay

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

To Do

  • Code clean-up
    • Raise if you try to configure an attribute which doesn't suit the type

      • ie, if you try to define resolve on an ObjectType, it should somehow raise
    • Clean up file structure in lib/query (don't need serial_execution namespace anymore)

    • Overriding ! on types breaks ActiveSupport .blank?

      my_type = GraphQL::ObjectType.define { name("MyType") }
      # => MyType
      my_type.present?
      # => MyType!!
      my_type.blank?
      # => MyType!
  • Statically validate type of variables (see early return in LiteralValidator)
  • Big ideas:
    • Use graphql-parser (Ruby bindings for libgraphqlparser) instead of Parslet
    • Revamp the fixture Schema to be more useful (better names, more extensible)
    • 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)
    • Pre-process query strings?
      • Remove @skip-ed things
      • Inline any fragments
      • Inline variables?

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

P.S.

graphql-ruby's People

Contributors

rmosolgo avatar dylanahsmith avatar charlieschwabacher avatar xuorig avatar pushrax avatar bkrausz avatar davidnorth avatar devknoll avatar jjbohn avatar dlackty avatar sgwilym avatar

Stargazers

Roman avatar

Watchers

James Cloos avatar Lithium avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.