Sha256: 37dd5d31aac21e6df05039be9a2a5d8cf3be756cdf96b6046522d8d7f1cae892

Contents?: true

Size: 1.86 KB

Versions: 21

Compression:

Stored size: 1.86 KB

Contents

# frozen_string_literal: true
module GraphQL
  module Types
    module Relay
      # A class-based definition for Relay edges.
      #
      # Use this as a parent class in your app, or use it as inspiration for your
      # own base `Edge` class.
      #
      # For example, you may want to extend your own `BaseObject` instead of the
      # built-in `GraphQL::Schema::Object`.
      #
      # @example Making a UserEdge type
      #   # Make a base class for your app
      #   class Types::BaseEdge < GraphQL::Types::Relay::BaseEdge
      #   end
      #
      #   # Then extend your own base class
      #   class Types::UserEdge < Types::BaseEdge
      #     node_type(Types::User)
      #   end
      #
      # @see {Relay::BaseConnection} for connection types
      class BaseEdge < Types::Relay::BaseObject
        description "An edge in a connection."

        class << self
          # Get or set the Object type that this edge wraps.
          #
          # @param node_type [Class] A `Schema::Object` subclass
          def node_type(node_type = nil)
            if node_type
              @node_type = node_type
              wrapped_type_name = node_type.graphql_name
              # Set this to be named like the node type, but suffixed with `Edge`
              graphql_name("#{wrapped_type_name}Edge")
              # Add a default `node` field
              field :node, node_type, null: true, description: "The item at the end of the edge."
            end
            @node_type
          end

          def authorized?(obj, ctx)
            true
          end

          def accessible?(ctx)
            node_type.accessible?(ctx)
          end

          def visible?(ctx)
            node_type.visible?(ctx)
          end
        end


        field :cursor, String,
          null: false,
          description: "A cursor for use in pagination."
      end
    end
  end
end

Version data entries

21 entries across 21 versions & 1 rubygems

Version Path
graphql-1.8.18 lib/graphql/types/relay/base_edge.rb
graphql-1.9.4 lib/graphql/types/relay/base_edge.rb
graphql-1.9.3 lib/graphql/types/relay/base_edge.rb
graphql-1.9.2 lib/graphql/types/relay/base_edge.rb
graphql-1.8.17 lib/graphql/types/relay/base_edge.rb
graphql-1.8.16 lib/graphql/types/relay/base_edge.rb
graphql-1.9.1 lib/graphql/types/relay/base_edge.rb
graphql-1.9.0 lib/graphql/types/relay/base_edge.rb
graphql-1.8.15 lib/graphql/types/relay/base_edge.rb
graphql-1.9.0.pre4 lib/graphql/types/relay/base_edge.rb
graphql-1.8.14 lib/graphql/types/relay/base_edge.rb
graphql-1.9.0.pre3 lib/graphql/types/relay/base_edge.rb
graphql-1.9.0.pre2 lib/graphql/types/relay/base_edge.rb
graphql-1.8.13 lib/graphql/types/relay/base_edge.rb
graphql-1.8.12 lib/graphql/types/relay/base_edge.rb
graphql-1.9.0.pre1 lib/graphql/types/relay/base_edge.rb
graphql-1.8.11 lib/graphql/types/relay/base_edge.rb
graphql-1.8.10 lib/graphql/types/relay/base_edge.rb
graphql-1.8.9 lib/graphql/types/relay/base_edge.rb
graphql-1.8.8 lib/graphql/types/relay/base_edge.rb