12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- var createHash = require('crypto').createHash,
- _ = require('lodash'),
- sha = function(str) {return createHash('sha1').update(str).digest('hex');};
- function keyval(cb) {
- return function(err, res) {
- var hash = {}, i, key, val;
- if (err) {
- cb(err);
- } else if (res.length % 2 !== 0) {
- cb('result length not even');
- } else {
- for (i = 0; i < res.length; i += 2) {
- key = res[i].toString();
- val = res[i + 1];
- hash[key] = val;
- }
- cb(null, hash);
- }
- };
- }
- exports.attachLua = function(redis) {
- /**
- * redis.lua( SCRIPTNAME , SCRIPT_PLAINTEXT, [keyed]);
- * @param {String} name Script name
- * @param {String} script Script string
- * @param {[type]} keyed [description]
- * @chainable
- * @return {Redis}
- */
- redis.lua = function(name, script, keyed) {
- var script_sha = null;
- redis.RedisClient.prototype[name] = function(){
- var cb = function(){}, self = this, params;
- params = [].slice.call(arguments);
- if (params.length > 0 && typeof params[params.length - 1] == 'function') {
- cb = params.pop();
- }
- if(!_.isArray(params)){
- params = [params];
- }
- params = _.flatten(params);
- params.unshift(script);
- if(keyed){
- cb = keyval(cb);
- }
- params.push(cb);
- // node_redis now support eval
- // https://github.com/mranney/node_redis/blob/master/index.js#L1067
- this.eval.apply(this, params);
- };
- return this;
- };
- return redis;
- };
|