Github GraphQL API Library
Ruby Library for Making Queries to the Github GraphQL API
Installation
$ gem install github-graphql
Will fetch the json
gem as a runtime dependency.
Developers
First, fork this repo on github, then:
$ git clone https://github.com/#{user}/github-graphql
To fetch development dependencies:
$ bundle install
This will download rake
, bundler
, rubocop
, test-unit
, and github_changelog_generator
.
Usage
#!/usr/bin/env ruby
require "github/graphql"
# Github API Key
oauth_token = "ANLEOU1234LKFDS"
# GraphQL Query
query = 'query { user (login: "karagenit") { name } }'
Github.query(oauth_token, query_string)
#=> {"data"=>{"user"=>{"name"=>"Caleb Smith"}}}
Tip: For clarity, you can use Inline Literals for the query string:
query = %{
query {
user (login: "karagenit") {
name
}
}
}
GraphQL Variables
To pass variables to your query:
query = %{
query ($username:String!) {
user(login: $username) {
name
}
}
}
variables = { username: "karagenit" }
Github.query(oauth_token, query_string, variables_hash)
#=> {"data"=>{"user"=>{"name"=>"Caleb Smith"}}}
The Github::GraphQL Object
Alternatively, you can construct a GraphQL
object to make repeated queries:
#!/usr/bin/env ruby
require "github/graphql"
api = Github::GraphQL.new(oauth_token, query_string)
api = Github::GraphQL.new(oauth_token, query_string, variables_hash)
api.query
#=> {"data"=>{"user"=>{"name"=>"Caleb Smith"}}}
Optionally, you can re-set either the key or the query/variables later on:
api.token(token)
api.payload(query_string)
api.payload(query_string, variables_hash)
Using Basic Authentication
Sometimes you'll want to connect to the API via Basic Authentication (i.e. username & password) instead of with an OAuth token, however the Github GraphQL API doesn't currently support this. It's fairly simple to do using the octokit
gem:
#!/usr/bin/env ruby
require "octokit"
require "github/graphql"
octoclient = Octokit::Client.new(:login => username, :password => password)
auth = octoclient.create_authorization(:scopes => ["repo"], :note => "Test Script")
# Use this to connect to the GraphQL API
token = auth.attrs[:token]
# Don't forget to either store or delete the token, so your script can be run again!
IO.write('oauth.token', token)
octoclient.delete_authorization(auth.attrs[:id])