class GraphQL::PersistedQueries::StoreAdapters::RedisStoreAdapter

Redis adapter for storing persisted queries

Constants

DEFAULT_EXPIRATION
DEFAULT_NAMESPACE

Public Class Methods

new(redis_client: {}, expiration: nil, namespace: nil) click to toggle source
# File lib/graphql/persisted_queries/store_adapters/redis_store_adapter.rb, line 13
def initialize(redis_client: {}, expiration: nil, namespace: nil)
  @redis_proc = build_redis_proc(redis_client)
  @expiration = expiration || DEFAULT_EXPIRATION
  @namespace = namespace || DEFAULT_NAMESPACE
  @name = :redis
end

Protected Instance Methods

fetch(hash) click to toggle source
# File lib/graphql/persisted_queries/store_adapters/redis_store_adapter.rb, line 22
def fetch(hash)
  @redis_proc.call { |redis| redis.get(key_for(hash)) }
end
save(hash, query) click to toggle source
# File lib/graphql/persisted_queries/store_adapters/redis_store_adapter.rb, line 26
def save(hash, query)
  @redis_proc.call { |redis| redis.set(key_for(hash), query, ex: @expiration) }
end

Private Instance Methods

build_redis_proc(redis_client) click to toggle source

rubocop: disable Metrics/MethodLength rubocop: disable Metrics/CyclomaticComplexity rubocop: disable Metrics/PerceivedComplexity

# File lib/graphql/persisted_queries/store_adapters/redis_store_adapter.rb, line 39
def build_redis_proc(redis_client)
  if redis_client.is_a?(Hash)
    build_redis_proc(RedisClientBuilder.new(**redis_client).build)
  elsif redis_client.is_a?(Proc)
    redis_client
  elsif defined?(::Redis) && redis_client.is_a?(::Redis)
    proc { |&b| b.call(redis_client) }
  elsif defined?(ConnectionPool) && redis_client.is_a?(ConnectionPool)
    proc { |&b| redis_client.with { |r| b.call(r) } }
  else
    raise ArgumentError, ":redis_client accepts Redis, ConnectionPool, Hash or Proc only"
  end
end
key_for(hash) click to toggle source
# File lib/graphql/persisted_queries/store_adapters/redis_store_adapter.rb, line 32
def key_for(hash)
  "#{@namespace}:#{hash}"
end