class GraphQL::Relay::GlobalNodeIdentification


which delegate to the singleton instance.
GlobalIdField depends on that, since it calls class methods
It’s assumed you’ll only have 1!
This object provides helpers for working with global IDs.

def field

Returns a field for finding objects from a global ID, which Relay needs
def field
  ensure_defined
  ident = self
  GraphQL::Field.define do
    type(ident.interface)
    argument :id, !types.ID
    resolve -> (obj, args, ctx) {
      ctx.query.schema.node_identification.object_from_id(args[:id], ctx)
    }
    description ident.description
  end
end

def from_global_id(global_id)

(This reverts the opaque transform)
Get type-name & ID from global ID
def from_global_id(global_id)
  ensure_defined
  @from_global_id_proc.call(global_id)
end

def from_global_id=(proc)

def from_global_id=(proc)
  ensure_defined
  @from_global_id_proc = proc
end

def initialize

def initialize
  @to_global_id_proc = DEFAULT_TO_GLOBAL_ID
  @from_global_id_proc = DEFAULT_FROM_GLOBAL_ID
end

def interface

Returns `NodeInterface`, which all Relay types must implement
def interface
  @interface ||= begin
    ensure_defined
    ident = self
    if @type_from_object_proc
      # TODO: remove after Schema.resolve_type is required
      GraphQL::InterfaceType.define do
        name "Node"
        field :id, !types.ID
        resolve_type -> (obj, ctx) {
          ident.type_from_object(obj)
        }
      end
    else
      GraphQL::InterfaceType.define do
        name "Node"
        field :id, !types.ID
      end
    end
  end
end

def object_from_id(id, ctx)

get an object from a UUID
Use the provided config to
def object_from_id(id, ctx)
  ensure_defined
  @object_from_id_proc.call(id, ctx)
end

def object_from_id=(proc)

def object_from_id=(proc)
  ensure_defined
  @object_from_id_proc = proc
end

def to_global_id(type_name, id)

(This is an opaque transform)
Create a global ID for type-name & ID
def to_global_id(type_name, id)
  ensure_defined
  @to_global_id_proc.call(type_name, id)
end

def to_global_id=(proc)

def to_global_id=(proc)
  ensure_defined
  @to_global_id_proc = proc
end

def type_from_object(object)

TODO: remove after Schema.resolve_type is required
get a type for a given object
Use the provided config to
def type_from_object(object)
  ensure_defined
  warn("type_from_object(object) is deprecated; use Schema.resolve_type(object) instead")
  if @type_from_object_proc
    schema.resolve_type = @type_from_object_proc
    @type_from_object_proc = nil
  end
  schema.resolve_type(object)
end

def type_from_object=(new_type_from_object_proc)

def type_from_object=(new_type_from_object_proc)
  ensure_defined
  warn("type_from_object(object) is deprecated; use Schema.resolve_type(object) instead")
  @type_from_object_proc = new_type_from_object_proc
end