summaryrefslogtreecommitdiff
path: root/lib/server.rb
blob: 30b645ac256499c6d41b76254901a0cb63b9e12d (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
require 'rack'
require 'json'
require 'graphql'

require 'types/cake'
require 'types/query'

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