Comparing version 0.0.7 to 0.1.0
@@ -1,2 +0,2 @@ | ||
var _ = require('underscore'); | ||
var _ = require('lodash'); | ||
@@ -3,0 +3,0 @@ var debug = require('./lib/debug'); |
@@ -1,4 +0,1 @@ | ||
var Promise = require('es6-promise').Promise; | ||
var _ = require('underscore'); | ||
var logger = require('./logger'); | ||
@@ -5,0 +2,0 @@ |
@@ -0,22 +1,49 @@ | ||
var _ = require('lodash'); | ||
var Promise = require('es6-promise').Promise; | ||
var Bacon = require('baconjs'); | ||
var logger = require('./logger'); | ||
var bus = new Bacon.Bus(); | ||
var dirtyStores = []; | ||
var dispatch = function (type, payload) { | ||
logger.logMessage(type, payload); | ||
bus.push({ | ||
type: type, | ||
payload: payload | ||
}); | ||
function dispatch(type, payload) { | ||
return new Promise(function (resolve, reject) { | ||
logger.logMessage(type, payload); | ||
bus.push({type: type, payload: payload}); | ||
logger.logDirtyStores(dirtyStores); | ||
pushChanges(dirtyStores); | ||
clearDirtyMarks(); | ||
resolve(); | ||
}); | ||
} | ||
var getFeed = function (type) { | ||
return bus.filter(function (x) { | ||
return x.type === type; | ||
function input(type) { | ||
var payloads = bus.filter(function (msg) { | ||
return msg.type === type; | ||
}).map('.payload'); | ||
}; | ||
return payloads; | ||
} | ||
function markStoreAsDirty(store) { | ||
if (!_.contains(dirtyStores, store)) { | ||
dirtyStores.push(store); | ||
} | ||
} | ||
function pushChanges(dirtyStores) { | ||
setTimeout(function () { | ||
_.each(dirtyStores, function (store) { | ||
store.changes.push(store.output); | ||
}); | ||
}, 0); | ||
} | ||
function clearDirtyMarks() { | ||
dirtyStores = []; | ||
} | ||
module.exports = { | ||
dispatch: dispatch, | ||
getFeed: getFeed | ||
input: input, | ||
markStoreAsDirty: markStoreAsDirty | ||
}; |
@@ -0,1 +1,2 @@ | ||
var _ = require('lodash'); | ||
var debug = require('./debug').debug; | ||
@@ -32,7 +33,17 @@ | ||
if (payload) { | ||
console.log('MESSAGE %s: %o', name, payload); | ||
console.group('MESSAGE %s: %o', name, payload); | ||
} else { | ||
console.log('MESSAGE %s', name); | ||
console.group('MESSAGE %s', name); | ||
} | ||
}, | ||
logDirtyStores: function (dirtyStores) { | ||
if (!debug.enabled) { return; } | ||
if (dirtyStores.length) { | ||
console.log("CHANGED STORES: %s", _.pluck(dirtyStores, 'displayName').join(', ')); | ||
} else { | ||
console.log("NO STORES CHANGED."); | ||
} | ||
console.groupEnd(); | ||
} | ||
}; |
@@ -1,14 +0,5 @@ | ||
var Promise = require('es6-promise').Promise; | ||
var dispatcher = require('./dispatcher'); | ||
function message(type) { | ||
function push(payload) { | ||
return new Promise(function (resolve, reject) { | ||
dispatcher.dispatch(type, payload); | ||
resolve(); | ||
}); | ||
} | ||
push.feed = dispatcher.getFeed(type); | ||
return push; | ||
return dispatcher.dispatch.bind(dispatcher, type); | ||
} | ||
@@ -15,0 +6,0 @@ |
@@ -1,11 +0,45 @@ | ||
var _ = require('underscore'); | ||
var _ = require('lodash'); | ||
var dispatcher = require('./dispatcher'); | ||
var Bacon = require('baconjs'); | ||
function store(displayName, spec) { | ||
var changes = new Bacon.Bus(); | ||
var obj = { | ||
displayName: displayName, | ||
output: _.extend({}, spec.output), | ||
changes: changes | ||
}; | ||
var methods = gatherStoreMethods(spec); | ||
bindStoreMethods(spec, obj, methods); | ||
wireStore(spec, obj, dispatcher.input); | ||
return obj; | ||
} | ||
function gatherStoreMethods(spec) { | ||
return _.reject(_.keys(spec), function (key) { | ||
return _.contains(['output'], key); | ||
}); | ||
} | ||
function bindStoreMethods(spec, store, methods) { | ||
_.each(methods, function(key) { | ||
store[key] = _.bind(spec[key], store); | ||
}); | ||
} | ||
function wireStore(spec, store, input) { | ||
function output(stream, property) { | ||
stream.onValue(function (value) { | ||
if (store.output[property] != value) { | ||
store.output[property] = value; | ||
dispatcher.markStoreAsDirty(store); | ||
} | ||
}); | ||
} | ||
store.wire(input, output); | ||
} | ||
module.exports = { | ||
store: function (spec) { | ||
var obj = _.extend({}, spec); | ||
_.each(_.keys(obj), function(key) { | ||
obj[key] = _.bind(obj[key], obj); | ||
}); | ||
return obj; | ||
} | ||
store: store | ||
}; |
{ | ||
"name": "harukaze", | ||
"version": "0.0.7", | ||
"version": "0.1.0", | ||
"description": "A reactive flux architecture implementation", | ||
@@ -33,4 +33,4 @@ "main": "index.js", | ||
"es6-promise": "^2.0.0", | ||
"underscore": "^1.7.0" | ||
"lodash": "^2.4.1" | ||
} | ||
} |
5984
156
+ Addedlodash@^2.4.1
+ Addedlodash@2.4.2(transitive)
- Removedunderscore@^1.7.0
- Removedunderscore@1.13.7(transitive)