summaryrefslogtreecommitdiff
path: root/lib/server.rb
blob: ad3580b4566f58e10bdb493847cfc5f58ab8a24d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
require 'rack'
require 'json'
require 'graphql'

module Types
  class Cake < GraphQL::Schema::Object
    field :name, String, null: false
  end

  class Query < GraphQL::Schema::Object
    field :me, String, null: false
    field :cakes, [Cake], null: false

    def me
      'mo'
    end
  end
end

class MySchema < GraphQL::Schema
  max_complexity 400
  query Types::Query
end

class Server
  def call(env)
    result = execute(query_for(Rack::Request.new(env)))
    [
      200,
      { 'Content-Type' => 'application/graphql' },
      [ result.to_json ]
    ]
  end

  private

  def execute(query)
    MySchema.execute(query)
  end

  def query_for(request)
    request.post? ? request.body.read : request.params['query']
  end
end