var underscore = require('./underscore.js');

var each = require('./each.js');

var functions = require('./functions.js');

var _setup = require('./_setup.js');

var _chainResult = require('./_chainResult.js'); // Add your own custom functions to the Underscore object.


function mixin(obj) {
  each(functions(obj), function (name) {
    var func = underscore[name] = obj[name];

    underscore.prototype[name] = function () {
      var args = [this._wrapped];

      _setup.push.apply(args, arguments);

      return _chainResult(this, func.apply(underscore, args));
    };
  });
  return underscore;
}

module.exports = mixin;