graphql_server 0.0.1 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +11 -17
  3. data/lib/graphql_server.rb +7 -12
  4. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ea7e41d5079cadfd0e82b88bc6b3fc3d4f9650e4e35d6791a974d4a74f98e856
4
- data.tar.gz: 0d7510f53f3c12e69edb84a2f7c3b7f030963d61a124abde624ff7afbd4c0305
3
+ metadata.gz: c127eea600c58ed637cc5b5a490f654bf25c52b4f8b25b30fc59bd83d48128c2
4
+ data.tar.gz: 35590cc4eba3d4c99e5ee11a8cd63317e896fd129bd9fc69030cd35704eefde9
5
5
  SHA512:
6
- metadata.gz: 6339904a26acca60b5e16fd6bff3b6da87cf61a12c224f00e9702e3b02a344183e9a6154e6fc6fbeb5b49162d06019480832b45db843221146e6fbe9b86361c6
7
- data.tar.gz: 873be8b072f5fd36174fcdbbf9fee36a51803bec80774bf811060bf70094e536469ed6a53f68ecefc4eac4927df6c157790dd402f38d1dfe9f45c0d603bdbfce
6
+ metadata.gz: c811324871ea85f0b0bd5c1099f130fdea05945cd4c878379856df8115e7529b6b1b439c2e42eba7cf560286fdbd14e6a2f8995ad3701478c8cd5ac44097e5d1
7
+ data.tar.gz: ab366054e9bf6fa338161b3bac062f349979551c47220a078393932491bfc112358cd0f70ee64a7103bc6eea5f52980f1cb3a7673e59b720af3e3d2f9da834a5
data/README.md CHANGED
@@ -3,7 +3,7 @@ This is a simple spec-compliant GraphQL rack application and middleware based on
3
3
  Install the gem:
4
4
 
5
5
  ```
6
- gem install graphql-server
6
+ gem install graphql_server
7
7
  ```
8
8
 
9
9
  # Using the server
@@ -26,7 +26,7 @@ resolver = {
26
26
  }
27
27
  }
28
28
 
29
- run GraphqlServer.new(type_def: type_def, resolver: resolver)
29
+ run GraphQLServer.new(type_def: type_def, resolver: resolver)
30
30
  ```
31
31
 
32
32
  Start using `rackup`
@@ -35,7 +35,7 @@ Start using `rackup`
35
35
  rackup app.ru
36
36
  ```
37
37
 
38
- ## As a middleware in your application
38
+ ## As a middleware in your existing application
39
39
 
40
40
  ```ruby
41
41
  # app.ru
@@ -44,13 +44,7 @@ require 'graphql_server'
44
44
  type_def = ...
45
45
  resolver = ...
46
46
 
47
- use GraphqlServer, type_def: type_def, resolver: resolver, path: '/graphql'
48
- ```
49
-
50
- Start using `rackup`
51
-
52
- ```
53
- rackup app.ru
47
+ use GraphQLServer, type_def: type_def, resolver: resolver
54
48
  ```
55
49
 
56
50
  # Options
@@ -60,21 +54,21 @@ rackup app.ru
60
54
  You can get started fast by writing a type defintions and a resolver hash
61
55
 
62
56
  ```ruby
63
- GraphqlServer.new(type_def: type_def, resolver: resolver)
57
+ GraphQLServer.new(type_def: type_def, resolver: resolver)
64
58
  ```
65
59
 
66
- You can also provide your own schema
60
+ You can also provide your own [schema](http://graphql-ruby.org/schema/definition.html)
67
61
 
68
62
  ```ruby
69
- GraphqlServer.new(schema: schema)
63
+ GraphQLServer.new(schema: schema)
70
64
  ```
71
65
 
72
66
  See the examples folder for more details
73
67
 
74
- ## Middleware
75
-
76
- When using as a middleware, you can specify the path to mount the graphql endpoint (defaults to `/`)
68
+ ## Rack app Middleware
77
69
 
78
70
  ```ruby
79
- use GraphqlServer, type_def: type_def, resolver: resolver, path: '/graphql'
71
+ map '/graphql'
72
+ use GraphQLServer, type_def: type_def, resolver: resolver
73
+ end
80
74
  ```
@@ -2,25 +2,23 @@ require 'graphql'
2
2
  require 'json'
3
3
  require 'rack'
4
4
 
5
- class GraphqlServer
6
- class InvalidRequestTypeError < Exception; end;
5
+ class GraphQLServer
6
+ class InvalidRequestType < Exception; end;
7
7
  class PostBodyMissing < Exception; end;
8
8
 
9
- # Initilizes GraphqlServer as a Rack app or middleware
9
+ # Initilizes GraphQLServer as a Rack app or middleware
10
10
  #
11
11
  # This Rack middleware (or app) implements a spec-compliant GraphQL server which can be queried from any GraphQL client.
12
12
  # It can be used with a provided GraphQL schema or can build one from a type definition and a resolver hash.
13
13
  #
14
14
  # @param [Array<Object>] *args The first argument should be `app` when used as a middleware
15
- # @param String path Also for middleware, we will use path to determine when to process GraphQL, defaults to '/'
16
15
  # @param String type_def A schema definition string, or a path to a file containing the definition
17
16
  # @param Hash resolver A hash with callables for handling field resolution
18
17
  # @param GraphQL::Schema schema Use this schema if `type_def` and `resolver` is nil
19
18
  # @param Hash context
20
- def initialize(*args , path: nil, type_def: nil, resolver: nil, schema: nil, context: nil)
19
+ def initialize(*args, type_def: nil, resolver: nil, schema: nil, context: nil)
21
20
  @app = args && args[0]
22
21
  @context = context
23
- @path = (@app && !path) ? '/' : path
24
22
  @schema = type_def && resolver ? GraphQL::Schema.from_definition(type_def, default_resolve: resolver) : schema
25
23
  end
26
24
 
@@ -30,19 +28,16 @@ class GraphqlServer
30
28
 
31
29
  def call(env)
32
30
  request = Rack::Request.new(env)
33
-
34
- # only resolve when url matches `path` if we're in a middleware
35
- return @app.call(env) if middleware? && @path != request.path_info
36
31
 
37
32
  # graphql accepts GET and POST requests
38
- raise InvalidRequestTypeError unless request.get? || request.post?
33
+ raise InvalidRequestType unless request.get? || request.post?
39
34
 
40
35
  payload = if request.get?
41
36
  request.params
42
37
  elsif request.post?
43
38
  body = request.body.read
44
39
  raise PostBodyMissing if body.empty?
45
- payload = JSON.parse(body)
40
+ JSON.parse(body)
46
41
  end
47
42
 
48
43
  response = @schema.execute(
@@ -53,7 +48,7 @@ class GraphqlServer
53
48
  ).to_json
54
49
 
55
50
  [200, {'Content-Type' => 'application/json', 'Content-Length' => response.bytesize.to_s}, [response]]
56
- rescue InvalidRequestTypeError
51
+ rescue InvalidRequestType
57
52
  # Method Not Allowed
58
53
  [405, {"Content-Type" => "text/html"}, ["GraphQL Server supports only GET/POST requests"]]
59
54
  rescue PostBodyMissing
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: graphql_server
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - betaflag
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-01-18 00:00:00.000000000 Z
11
+ date: 2019-01-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rack