Sha256: 6e626802e83e1eb4e99d7e7a47db3a7e1f37470bd1b2e06788cd119e617d10e2

Contents?: true

Size: 1.26 KB

Versions: 9

Compression:

Stored size: 1.26 KB

Contents

module GraphQL
  module Relay
    # Helpers for working with Relay-specific Node objects.
    module Node
      # @return [GraphQL::Field] a field for finding objects by their global ID.
      def self.field
        # We have to define it fresh each time because
        # its name will be modified and its description
        # _may_ be modified.
        node_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)
        end

        # This is used to identify generated fields in the schema
        node_field.metadata[:relay_node_field] = true

        node_field
      end

      # @return [GraphQL::InterfaceType] The interface which all Relay types must implement
      def self.interface
        @interface ||= GraphQL::InterfaceType.define do
          name "Node"
          description "An object with an ID."
          field :id, !types.ID, "ID of the object."
        end
      end

      # A field resolve for finding an object by ID
      module FindNode
        def self.call(obj, args, ctx)
          ctx.query.schema.object_from_id(args[:id], ctx )
        end
      end
    end
  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
graphql-1.2.4 lib/graphql/relay/node.rb
graphql-1.2.3 lib/graphql/relay/node.rb
graphql-1.2.2 lib/graphql/relay/node.rb
graphql-1.2.1 lib/graphql/relay/node.rb
graphql-1.2.0 lib/graphql/relay/node.rb
graphql-1.1.0 lib/graphql/relay/node.rb
graphql-1.0.0 lib/graphql/relay/node.rb
graphql-0.19.4 lib/graphql/relay/node.rb
graphql-0.19.3 lib/graphql/relay/node.rb