class GraphQL::ResultCache::Key

Public Class Methods

new(obj:, args:, ctx:, key: nil) click to toggle source
# File lib/graphql/result_cache/key.rb, line 4
def initialize obj:, args:, ctx:, key: nil
  @obj = obj
  @args = args
  @ctx = ctx
  @key = key
end

Public Instance Methods

to_s() click to toggle source
# File lib/graphql/result_cache/key.rb, line 11
def to_s
  @to_s ||= [
      ::GraphQL::ResultCache.namespace,
      path_clause,
      args_clause,
      object_clause,
      client_hash_clause
  ].flatten.compact.join(':')
end

Private Instance Methods

args_clause() click to toggle source
# File lib/graphql/result_cache/key.rb, line 27
def args_clause
  @args.to_h.to_a.flatten
end
client_hash_clause() click to toggle source
# File lib/graphql/result_cache/key.rb, line 44
def client_hash_clause
  clause = ::GraphQL::ResultCache.client_hash
  clause.is_a?(Proc) ? clause.call : clause
end
guess_id() click to toggle source
# File lib/graphql/result_cache/key.rb, line 49
def guess_id
  object = @obj.object
  return unless object
  return object.cache_key if object.respond_to?(:cache_key)
  return object.id if object.respond_to?(:id)
  object.object_id
end
object_clause() click to toggle source
# File lib/graphql/result_cache/key.rb, line 31
def object_clause
  case @key
    when Symbol
      @obj.public_send(@key)
    when Proc
      @key.call(@obj, @args, @ctx)
    when NilClass
      guess_id
    else
      @key
  end
end
path_clause() click to toggle source
# File lib/graphql/result_cache/key.rb, line 23
def path_clause
  @ctx.path.join('.')
end