Skip to content

Instantly share code, notes, and snippets.

@kaiquewdev
Created December 1, 2012 05:17
Show Gist options
  • Select an option

  • Save kaiquewdev/4180637 to your computer and use it in GitHub Desktop.

Select an option

Save kaiquewdev/4180637 to your computer and use it in GitHub Desktop.
#!/usr/bin/env node
var Y = exports;
var createObject = Y.createObject = function (d) {
var s = this;
return function () {
var operations = 'keys,values,has,set,get,iter,next,reset';
var s = this, o = (function () { return (new function () {}); }).call(s),
S = ',', _ = operations.split(S),
c = 0;
// decorator
s.d = d;
// keys
o[_[0]] = function () {
var out = [];
for ( var k in o ) if ( !(_.indexOf(k) > -1) ) out.push(k);
return out;
};
// values
o[_[1]] = function () {
var out = o.keys().map(function (k) { return o[k]; });
return out;
};
// has
o[_[2]] = function (k,v) {
var out = false;
if ( k !== undefined ) {
out = ( o[k] !== undefined );
if (v !== undefined) { return out && o[k] === v; }
}
return out;
};
// set
o[_[3]] = function (k,v) {
var out = undefined;
if (!o.has(k) && v !== undefined) { o[k]=v; out = o[k]; }
return out;
};
// get
o[_[4]] = function (k,r) {
var out = r !== undefined && r || '';
if (o.has(k)) { out = o[k]; }
return out;
};
// iter
o[_[5]] = function ( fn ) {
var s = this, fn = fn || function () {},
keys = o.keys(), values = o.values(),
out = [], i = 0;
do {
var k = keys[i], v = values[i];
out.push( fn.call(s,k,v) );
i += 1;
} while ( i < keys.length );
return out;
};
// next
o[_[6]] = function ( fn ) {
var s = this, fn = fn || function () {},
keys = o.keys(), values = o.values();
var k = keys[c], v = values[c];
c++;
return fn.call(s,k,v);
};
// reset
o[_[7]] = function () { c=0; };
// apply decorator
(function (o) {
if ( s.d !== undefined ) for ( var k in s.d ) if (!o.has(k)) o[k] = s.d[k];
}).call(s,o);
return o;
}.call(s);
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment