Module: GraphQL::Relay::Node

Defined in:
lib/graphql/relay/node.rb

Overview

Helpers for working with Relay-specific Node objects.

Defined Under Namespace

Modules: FindNode, FindNodes

Class Method Summary collapse

Class Method Details

.field(**kwargs, &block) ⇒ GraphQL::Field

Returns a field for finding objects by their global ID.

Returns:

  • (GraphQL::Field)

    a field for finding objects by their global ID.


7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# File 'lib/graphql/relay/node.rb', line 7

def self.field(**kwargs, &block)
  # We have to define it fresh each time because
  # its name will be modified and its description
  # _may_ be modified.
  field = GraphQL::Field.define do
    type(GraphQL::Relay::Node.interface)
    description("Fetches an object given its ID.")
    argument(:id, !types.ID, "ID of the object.")
    resolve(GraphQL::Relay::Node::FindNode)
    relay_node_field(true)
  end

  if kwargs.any? || block
    field = field.redefine(kwargs, &block)
  end

  field
end

.interfaceGraphQL::InterfaceType

Returns The interface which all Relay types must implement

Returns:


43
44
45
46
47
48
49
50
# File 'lib/graphql/relay/node.rb', line 43

def self.interface
  @interface ||= GraphQL::InterfaceType.define do
    name("Node")
    description("An object with an ID.")
    field(:id, !types.ID, "ID of the object.")
    default_relay(true)
  end
end

.plural_field(**kwargs, &block) ⇒ Object


26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/graphql/relay/node.rb', line 26

def self.plural_field(**kwargs, &block)
  field = GraphQL::Field.define do
    type(!types[GraphQL::Relay::Node.interface])
    description("Fetches a list of objects given a list of IDs.")
    argument(:ids, !types[!types.ID], "IDs of the objects.")
    resolve(GraphQL::Relay::Node::FindNodes)
    relay_nodes_field(true)
  end

  if kwargs.any? || block
    field = field.redefine(kwargs, &block)
  end

  field
end