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
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)
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
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)
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)
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)
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