made with requirebin
Last active
August 29, 2015 14:06
-
-
Save agonbina/caa5f6aa77269e5bd191 to your computer and use it in GitHub Desktop.
requirebin sketch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var Model = require('store-model'); | |
var Store = require('datastore'); | |
var Enumerable = require('enumerable-component'); | |
var User = Model({ | |
properties: [{ | |
username: { type: 'string' } | |
}] | |
}); | |
function collection(store) { | |
Enumerable(store); | |
store.length = function() { | |
return store.data.length; | |
}; | |
store.__iterate__ = function() { | |
return { | |
length: function() { return store.length() }, | |
get: function(i) { return store.get(i) } | |
}; | |
} | |
} | |
var agon = User.create({ username: 'agonbina', age: 23 }); | |
var stoko = User.create({ username: 'stokodinjo' }); | |
var users = (new Store([agon, User.create({ username: 'agonbina', age: 23 }), User.create({ username: 'agonbina' }),stoko])).use(collection); | |
//console.log(users.__proto__); | |
users.select(function(user) { return user.get('username') === 'agonbina' && user.get('age') === 23; }).each(function(user) { console.log(user); }); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require=function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s}({1:[function(require,module,exports){var Emitter=require("component-emitter");var clone=require("bredele-clone");var each=require("looping");var many=require("many");module.exports=Store;function Store(data){if(data instanceof Store)return data;this.data=data||{};this.formatters={}}Emitter(Store.prototype);Store.prototype.set=many(function(name,value,strict){var prev=this.data[name];if(prev!==value){this.data[name]=value;if(!strict)this.emit("updated",name,value);this.emit("change",name,value,prev);this.emit("change "+name,value,prev)}});Store.prototype.get=function(name){var formatter=this.formatters[name];var value=this.data[name];if(formatter){value=formatter[0].call(formatter[1],value)}return value};Store.prototype.has=function(name){return this.data.hasOwnProperty(name)};Store.prototype.del=function(name,strict){if(this.has(name)){if(this.data instanceof Array){this.data.splice(name,1)}else{delete this.data[name]}if(!strict)this.emit("updated",name);this.emit("deleted",name,name);this.emit("deleted "+name,name)}return this};Store.prototype.format=function(name,callback,scope){this.formatters[name]=[callback,scope];return this};Store.prototype.compute=function(name,callback){var str=callback.toString();var attrs=str.match(/this.[a-zA-Z0-9]*/g);this.set(name,callback.call(this.data));for(var l=attrs.length;l--;){this.on("change "+attrs[l].slice(5),function(){this.set(name,callback.call(this.data))})}return this};Store.prototype.reset=function(data,strict){var copy=clone(this.data);var length=data.length;this.data=data;each(copy,function(key,val){if(typeof data[key]==="undefined"){if(!strict)this.emit("updated",key);this.emit("deleted",key,length);this.emit("deleted "+key,length)}},this);each(data,function(key,val){var prev=copy[key];if(prev!==val){if(!strict)this.emit("updated",key,val);this.emit("change",key,val,prev);this.emit("change "+key,val,prev)}},this);return this};Store.prototype.loop=function(cb,scope){each(this.data,cb,scope||this);return this};Store.prototype.pipe=function(store){store.set(this.data);this.on("updated",function(name,val){if(val)return store.set(name,val);store.del(name)});return this};Store.prototype.use=function(fn){var args=[].slice.call(arguments,1);fn.apply(this,[this].concat(args));return this};Store.prototype.toJSON=function(replacer,space){return JSON.stringify(this.data,replacer,space)}},{"bredele-clone":2,"component-emitter":3,looping:4,many:5}],2:[function(require,module,exports){module.exports=function(obj){var cp=null;if(obj instanceof Array){cp=obj.slice(0)}else{cp=clone(obj)}return cp};function clone(obj){if(typeof obj==="object"){var copy={};for(var key in obj){if(obj.hasOwnProperty(key)){copy[key]=clone(obj[key])}}return copy}return obj}},{}],3:[function(require,module,exports){module.exports=Emitter;function Emitter(obj){if(obj)return mixin(obj)}function mixin(obj){for(var key in Emitter.prototype){obj[key]=Emitter.prototype[key]}return obj}Emitter.prototype.on=Emitter.prototype.addEventListener=function(event,fn){this._callbacks=this._callbacks||{};(this._callbacks[event]=this._callbacks[event]||[]).push(fn);return this};Emitter.prototype.once=function(event,fn){var self=this;this._callbacks=this._callbacks||{};function on(){self.off(event,on);fn.apply(this,arguments)}on.fn=fn;this.on(event,on);return this};Emitter.prototype.off=Emitter.prototype.removeListener=Emitter.prototype.removeAllListeners=Emitter.prototype.removeEventListener=function(event,fn){this._callbacks=this._callbacks||{};if(0==arguments.length){this._callbacks={};return this}var callbacks=this._callbacks[event];if(!callbacks)return this;if(1==arguments.length){delete this._callbacks[event];return this}var cb;for(var i=0;i<callbacks.length;i++){cb=callbacks[i];if(cb===fn||cb.fn===fn){callbacks.splice(i,1);break}}return this};Emitter.prototype.emit=function(event){this._callbacks=this._callbacks||{};var args=[].slice.call(arguments,1),callbacks=this._callbacks[event];if(callbacks){callbacks=callbacks.slice(0);for(var i=0,len=callbacks.length;i<len;++i){callbacks[i].apply(this,args)}}return this};Emitter.prototype.listeners=function(event){this._callbacks=this._callbacks||{};return this._callbacks[event]||[]};Emitter.prototype.hasListeners=function(event){return!!this.listeners(event).length}},{}],4:[function(require,module,exports){module.exports=function(obj,fn,scope){scope=scope||this;if(obj instanceof Array){array(obj,fn,scope)}else if(typeof obj==="object"){object(obj,fn,scope)}};function object(obj,fn,scope){for(var i in obj){if(obj.hasOwnProperty(i)){fn.call(scope,i,obj[i])}}}function array(obj,fn,scope){for(var i=0,l=obj.length;i<l;i++){fn.call(scope,i,obj[i])}}},{}],5:[function(require,module,exports){var loop=require("looping");module.exports=function(fn){var many=function(str){if(typeof str==="object")loop(str,many,this);else fn.apply(this,arguments);return this};return many}},{looping:4}],6:[function(require,module,exports){module.exports=function(store){store.model=function(){return store.data}}},{}],"store-model":[function(require,module,exports){var Store=require("datastore");var storeModel=require("./src/store-model");module.exports=function(schema,options){if(!schema)throw new Error("You must specify a schema.");options=new Store(options||{});return{schema:schema,options:options,create:function(data){var model=new Store(data||{});model.use(storeModel);if(options.has("url")){model.compute("href",function(){return options.get("url")+this.id})}return model}}}},{"./src/store-model":6,datastore:1}]},{},[]);require=function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s}({1:[function(require,module,exports){module.exports=function(obj){var cp=null;if(obj instanceof Array){cp=obj.slice(0)}else{cp=clone(obj)}return cp};function clone(obj){if(typeof obj==="object"){var copy={};for(var key in obj){if(obj.hasOwnProperty(key)){copy[key]=clone(obj[key])}}return copy}return obj}},{}],2:[function(require,module,exports){module.exports=Emitter;function Emitter(obj){if(obj)return mixin(obj)}function mixin(obj){for(var key in Emitter.prototype){obj[key]=Emitter.prototype[key]}return obj}Emitter.prototype.on=Emitter.prototype.addEventListener=function(event,fn){this._callbacks=this._callbacks||{};(this._callbacks[event]=this._callbacks[event]||[]).push(fn);return this};Emitter.prototype.once=function(event,fn){var self=this;this._callbacks=this._callbacks||{};function on(){self.off(event,on);fn.apply(this,arguments)}on.fn=fn;this.on(event,on);return this};Emitter.prototype.off=Emitter.prototype.removeListener=Emitter.prototype.removeAllListeners=Emitter.prototype.removeEventListener=function(event,fn){this._callbacks=this._callbacks||{};if(0==arguments.length){this._callbacks={};return this}var callbacks=this._callbacks[event];if(!callbacks)return this;if(1==arguments.length){delete this._callbacks[event];return this}var cb;for(var i=0;i<callbacks.length;i++){cb=callbacks[i];if(cb===fn||cb.fn===fn){callbacks.splice(i,1);break}}return this};Emitter.prototype.emit=function(event){this._callbacks=this._callbacks||{};var args=[].slice.call(arguments,1),callbacks=this._callbacks[event];if(callbacks){callbacks=callbacks.slice(0);for(var i=0,len=callbacks.length;i<len;++i){callbacks[i].apply(this,args)}}return this};Emitter.prototype.listeners=function(event){this._callbacks=this._callbacks||{};return this._callbacks[event]||[]};Emitter.prototype.hasListeners=function(event){return!!this.listeners(event).length}},{}],3:[function(require,module,exports){module.exports=function(obj,fn,scope){scope=scope||this;if(obj instanceof Array){array(obj,fn,scope)}else if(typeof obj==="object"){object(obj,fn,scope)}};function object(obj,fn,scope){for(var i in obj){if(obj.hasOwnProperty(i)){fn.call(scope,i,obj[i])}}}function array(obj,fn,scope){for(var i=0,l=obj.length;i<l;i++){fn.call(scope,i,obj[i])}}},{}],4:[function(require,module,exports){var loop=require("looping");module.exports=function(fn){var many=function(str){if(typeof str==="object")loop(str,many,this);else fn.apply(this,arguments);return this};return many}},{looping:3}],datastore:[function(require,module,exports){var Emitter=require("component-emitter");var clone=require("bredele-clone");var each=require("looping");var many=require("many");module.exports=Store;function Store(data){if(data instanceof Store)return data;this.data=data||{};this.formatters={}}Emitter(Store.prototype);Store.prototype.set=many(function(name,value,strict){var prev=this.data[name];if(prev!==value){this.data[name]=value;if(!strict)this.emit("updated",name,value);this.emit("change",name,value,prev);this.emit("change "+name,value,prev)}});Store.prototype.get=function(name){var formatter=this.formatters[name];var value=this.data[name];if(formatter){value=formatter[0].call(formatter[1],value)}return value};Store.prototype.has=function(name){return this.data.hasOwnProperty(name)};Store.prototype.del=function(name,strict){if(this.has(name)){if(this.data instanceof Array){this.data.splice(name,1)}else{delete this.data[name]}if(!strict)this.emit("updated",name);this.emit("deleted",name,name);this.emit("deleted "+name,name)}return this};Store.prototype.format=function(name,callback,scope){this.formatters[name]=[callback,scope];return this};Store.prototype.compute=function(name,callback){var str=callback.toString();var attrs=str.match(/this.[a-zA-Z0-9]*/g);this.set(name,callback.call(this.data));for(var l=attrs.length;l--;){this.on("change "+attrs[l].slice(5),function(){this.set(name,callback.call(this.data))})}return this};Store.prototype.reset=function(data,strict){var copy=clone(this.data);var length=data.length;this.data=data;each(copy,function(key,val){if(typeof data[key]==="undefined"){if(!strict)this.emit("updated",key);this.emit("deleted",key,length);this.emit("deleted "+key,length)}},this);each(data,function(key,val){var prev=copy[key];if(prev!==val){if(!strict)this.emit("updated",key,val);this.emit("change",key,val,prev);this.emit("change "+key,val,prev)}},this);return this};Store.prototype.loop=function(cb,scope){each(this.data,cb,scope||this);return this};Store.prototype.pipe=function(store){store.set(this.data);this.on("updated",function(name,val){if(val)return store.set(name,val);store.del(name)});return this};Store.prototype.use=function(fn){var args=[].slice.call(arguments,1);fn.apply(this,[this].concat(args));return this};Store.prototype.toJSON=function(replacer,space){return JSON.stringify(this.data,replacer,space)}},{"bredele-clone":1,"component-emitter":2,looping:3,many:4}]},{},[]);require=function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s}({1:[function(require,module,exports){module.exports=toFunction;function toFunction(obj){switch({}.toString.call(obj)){case"[object Function]":return obj;case"[object String]":return stringToFunction(obj);case"[object RegExp]":return regexpToFunction(obj);default:return defaultToFunction(obj)}}function defaultToFunction(val){return function(obj){return val===obj}}function regexpToFunction(re){return function(obj){return re.test(obj)}}function stringToFunction(str){if(/^ *\W+/.test(str))return new Function("_","return _ "+str);return new Function("_","return _."+str)}},{}],"enumerable-component":[function(require,module,exports){var toFunction=require("to-function"),proto={};module.exports=Enumerable;function mixin(obj){for(var key in proto)obj[key]=proto[key];obj.__iterate__=obj.__iterate__||defaultIterator;return obj}function Enumerable(obj){if(!(this instanceof Enumerable)){if(Array.isArray(obj))return new Enumerable(obj);return mixin(obj)}this.obj=obj}function defaultIterator(){var self=this;return{length:function(){return self.length},get:function(i){return self[i]}}}Enumerable.prototype.inspect=Enumerable.prototype.toString=function(){return"[Enumerable "+JSON.stringify(this.obj)+"]"};Enumerable.prototype.__iterate__=function(){var obj=this.obj;obj.__iterate__=obj.__iterate__||defaultIterator;return obj.__iterate__()};proto.each=function(fn){var vals=this.__iterate__();var len=vals.length();for(var i=0;i<len;++i){fn(vals.get(i),i)}return this};proto.map=function(fn){fn=toFunction(fn);var vals=this.__iterate__();var len=vals.length();var arr=[];for(var i=0;i<len;++i){arr.push(fn(vals.get(i),i))}return new Enumerable(arr)};proto.select=function(fn){fn=toFunction(fn);var val;var arr=[];var vals=this.__iterate__();var len=vals.length();for(var i=0;i<len;++i){val=vals.get(i);if(fn(val,i))arr.push(val)}return new Enumerable(arr)};proto.unique=function(){var val;var arr=[];var vals=this.__iterate__();var len=vals.length();for(var i=0;i<len;++i){val=vals.get(i);if(~arr.indexOf(val))continue;arr.push(val)}return new Enumerable(arr)};proto.reject=function(fn){var val;var arr=[];var vals=this.__iterate__();var len=vals.length();if("string"==typeof fn)fn=toFunction(fn);if(fn){for(var i=0;i<len;++i){val=vals.get(i);if(!fn(val,i))arr.push(val)}}else{for(var i=0;i<len;++i){val=vals.get(i);if(val!=fn)arr.push(val)}}return new Enumerable(arr)};proto.compact=function(){return this.reject(null)};proto.find=function(fn){fn=toFunction(fn);var val;var vals=this.__iterate__();var len=vals.length();for(var i=0;i<len;++i){val=vals.get(i);if(fn(val,i))return val}};proto.findLast=function(fn){fn=toFunction(fn);var ret;var val;var vals=this.__iterate__();var len=vals.length();for(var i=0;i<len;++i){val=vals.get(i);if(fn(val,i))ret=val}return ret};proto.all=proto.every=function(fn){fn=toFunction(fn);var val;var vals=this.__iterate__();var len=vals.length();for(var i=0;i<len;++i){val=vals.get(i);if(!fn(val,i))return false}return true};proto.none=function(fn){fn=toFunction(fn);var val;var vals=this.__iterate__();var len=vals.length();for(var i=0;i<len;++i){val=vals.get(i);if(fn(val,i))return false}return true};proto.any=function(fn){fn=toFunction(fn);var val;var vals=this.__iterate__();var len=vals.length();for(var i=0;i<len;++i){val=vals.get(i);if(fn(val,i))return true}return false};proto.count=function(fn){var val;var vals=this.__iterate__();var len=vals.length();var n=0;for(var i=0;i<len;++i){val=vals.get(i);if(fn(val,i))++n}return n};proto.indexOf=function(obj){var val;var vals=this.__iterate__();var len=vals.length();for(var i=0;i<len;++i){val=vals.get(i);if(val===obj)return i}return-1};proto.has=function(obj){return!!~this.indexOf(obj)};proto.grep=function(re){var val;var vals=this.__iterate__();var len=vals.length();var arr=[];for(var i=0;i<len;++i){val=vals.get(i);if(re.test(val))arr.push(val)}return new Enumerable(arr)};proto.reduce=function(fn,init){var val;var i=0;var vals=this.__iterate__();var len=vals.length();val=null==init?vals.get(i++):init;for(;i<len;++i){val=fn(val,vals.get(i),i)}return val};proto.max=function(fn){var val;var n=0;var max=0;var vals=this.__iterate__();var len=vals.length();if(fn){fn=toFunction(fn);for(var i=0;i<len;++i){n=fn(vals.get(i),i);max=n>max?n:max}}else{for(var i=0;i<len;++i){n=vals.get(i);max=n>max?n:max}}return max};proto.sum=function(fn){var ret;var n=0;var vals=this.__iterate__();var len=vals.length();if(fn){fn=toFunction(fn);for(var i=0;i<len;++i){n+=fn(vals.get(i),i)}}else{for(var i=0;i<len;++i){n+=vals.get(i)}}return n};proto.avg=proto.mean=function(fn){var ret;var n=0;var vals=this.__iterate__();var len=vals.length();if(fn){fn=toFunction(fn);for(var i=0;i<len;++i){n+=fn(vals.get(i),i)}}else{for(var i=0;i<len;++i){n+=vals.get(i)}}return n/len};proto.first=function(n){if("function"==typeof n)return this.find(n);var vals=this.__iterate__();if(n){var len=Math.min(n,vals.length());var arr=new Array(len);for(var i=0;i<len;++i){arr[i]=vals.get(i)}return arr}return vals.get(0)};proto.last=function(n){if("function"==typeof n)return this.findLast(n);var vals=this.__iterate__();var len=vals.length();if(n){var i=Math.max(0,len-n);var arr=[];for(;i<len;++i){arr.push(vals.get(i))}return arr}return vals.get(len-1)};proto.inGroupsOf=function(n){var arr=[];var group=[];var vals=this.__iterate__();var len=vals.length();for(var i=0;i<len;++i){group.push(vals.get(i));if((i+1)%n==0){arr.push(group);group=[]}}if(group.length)arr.push(group);return new Enumerable(arr)};proto.at=function(i){return this.__iterate__().get(i)};proto.toJSON=proto.array=function(){var arr=[];var vals=this.__iterate__();var len=vals.length();for(var i=0;i<len;++i){arr.push(vals.get(i))}return arr};proto.value=function(){return this.obj};mixin(Enumerable.prototype)},{"to-function":1}]},{},[]);var Model=require("store-model");var Store=require("datastore");var Enumerable=require("enumerable-component");var User=Model({properties:[{username:{type:"string"}}]});function collection(store){Enumerable(store);store.length=function(){return store.data.length};store.__iterate__=function(){return{length:function(){return store.length()},get:function(i){return store.get(i)}}}}var agon=User.create({username:"agonbina",age:23});var stoko=User.create({username:"stokodinjo"});var users=new Store([agon,User.create({username:"agonbina",age:23}),User.create({username:"agonbina"}),stoko]).use(collection);users.select(function(user){return user.get("username")==="agonbina"&&user.get("age")===23}).each(function(user){console.log(user)}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"name": "requirebin-sketch", | |
"version": "1.0.0", | |
"dependencies": { | |
"store-model": "1.0.0", | |
"datastore": "1.0.6", | |
"enumerable-component": "0.3.1" | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<style type='text/css'>html, body { margin: 0; padding: 0; border: 0; } | |
body, html { height: 100%; width: 100%; }</style> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment