Version 1
[yaffs-website] / node_modules / grunt-legacy-util / node_modules / lodash / mixin.js
diff --git a/node_modules/grunt-legacy-util/node_modules/lodash/mixin.js b/node_modules/grunt-legacy-util/node_modules/lodash/mixin.js
new file mode 100644 (file)
index 0000000..02e2b6c
--- /dev/null
@@ -0,0 +1,74 @@
+var arrayEach = require('./_arrayEach'),
+    arrayPush = require('./_arrayPush'),
+    baseFunctions = require('./_baseFunctions'),
+    copyArray = require('./_copyArray'),
+    isFunction = require('./isFunction'),
+    isObject = require('./isObject'),
+    keys = require('./keys');
+
+/**
+ * Adds all own enumerable function properties of a source object to the
+ * destination object. If `object` is a function then methods are added to
+ * its prototype as well.
+ *
+ * **Note:** Use `_.runInContext` to create a pristine `lodash` function to
+ * avoid conflicts caused by modifying the original.
+ *
+ * @static
+ * @memberOf _
+ * @category Util
+ * @param {Function|Object} [object=lodash] The destination object.
+ * @param {Object} source The object of functions to add.
+ * @param {Object} [options] The options object.
+ * @param {boolean} [options.chain=true] Specify whether the functions added
+ *  are chainable.
+ * @returns {Function|Object} Returns `object`.
+ * @example
+ *
+ * function vowels(string) {
+ *   return _.filter(string, function(v) {
+ *     return /[aeiou]/i.test(v);
+ *   });
+ * }
+ *
+ * _.mixin({ 'vowels': vowels });
+ * _.vowels('fred');
+ * // => ['e']
+ *
+ * _('fred').vowels().value();
+ * // => ['e']
+ *
+ * _.mixin({ 'vowels': vowels }, { 'chain': false });
+ * _('fred').vowels();
+ * // => ['e']
+ */
+function mixin(object, source, options) {
+  var props = keys(source),
+      methodNames = baseFunctions(source, props);
+
+  var chain = (isObject(options) && 'chain' in options) ? options.chain : true,
+      isFunc = isFunction(object);
+
+  arrayEach(methodNames, function(methodName) {
+    var func = source[methodName];
+    object[methodName] = func;
+    if (isFunc) {
+      object.prototype[methodName] = function() {
+        var chainAll = this.__chain__;
+        if (chain || chainAll) {
+          var result = object(this.__wrapped__),
+              actions = result.__actions__ = copyArray(this.__actions__);
+
+          actions.push({ 'func': func, 'args': arguments, 'thisArg': object });
+          result.__chain__ = chainAll;
+          return result;
+        }
+        return func.apply(object, arrayPush([this.value()], arguments));
+      };
+    }
+  });
+
+  return object;
+}
+
+module.exports = mixin;