amcgee/remjs

View on GitHub
lib/modifiers.js

Summary

Maintainability
A
0 mins
Test Coverage
var _ = require('lodash');

var modifiers = [
    require( './modifiers/fields' ),
    require( './modifiers/sort' ),
    require( './modifiers/limit' ),
    require( './modifiers/skip' )
];

var beforeIdentity = function( cursor ) {
    return cursor;
};
var afterIdentity = function( result ) {
    return result;
};
module.exports = function(options, req) {
    options = _.extend( {
        before: beforeIdentity,
        query: {},
        projection: {},
        after: afterIdentity
    }, options);

    _.forEach( modifiers, function( mod ) {
        var modOpts = mod( req );
        if ( !modOpts ) {
            return;
        }
        if ( modOpts.before ) {
            options.before = _.compose( options.before, modOpts.before );
        }
        if ( modOpts.query ) {
            options.query = _.extend( options.query, modOpts.query );
        }
        if ( modOpts.projection ) {
            options.projection = _.extend( options.projection, modOpts.projection );
        }
        if ( modOpts.after ) {
            options.after = _.compose( options.after, modOpts.after );
        }
    });

    return options;
};