Comparing version 0.1.2 to 0.2.0
16
index.js
var fs = require('fs') | ||
var util = require('util') | ||
var events = require('events') | ||
@@ -8,8 +6,5 @@ var writers = {} | ||
function Writer(filename) { | ||
events.EventEmitter.call(this) | ||
this.filename = filename | ||
} | ||
util.inherits(Writer, events.EventEmitter) | ||
Writer.prototype.setCallback = function(callback) { | ||
@@ -19,2 +14,7 @@ this.callback = callback | ||
Writer.prototype.callback = function(err, data, next) { | ||
if (err) throw err | ||
next() | ||
} | ||
Writer.prototype.write = function(data) { | ||
@@ -34,4 +34,2 @@ | ||
if (err) throw err | ||
function next() { | ||
@@ -46,3 +44,3 @@ self.lock = false | ||
self.callback ? self.callback(data, next) : next() | ||
self.callback ? self.callback(err, data, next) : next() | ||
}) | ||
@@ -55,2 +53,2 @@ | ||
return writers[filename] = writers[filename] || new Writer(filename) | ||
} | ||
} |
{ | ||
"name": "steno", | ||
"version": "0.1.2", | ||
"version": "0.2.0", | ||
"description": "File writer", | ||
"main": "index.js", | ||
"scripts": { | ||
"test": "node test", | ||
"test": "node test | tap-dot", | ||
"prepush": "npm test" | ||
@@ -30,4 +30,5 @@ }, | ||
"husky": "^0.6.1", | ||
"tap-dot": "^0.2.3", | ||
"tape": "^3.0.1" | ||
} | ||
} |
@@ -1,5 +0,7 @@ | ||
# steno ![](http://img.shields.io/npm/v/steno.svg?style=flat) ![](http://img.shields.io/travis/typicode/steno.svg?style=flat) | ||
# steno [![Build Status](https://travis-ci.org/typicode/steno.svg?branch=master)](https://travis-ci.org/typicode/steno) [![npm version](https://badge.fury.io/js/steno.svg)](http://badge.fury.io/js/steno) | ||
> Super fast non-blocking file writer for Node. | ||
> Super fast non-blocking file writer for Node | ||
## Example | ||
```javascript | ||
@@ -15,4 +17,13 @@ var steno = require('steno') | ||
## API | ||
## How it works | ||
```javascript | ||
steno('file.txt').write('A') // starts writing A to file | ||
steno('file.txt').write('B') // still writing A, B is buffered | ||
steno('file.txt').write('C') // still writing A, C replaces B | ||
// A has been written to file, starts writting C (B is skipped) | ||
``` | ||
## Methods | ||
__steno(filename)__ | ||
@@ -28,12 +39,31 @@ | ||
Use it to set a callback that will be executed between two writes. Useful for atomic writing, logging, delaying, ... | ||
Sets a callback. Useful for creating atomic writers, logging, delaying, ... | ||
```javascript | ||
steno('tmp-file.txt').setCallback(function(data, next) { | ||
console.log(data + ' has been written to ' + this.filename) | ||
var atomic = steno('tmp-file.txt').setCallback(function(err, data, next) { | ||
// Writing is stopped until next is called | ||
if (err) throw err | ||
fs.rename('tmp-file.txt', 'file.txt', function(err) { | ||
if (err) throw err | ||
next() // next must be called | ||
next() | ||
}) | ||
}) | ||
atomic.write('Hello world') | ||
``` | ||
## Properties | ||
__writer.lock__ | ||
`true` if file is being written. | ||
__writer.next__ | ||
`null` when there's no more data waiting to be written to file. | ||
## License | ||
MIT - [Typicode](https://github.com/typicode) |
28
test.js
@@ -25,2 +25,15 @@ var fs = require('fs') | ||
test('steno default callback', function(t) { | ||
reset() | ||
t.plan(2) | ||
writer.callback(null, '', function() { | ||
t.pass('next was called') | ||
}) | ||
t.throws(function() { | ||
writer.callback(new Error()) | ||
}) | ||
}) | ||
test('steno with callback', function(t) { | ||
@@ -30,3 +43,3 @@ reset() | ||
writer.setCallback(function(data, next) { | ||
writer.setCallback(function(err, data, next) { | ||
if (data === max) { | ||
@@ -42,1 +55,14 @@ t.equal(+fs.readFileSync('tmp.txt'), max) | ||
}) | ||
test('steno error with callback', function(t) { | ||
reset() | ||
t.plan(1) | ||
var writer = steno(__dirname + '/dir/doesnt/exist') | ||
writer.setCallback(function(err) { | ||
t.equal(err.code, 'ENOENT') | ||
}) | ||
writer.write('') | ||
}) |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
5914
108
68
3