fixed a small typo and added some basic docs...

Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
Alex A. Naanou 2014-12-29 22:08:47 +03:00
parent e133df7701
commit d16ded7452
2 changed files with 81 additions and 7 deletions

View File

@ -1,2 +1,76 @@
guaranteeEvents
===============
This module exports a single function that when passed an event(s) and an
[EventEmitter](http://nodejs.org/api/events.html#events_class_events_eventemitter)
compatible object will register a couple of handlers that
will provide the following functionality:
* Cache event data for each event of the given type that gets emitted.
* Call new handlers of the specified event with each of the prior event
data sets in order of event occurrence.
This is useful for modules like [glob](https://github.com/isaacs/node-glob)
that use the [EventEmitter](http://nodejs.org/api/events.html#events_class_events_eventemitter)
model to pass data to the user (see examples below).
This is similar to how state change handlers work in
[jQuery.Deferred](http://api.jquery.com/category/deferred-object/) or in
[Promise](https://promisesaplus.com/) objects.
Install
-------
```
$ npm install guarantee-events
```
Basic Examples
-------------
A synthetic example illustrating the basic functionality:
```javascript
var emitter = new (require('events').EventEmitter)
var guaranteeEvents = require('guarantee-events')
guaranteeEvents('event', emitter)
// emit some events...
emitter.emit('event', 'some data')
emitter.emit('event', 'some', 'more', 'data')
// Here the handler will be called for each event it missed...
emitter.on('event', function(){ console.log([].slice.apply(argumnts).join(' ')) })
emitter.emit('event', 'some data')
```
A real-life use-case:
```javascript
var glob = require('glob')
var guaranteeEvents = require('guarantee-events')
// build a glob object with cached 'match' and 'end' events...
var results = guaranteeEvents('match end', glob('**/*js'))
// Do stuff for some time...
// This will not miss a single result, regardless of how long it
// took to do stuff...
results.on('match', function(path){ console.log('found: '+path) })
```

View File

@ -12,17 +12,17 @@
// -> emitter
//
//
// This will add a .clearGuarantedQueue(..) method to the emitter that
// This will add a .clearGuaranteedQueue(..) method to the emitter that
// will clear the event queue for a specific event.
//
// Clear event(s) queue(s)...
// emitter.clearGuarantedQueue('event')
// emitter.clearGuarantedQueue('eventA eventB ...')
// emitter.clearGuarantedQueue(['eventA', 'eventB', ...])
// emitter.clearGuaranteedQueue('event')
// emitter.clearGuaranteedQueue('eventA eventB ...')
// emitter.clearGuaranteedQueue(['eventA', 'eventB', ...])
// -> emitter
//
// Clear all queues...
// emitter.clearGuarantedQueue('*')
// emitter.clearGuaranteedQueue('*')
// -> emitter
//
//
@ -35,8 +35,8 @@ function(names, emitter){
names = typeof(names) == typeof('str') ? names.split(/\s+/g) : names
// add ability to clear the queue...
if(emitter.clearGuarantedQueue == null){
emitter.clearGuarantedQueue = function(names){
if(emitter.clearGuaranteedQueue == null){
emitter.clearGuaranteedQueue = function(names){
names = names == '*' ? Object.keys(this._guaranteed_queue)
: typeof(names) == typeof('str') ? names.split(/\s+/g)
: names