Class: Capsium::Reactor::GraphqlApi

Inherits:
Object
  • Object
show all
Includes:
Responses
Defined in:
lib/capsium/reactor/graphql_api.rb,
sig/capsium/reactor/graphql_api.rbs

Overview

GraphQL over a mount's datasets (POST and GET /graphql): executes the derived schema and maps typed overlay errors into the "errors" array.

Constant Summary collapse

PATH =

Returns:

  • (String)
"/graphql"

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Responses

#respond_error, #respond_forbidden, #respond_json, #respond_method_not_allowed, #respond_not_found, #respond_not_implemented, #respond_text

Constructor Details

#initialize(mount) ⇒ GraphqlApi

Returns a new instance of GraphqlApi.

Parameters:



23
24
25
26
# File 'lib/capsium/reactor/graphql_api.rb', line 23

def initialize(mount)
  @mount = mount
  @schema = GraphqlSchema.new(mount, self).build
end

Class Method Details

.path?(inner_path) ⇒ Boolean

Parameters:

  • inner_path (String)

Returns:

  • (Boolean)


19
20
21
# File 'lib/capsium/reactor/graphql_api.rb', line 19

def self.path?(inner_path)
  inner_path == PATH
end

Instance Method Details

#collection(dataset, id: nil) ⇒ Array[untyped]

Query/mutation resolvers called from the derived schema.

Parameters:

Returns:

  • (Array[untyped])


38
39
40
41
42
43
44
# File 'lib/capsium/reactor/graphql_api.rb', line 38

def collection(dataset, id: nil)
  return @mount.overlay.items(dataset) if id.nil?

  [@mount.overlay.item(dataset, id)]
rescue Overlay::Error => e
  raise execution_error(e)
end

#create_item(dataset, item:) ⇒ Object

Parameters:

Returns:

  • (Object)


46
47
48
49
50
51
52
# File 'lib/capsium/reactor/graphql_api.rb', line 46

def create_item(dataset, item:)
  ensure_writable!
  @mount.overlay.append_item(dataset, item)
  item
rescue Overlay::Error => e
  raise execution_error(e)
end

#handle(request, response) ⇒ Object

Parameters:

  • request (Object)
  • response (Object)

Returns:

  • (Object)


28
29
30
31
32
33
34
# File 'lib/capsium/reactor/graphql_api.rb', line 28

def handle(request, response)
  case request.request_method
  when "POST" then handle_post(request, response)
  when "GET" then handle_get(request, response)
  else respond_method_not_allowed(response)
  end
end

#remove_item(dataset, id:) ⇒ Boolean

Parameters:

Returns:

  • (Boolean)


62
63
64
65
66
67
68
# File 'lib/capsium/reactor/graphql_api.rb', line 62

def remove_item(dataset, id:)
  ensure_writable!
  @mount.overlay.delete_item(dataset, id)
  true
rescue Overlay::Error => e
  raise execution_error(e)
end

#update_item(dataset, id:, item:) ⇒ Object

Parameters:

Returns:

  • (Object)


54
55
56
57
58
59
60
# File 'lib/capsium/reactor/graphql_api.rb', line 54

def update_item(dataset, id:, item:)
  ensure_writable!
  @mount.overlay.replace_item(dataset, id, item)
  item
rescue Overlay::Error => e
  raise execution_error(e)
end