lighter
Version:
A lightweight Node.js framework
59 lines (53 loc) • 1.3 kB
JavaScript
/**
* Flagger is an EventEmitter with the ability to store flag values and run
* listener functions immediately if a flag already has the target value,
* or listen for a change if it doesn't.
*
* @origin https://github.com/lighterio/lighter-common/common/events/flagger.js
* @version 0.0.3
* @import event/emitter
*/
var Emitter = require('../event/emitter')
module.exports = Emitter.extend({
/**
* Get the value of a flag.
*/
getFlag: function (flag) {
return (this._flags || 0)[flag]
},
/**
* Set a flag, like "ready" and emit its value.
*/
setFlag: function (flag, value) {
var self = this
var flags = self._flags || (self._flags = {})
if (arguments.length < 2) {
value = true
}
if (flags[flag] !== value) {
flags[flag] = value
self.emit(flag, value)
self.emit(flag + ':' + value)
}
return self
},
/**
* Fire an event when a flag is set (even if it was set in the past).
*/
when: function (flag, value, fn) {
var self = this
var flags = self._flags
if (arguments.length < 3) {
fn = value
value = true
}
if (flags) {
if (flags[flag] === value) {
fn.apply(self)
return self
}
}
self.on(flag + ':' + value, fn)
return self
}
})