| Line | Hits | Source |
|---|---|---|
| 1 | ||
| 2 | ||
| 3 | 1 | var es = require('event-stream'); |
| 4 | ||
| 5 | 1 | var sync = { |
| 6 | text : require('./lib/text')( ) | |
| 7 | , json : require('./lib/json')( ) | |
| 8 | }; | |
| 9 | ||
| 10 | 1 | function mapper(fn, strict) { |
| 11 | 4 | function map (item, next) { |
| 12 | 4 | var res = fn(item, strict); |
| 13 | 4 | next(null, res); |
| 14 | } | |
| 15 | 4 | return es.map(map); |
| 16 | } | |
| 17 | ||
| 18 | 1 | function format ( ) { |
| 19 | 1 | return mapper(sync.text.format); |
| 20 | } | |
| 21 | ||
| 22 | 1 | function parse ( ) { |
| 23 | 1 | return es.pipeline(es.split('\n'), mapper(sync.text.parse), mapper(sync.json.echo)); |
| 24 | } | |
| 25 | ||
| 26 | 1 | function lint ( ) { |
| 27 | 1 | return mapper(sync.json.echo, {strict: true}); |
| 28 | } | |
| 29 | ||
| 30 | 1 | module.exports.sync = sync; |
| 31 | 1 | module.exports.mapper = mapper; |
| 32 | 1 | module.exports.format = format; |
| 33 | 1 | module.exports.parse = parse; |
| 34 | 1 | module.exports.lint = lint; |
| 35 |
| Line | Hits | Source |
|---|---|---|
| 1 | ||
| 2 | 1 | function echo (record, opts) { |
| 3 | 5 | var res = { |
| 4 | sgv: record.sgv.toString( ) | |
| 5 | , dateString: record.dateString || '' | |
| 6 | , date: parseInt(record.date) | |
| 7 | , device: record.device || '' | |
| 8 | , direction: record.direction || '' | |
| 9 | }; | |
| 10 | 5 | if (res.sgv && isFinite(res.date)) { |
| 11 | 4 | return res; |
| 12 | } | |
| 13 | 2 | if (opts && opts.strict) { throw new Error(record); } |
| 14 | } | |
| 15 | ||
| 16 | ||
| 17 | 1 | function configure ( ) { |
| 18 | 4 | return configure; |
| 19 | } | |
| 20 | ||
| 21 | 1 | configure.echo = echo; |
| 22 | 1 | module.exports = configure; |
| 23 |
| Line | Hits | Source |
|---|---|---|
| 1 | ||
| 2 | 1 | function parse (t) { |
| 3 | 2 | var sep = configure.opts.parse || configure.opts.sep; |
| 4 | 2 | var p = t.split(sep); |
| 5 | ||
| 6 | 2 | if (p.length < 4) { return; } |
| 7 | 2 | var rec = { |
| 8 | dateString: p[0] | |
| 9 | , date: parseInt(p[1]) | |
| 10 | , sgv: p[2] | |
| 11 | , direction: p[3] | |
| 12 | , device: p[4] || '' | |
| 13 | }; | |
| 14 | 2 | return rec; |
| 15 | } | |
| 16 | ||
| 17 | 1 | function format (rec) { |
| 18 | 2 | var sep = configure.opts.format || configure.opts.sep; |
| 19 | 2 | var fields = [ rec.dateString |
| 20 | , rec.date | |
| 21 | , rec.sgv | |
| 22 | , rec.direction || '' | |
| 23 | , rec.device || '']; | |
| 24 | 2 | return fields.join(sep); |
| 25 | } | |
| 26 | ||
| 27 | 1 | function configure (opts) { |
| 28 | 1 | if (opts) { configure.opts = opts; } |
| 29 | 1 | return configure; |
| 30 | } | |
| 31 | ||
| 32 | 1 | var separate_text = /[\s,]/; |
| 33 | 1 | var separate_format = '\t'; |
| 34 | 1 | configure.opts = { parse: separate_text, format: separate_format }; |
| 35 | 1 | configure.parse = parse; |
| 36 | 1 | configure.format = format; |
| 37 | ||
| 38 | 1 | module.exports = configure; |
| 39 |
| Line | Hits | Source |
|---|---|---|
| 1 | ||
| 2 | 1 | var should = require('should'); |
| 3 | ||
| 4 | 1 | describe('lib/json', function ( ) { |
| 5 | 1 | var fix = { |
| 6 | "sgv": "123", | |
| 7 | "device": "test", | |
| 8 | "direction": "", | |
| 9 | "dateString": "2014-07-14T18:19:01-0700", | |
| 10 | "date": 1405387141 | |
| 11 | }; | |
| 12 | ||
| 13 | 1 | var fixable = { |
| 14 | "sgv": 123, | |
| 15 | "device": "test", | |
| 16 | "direction": "", | |
| 17 | "dateString": "2014-07-14T18:19:01-0700", | |
| 18 | "date": "1405387141" | |
| 19 | }; | |
| 20 | ||
| 21 | 1 | var broken = { |
| 22 | "sgv": "123", | |
| 23 | "device": "test", | |
| 24 | "direction": "", | |
| 25 | "dateString": "2014-07-14T18:19:01-0700" | |
| 26 | }; | |
| 27 | ||
| 28 | 1 | var json = require('../').sync.json; |
| 29 | 1 | it('should exist', function ( ) { |
| 30 | 1 | json.should.be.ok; |
| 31 | 1 | json.echo.should.be.ok; |
| 32 | }); | |
| 33 | ||
| 34 | 1 | it('echos records', function ( ) { |
| 35 | 1 | var result = json( ).echo(fix); |
| 36 | 1 | Object.keys(result).forEach(function (key) { |
| 37 | 5 | result[key].should.equal(fix[key]); |
| 38 | }); | |
| 39 | ||
| 40 | }); | |
| 41 | ||
| 42 | 1 | it('fixes records', function ( ) { |
| 43 | 1 | var result = json( ).echo(fixable); |
| 44 | 1 | Object.keys(result).forEach(function (key) { |
| 45 | 5 | result[key].should.equal(fix[key]); |
| 46 | }); | |
| 47 | }); | |
| 48 | ||
| 49 | 1 | it('has strict mode', function ( ) { |
| 50 | 1 | (function ( ) { |
| 51 | 1 | var result = json( ).echo(broken, {strict: true}); |
| 52 | }).should.throw( ); | |
| 53 | ||
| 54 | ||
| 55 | }); | |
| 56 | ||
| 57 | }); | |
| 58 | ||
| 59 |
| Line | Hits | Source |
|---|---|---|
| 1 | ||
| 2 | 1 | var should = require('should'); |
| 3 | 1 | var es = require('event-stream'); |
| 4 | ||
| 5 | 1 | describe('sgvdata', function ( ) { |
| 6 | 1 | var fix = { |
| 7 | "sgv": "123", | |
| 8 | "device": "test", | |
| 9 | "direction": "", | |
| 10 | "dateString": "2014-07-14T18:19:01-0700", | |
| 11 | "date": 1405387141 | |
| 12 | }; | |
| 13 | ||
| 14 | 1 | var fixable = { |
| 15 | "sgv": 123, | |
| 16 | "device": "test", | |
| 17 | "direction": "", | |
| 18 | "dateString": "2014-07-14T18:19:01-0700", | |
| 19 | "date": "1405387141" | |
| 20 | }; | |
| 21 | ||
| 22 | 1 | var tab = '2014-07-14T18:19:01-0700\t1405387141\t123\t\ttest'; |
| 23 | 1 | var sgvdata = require('../'); |
| 24 | ||
| 25 | ||
| 26 | 1 | it('should exist', function ( ) { |
| 27 | 1 | sgvdata.should.be.ok; |
| 28 | 1 | sgvdata.sync.should.be.ok; |
| 29 | 1 | sgvdata.lint.should.be.ok; |
| 30 | 1 | sgvdata.format.should.be.ok; |
| 31 | 1 | sgvdata.parse.should.be.ok; |
| 32 | }); | |
| 33 | ||
| 34 | 1 | function prove_known(result, fix) { |
| 35 | 2 | Object.keys(result).forEach(function (key) { |
| 36 | 10 | result[key].should.equal(fix[key]); |
| 37 | }); | |
| 38 | } | |
| 39 | ||
| 40 | 1 | it('should stream text to json', function (done) { |
| 41 | 1 | var input = es.readArray([tab]); |
| 42 | 1 | var proc = sgvdata.parse( ) |
| 43 | 1 | function finish (err, results) { |
| 44 | 1 | results.length.should.equal(1); |
| 45 | 1 | prove_known(results[0], fix); |
| 46 | 1 | done( ); |
| 47 | } | |
| 48 | 1 | es.pipeline(input, proc, es.writeArray(finish)); |
| 49 | }); | |
| 50 | ||
| 51 | 1 | it('should stream json to text', function (done) { |
| 52 | 1 | var input = es.readArray([fix]); |
| 53 | 1 | var proc = sgvdata.format( ) |
| 54 | 1 | function finish (err, results) { |
| 55 | 1 | results[0].should.equal(tab); |
| 56 | 1 | done( ); |
| 57 | } | |
| 58 | 1 | es.pipeline(input, proc, es.writeArray(finish)); |
| 59 | }); | |
| 60 | ||
| 61 | 1 | it('should stream valid json', function (done) { |
| 62 | 1 | var input = es.readArray([fixable]); |
| 63 | 1 | var proc = sgvdata.lint( ) |
| 64 | 1 | function finish (err, results) { |
| 65 | 1 | prove_known(results[0], fix); |
| 66 | 1 | done( ); |
| 67 | } | |
| 68 | 1 | es.pipeline(input, proc, es.writeArray(finish)); |
| 69 | }); | |
| 70 | }); | |
| 71 |
| Line | Hits | Source |
|---|---|---|
| 1 | ||
| 2 | 1 | var should = require('should'); |
| 3 | ||
| 4 | 1 | describe('lib/text', function ( ) { |
| 5 | 1 | var fix = { |
| 6 | "sgv": "123", | |
| 7 | "device": "test", | |
| 8 | "direction": "", | |
| 9 | "dateString": "2014-07-14T18:19:01-0700", | |
| 10 | "date": 1405387141 | |
| 11 | }; | |
| 12 | 1 | var tab = '2014-07-14T18:19:01-0700\t1405387141\t123\t\ttest'; |
| 13 | 1 | var text = require('../').sync.text; |
| 14 | 1 | it('should exist', function ( ) { |
| 15 | 1 | text.should.be.ok; |
| 16 | 1 | text.format.should.be.ok; |
| 17 | 1 | text.parse.should.be.ok; |
| 18 | 1 | text.opts.should.be.ok; |
| 19 | }); | |
| 20 | ||
| 21 | 1 | it('formats text', function ( ) { |
| 22 | 1 | var result = text.format(fix); |
| 23 | 1 | result.should.equal(tab); |
| 24 | ||
| 25 | }); | |
| 26 | ||
| 27 | 1 | it('parses text', function ( ) { |
| 28 | 1 | var result = text.parse(tab); |
| 29 | 1 | Object.keys(result).forEach(function (key) { |
| 30 | 5 | result[key].should.equal(fix[key]); |
| 31 | }); | |
| 32 | ||
| 33 | }); | |
| 34 | ||
| 35 | }); | |
| 36 | ||
| 37 |