| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158 | 
							- // Generated by CoffeeScript 1.6.3
 
- var object, _common,
 
-   __hasProp = {}.hasOwnProperty;
 
- _common = require('./_common');
 
- module.exports = object = {
 
-   isBareObject: _common.isBareObject.bind(_common),
 
-   /*
 
-   	if object is an instance of a class
 
-   */
 
-   isInstance: function(what) {
 
-     return !this.isBareObject(what);
 
-   },
 
-   /*
 
-   	Alias to _common.typeOf
 
-   */
 
-   typeOf: _common.typeOf.bind(_common),
 
-   /*
 
-   	Alias to _common.clone
 
-   */
 
-   clone: _common.clone.bind(_common),
 
-   /*
 
-   	Empties an object of its properties.
 
-   */
 
-   empty: function(o) {
 
-     var prop;
 
-     for (prop in o) {
 
-       if (o.hasOwnProperty(prop)) {
 
-         delete o[prop];
 
-       }
 
-     }
 
-     return o;
 
-   },
 
-   /*
 
-   	Empties an object. Doesn't check for hasOwnProperty, so it's a tiny
 
-   	bit faster. Use it for plain objects.
 
-   */
 
-   fastEmpty: function(o) {
 
-     var property;
 
-     for (property in o) {
 
-       delete o[property];
 
-     }
 
-     return o;
 
-   },
 
-   /*
 
-   	Overrides values fomr `newValues` on `base`, as long as they
 
-   	already exist in base.
 
-   */
 
-   overrideOnto: function(base, newValues) {
 
-     var key, newVal, oldVal;
 
-     if (!this.isBareObject(newValues) || !this.isBareObject(base)) {
 
-       return base;
 
-     }
 
-     for (key in base) {
 
-       oldVal = base[key];
 
-       newVal = newValues[key];
 
-       if (newVal === void 0) {
 
-         continue;
 
-       }
 
-       if (typeof newVal !== 'object' || this.isInstance(newVal)) {
 
-         base[key] = this.clone(newVal);
 
-       } else {
 
-         if (typeof oldVal !== 'object' || this.isInstance(oldVal)) {
 
-           base[key] = this.clone(newVal);
 
-         } else {
 
-           this.overrideOnto(oldVal, newVal);
 
-         }
 
-       }
 
-     }
 
-     return base;
 
-   },
 
-   /*
 
-   	Takes a clone of 'base' and runs #overrideOnto on it
 
-   */
 
-   override: function(base, newValues) {
 
-     return this.overrideOnto(this.clone(base), newValues);
 
-   },
 
-   append: function(base, toAppend) {
 
-     return this.appendOnto(this.clone(base), toAppend);
 
-   },
 
-   appendOnto: function(base, toAppend) {
 
-     var key, newVal, oldVal;
 
-     if (!this.isBareObject(toAppend) || !this.isBareObject(base)) {
 
-       return base;
 
-     }
 
-     for (key in toAppend) {
 
-       if (!__hasProp.call(toAppend, key)) continue;
 
-       newVal = toAppend[key];
 
-       if (newVal === void 0) {
 
-         continue;
 
-       }
 
-       if (typeof newVal !== 'object' || this.isInstance(newVal)) {
 
-         base[key] = newVal;
 
-       } else {
 
-         oldVal = base[key];
 
-         if (typeof oldVal !== 'object' || this.isInstance(oldVal)) {
 
-           base[key] = this.clone(newVal);
 
-         } else {
 
-           this.appendOnto(oldVal, newVal);
 
-         }
 
-       }
 
-     }
 
-     return base;
 
-   },
 
-   groupProps: function(obj, groups) {
 
-     var def, defs, grouped, key, name, shouldAdd, val, _i, _len;
 
-     grouped = {};
 
-     for (name in groups) {
 
-       defs = groups[name];
 
-       grouped[name] = {};
 
-     }
 
-     grouped['rest'] = {};
 
-     top: //;
 
-     for (key in obj) {
 
-       val = obj[key];
 
-       shouldAdd = false;
 
-       for (name in groups) {
 
-         defs = groups[name];
 
-         if (!Array.isArray(defs)) {
 
-           defs = [defs];
 
-         }
 
-         for (_i = 0, _len = defs.length; _i < _len; _i++) {
 
-           def = defs[_i];
 
-           if (typeof def === 'string') {
 
-             if (key === def) {
 
-               shouldAdd = true;
 
-             }
 
-           } else if (def instanceof RegExp) {
 
-             if (def.test(key)) {
 
-               shouldAdd = true;
 
-             }
 
-           } else if (def instanceof Function) {
 
-             if (def(key)) {
 
-               shouldAdd = true;
 
-             }
 
-           } else {
 
-             throw Error('Group definitions must either\
 
- 						be strings, regexes, or functions.');
 
-           }
 
-           if (shouldAdd) {
 
-             grouped[name][key] = val;
 
-             continue top;
 
-           }
 
-         }
 
-       }
 
-       grouped['rest'][key] = val;
 
-     }
 
-     return grouped;
 
-   }
 
- };
 
 
  |