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;
- }
- };
|