class ActiveSupport::Cache::RedisCacheStore

def build_redis(redis: nil, url: nil, **redis_options) # :nodoc:

:nodoc:

:url Array -> Redis::Distributed.new([{ url: … }, { url: … }, …])
:url String -> Redis.new(url: …)
:redis Object -> options[:redis]
:redis Proc -> options[:redis].call
Option Class Result

string, and multiple :url strings.
Handles four options: :redis block, :redis instance, single :url

Factory method to create a new Redis instance.
def build_redis(redis: nil, url: nil, **redis_options) # :nodoc:
  urls = Array(url)
  if redis.is_a?(Proc)
    redis.call
  elsif redis
    redis
  elsif urls.size > 1
    build_redis_distributed_client(urls: urls, **redis_options)
  elsif urls.empty?
    build_redis_client(**redis_options)
  else
    build_redis_client(url: urls.first, **redis_options)
  end
end