Source: lib/redis.js

'use strict';

const Bluebird = require('bluebird');
const RedisLib = Bluebird.promisifyAll(require('redis'));
const URL      = require('url');

/**
 * Makes requests to a Redis instance
 *
 * This module is itself a Redis client, with an added `createClient` method for
 * creating further Redis clients. The clients have been promisified, so to use
 * the promise version, append `Async` to method names.
 *
 *     Redis.getAsync('myKey').then(value => console.log(value));
 *
 * @module Redis
 */
module.exports = createClient();

/**
 * Create a Redis client.
 *
 * @static
 * @example <caption>Creating another Redis client</caption>
 * Redis.createClient().then(subscriber => subscriber.subscribeAsync('channel'));
 * @return {RedisLib.Client}
 */
function createClient() {
  const redisURLEnv = process.env.REDISCLOUD_URL || process.env.REDIS_URL;
  const redisURL    = URL.parse(redisURLEnv);
  const password    = redisURL.auth ? redisURL.auth.split(':')[1] : null;
  const client      = RedisLib.createClient(redisURL.port, redisURL.hostname,
    { auth_pass: password });

  client.createClient = createClient;
  return client;
}