rootslab/syllabus

View on GitHub
lib/commands/scripting.js

Summary

Maintainability
B
6 hrs
Test Coverage
/*
 * SCRIPTING mix-ins.
 */

exports.commands = function ( encode, error ) {
    var Abaco = require( 'abaco' )
        , Bolgia = require( 'bolgia' )
        , parseIntArray = Abaco.parseIntArray
        , doString = Bolgia.doString
        , ooo = Bolgia.circles
        , oarr = ooo.arr
        , ostr = ooo.str
        ;

    return {

        eval : function ( script, keys, args, cback ) {
            var s = doString( script ) === ostr
                , k = doString( keys ) === oarr
                , a = doString( args ) === oarr
                , list = null
                ;
            if ( s && k && a ) {
                list = [ keys.length ].concat( keys ).concat( args );
                return encode( 'EVAL', script, list, null, cback );
            }
            return error( 'EVAL', arguments );
        }

        , evalsha : function ( sha, keys, args, cback ) {
            var s = doString( sha ) === ostr
                , k = doString( keys ) === oarr
                , a = doString( args ) === oarr
                , list = null
                , result = null
                ;
            if ( s && k && a ) {
                list = [ keys.length ].concat( keys ).concat( args );
                result = encode( 'EVALSHA', sha, list, null, cback );
                result.isEvalSHA = 1;
                result.digest = sha;
                return result;
            }
            return error( 'EVALSHA', arguments );
        }

        , script : {

            exists : function ( scripts, cback ) {
                if ( scripts === undefined ) return error( 'SCRIPT EXISTS', arguments );
                return encode( 'SCRIPT','EXISTS', scripts, parseIntArray, cback );
            }

            , flush : function ( cback ) {
                return encode( 'SCRIPT','FLUSH', null, cback );
            }

            , kill : function ( cback ) {
                return encode( 'SCRIPT', 'KILL', null, cback );
            }

            , load : function ( script, cback ) {
                if ( script === undefined ) return error( 'SCRIPT LOAD', arguments );
                return encode( 'SCRIPT', 'LOAD', script, null, cback );
            }

            , debug : function ( sw, cback ) {
                if ( sw === undefined ) return error( 'SCRIPT DEBUG', arguments );
                return encode( 'SCRIPT','DEBUG', sw, null, cback );
            }

        }

    };

};