Skip to content

Instantly share code, notes, and snippets.

@agonbina
Last active August 29, 2015 14:06
Show Gist options
  • Save agonbina/caa5f6aa77269e5bd191 to your computer and use it in GitHub Desktop.
Save agonbina/caa5f6aa77269e5bd191 to your computer and use it in GitHub Desktop.
requirebin sketch
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); });
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)});
{
"name": "requirebin-sketch",
"version": "1.0.0",
"dependencies": {
"store-model": "1.0.0",
"datastore": "1.0.6",
"enumerable-component": "0.3.1"
}
}
<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