Skip to content

Commit

Permalink
Add duplicate function to duplicate the current client instance
Browse files Browse the repository at this point in the history
Fixes redis#919
  • Loading branch information
Ruben Bridgewater committed Nov 23, 2015
1 parent ac9ff9a commit 6711c94
Show file tree
Hide file tree
Showing 3 changed files with 52 additions and 0 deletions.
4 changes: 4 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -572,6 +572,10 @@ the second word as first parameter:
client.multi().script('load', 'return 1').exec(...);
client.multi([['script', 'load', 'return 1']]).exec(...);

## client.duplicate([options])

Duplicate all current options and return a new redisClient instance. All options passed to the duplicate function are going to replace the original option.

## client.send_command(command_name[, [args][, callback]])

Used internally to send commands to Redis. Nearly all Redis commands have been added to the `client` object.
Expand Down
9 changes: 9 additions & 0 deletions index.js
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,15 @@ RedisClient.prototype.create_stream = function () {
RedisClient.prototype.cork = noop;
RedisClient.prototype.uncork = noop;

RedisClient.prototype.duplicate = function (options) {
var existing_options = clone(this.options);
options = clone(options);
for (var elem in options) { // jshint ignore: line
existing_options[elem] = options[elem];
}
return new RedisClient(existing_options);
};

RedisClient.prototype.initialize_retry_vars = function () {
this.retry_timer = null;
this.retry_totaltime = 0;
Expand Down
39 changes: 39 additions & 0 deletions test/node_redis.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,45 @@ describe("The node_redis client", function () {
});
});

describe('duplicate', function () {
it('check if all options got copied properly', function(done) {
var client2 = client.duplicate();
assert(client.connected);
assert(!client2.connected);
for (var elem in client.options) {
if (client.options.hasOwnProperty(elem)) {
assert.strictEqual(client2.options[elem], client.options[elem]);
}
}
client2.on('ready', function () {
client2.end(true);
done();
});
});

it('check if all new options replaced the old ones', function(done) {
var client2 = client.duplicate({
no_ready_check: true
});
assert(client.connected);
assert(!client2.connected);
assert.strictEqual(client.options.no_ready_check, undefined);
assert.strictEqual(client2.options.no_ready_check, true);
assert.notDeepEqual(client.options, client2.options);
for (var elem in client.options) {
if (client.options.hasOwnProperty(elem)) {
if (elem !== 'no_ready_check') {
assert.strictEqual(client2.options[elem], client.options[elem]);
}
}
}
client2.on('ready', function () {
client2.end(true);
done();
});
});
});

describe('big data', function () {

// Check if the fast mode for big strings is working correct
Expand Down

0 comments on commit 6711c94

Please sign in to comment.