diff --git a/README.md b/README.md index 7d18e17..1faacd0 100644 --- a/README.md +++ b/README.md @@ -17,14 +17,55 @@ aster.src('src/**/*.js') .map(plugin1(optionsForPlugin1)) .map(plugin2(optionsForPlugin2)) // ... -.subscribe(aster.runner); +.subscribe(aster.runner({ + onNext: (item) => { + console.log('>> %s'.yellow, item) + } +})); ``` +When you create an `Observable`, you always pass 3 functions in this order: +- `successHandler` +- `errorHandler` +- `onCompleteHandler` + +The `success` or `error` handler is called for each processed event/item of the Observable stream, the `onComplete` handler when the stream is done (such as no more files to be processed). + +The default event handlers are: + +```js +function onFile(file) { + console.log('>> %s'.yellow, file.path) +} + +function onError(error) { + console.error(error.stack.red) +} + +function onCompleted() { + console.log('Done.'.green) +} +``` + +Where `onFile` is used for `onSuccess` and expects a `file` object with a `path`. + ## API ### runner Type: [`Rx.Observer`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/observer.md) +#### options.onSuccess + +Success event handler for individual item/event processed. + +#### options.onError + +Error event handler for individual item/event processed. + +#### options.onCompleted + +Completed handler for when entire stream of events/items of Observable has been processed. + ## License [MIT License](http://en.wikipedia.org/wiki/MIT_License) diff --git a/index.js b/index.js index 78cad85..8d4ebe8 100644 --- a/index.js +++ b/index.js @@ -3,12 +3,34 @@ var Rx = require('rx'); require('colors'); -module.exports = Rx.Observer.create(function onFiles(files) { - console.log('Processing files...'); - - files.subscribe(Rx.Observer.create( - function onFile(file) { console.log('>> %s'.yellow, file.path) }, - function onError(error) { console.error(error.stack.red) }, - function onCompleted() { console.log('Done.'.green) } - )); -}); + +var defaults = { + onNext: function(file) { + console.log('>> %s'.yellow, file.path) + }, + onError: function (error) { + console.error(error.stack.red) + }, + onCompleted: function () { + console.log('Done.'.green) + } +} + +function defaultSubscriber(options) { + return function onFiles(files) { + console.log('Processing files...'); + + files.subscribe(Rx.Observer.create( + options.onNext || defaults.onNext, + options.onError || defaults.onError, + options.onCompleted || defaults.onCompleted + )); + } +} + +module.exports = function(options) { + var subscriber = options.subscriber || defaultSubscriber + subscriber = typeof subscriber === 'function' ? subscriber(options) : subscriber + + Rx.Observer.create(subscriber); +} diff --git a/package.json b/package.json index 0064129..8bb106c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "aster-runner", - "version": "0.1.1", + "version": "0.2.0", "description": "Task runner for aster.", "author": "Ingvar Stepanyan (https://github.com/RReverser)", "repository": "asterjs/aster-runner", @@ -12,7 +12,7 @@ ], "main": "index.js", "dependencies": { - "colors": "^0.6.2", - "rx": "^2.3.11" + "colors": "^1.1.2", + "rx": "^4.1.0" } }