diff --git a/.jshintrc b/.jshintrc index f9df9b9..e5c5749 100644 --- a/.jshintrc +++ b/.jshintrc @@ -2,6 +2,7 @@ "node": true, "curly": true, "eqeqeq": true, + "esversion": 6, "freeze": true, "immed": true, "indent": 2, @@ -14,8 +15,8 @@ "plusplus": false, "quotmark": "single", "undef": true, - "unused": true, + "unused": false, "maxparams": 4, "maxdepth": 4, - "maxlen": 120 + "maxlen": 140 } diff --git a/index.js b/index.js index 3a98d74..f44b413 100644 --- a/index.js +++ b/index.js @@ -5,7 +5,8 @@ var util = require('util'), split = require('split'), through = require('through2'), child = require('child_process'), - exec = path.join(__dirname, 'build', util.format( 'pbf2json.%s-%s', os.platform(), os.arch() ) ); + exec = path.join(__dirname, 'build', util.format( 'pbf2json.%s-%s', os.platform(), os.arch() ) ), + generateParams = require('./lib/generateParams'); // custom log levels can be detected for lines with the format: // [level] message @@ -29,14 +30,9 @@ function errorHandler( name, level ){ function createReadStream( config ){ - var flags = []; - flags.push( util.format( '-tags=%s', config.tags ) ); - if( config.hasOwnProperty( 'leveldb' ) ){ - flags.push( util.format( '-leveldb=%s', config.leveldb ) ); - } - flags.push( config.file ); + const params = generateParams(config); - var proc = child.spawn( exec, flags ); + var proc = child.spawn( exec, params ); // propagate signals from parent to child process.on('SIGINT', function(){ proc.kill(); }); diff --git a/lib/generateParams.js b/lib/generateParams.js new file mode 100644 index 0000000..558bfc8 --- /dev/null +++ b/lib/generateParams.js @@ -0,0 +1,17 @@ +function generateParams(config) { + const flags = []; + + if (config.tags) { + const tags = config.tags.join(','); + flags.push( `-tags=${tags}` ); + } + if( config.hasOwnProperty( 'leveldb' ) ){ + flags.push( `-leveldb=${config.leveldb}` ); + } + + flags.push( config.file ); + + return flags; +} + +module.exports = generateParams; diff --git a/test/lib/generateParams.js b/test/lib/generateParams.js new file mode 100644 index 0000000..9041bec --- /dev/null +++ b/test/lib/generateParams.js @@ -0,0 +1,43 @@ +const generateParams = require('../../lib/generateParams'); + +module.exports.tests = {}; + +module.exports.tests.params = function(test) { + test('PBF file', function(t) { + const config = { + file: '/some/path/to/osm.pbf' + }; + + const params = generateParams(config); + + t.equal(params[params.length - 1], '/some/path/to/osm.pbf', 'final parameter is path to PBF file'); + t.end(); + }); + test('PBF file', function(t) { + const config = { + tags: [ + 'tag:one', + 'tag:two', + 'combination~tags' + ] + }; + + const params = generateParams(config); + + const expected = '-tags=tag:one,tag:two,combination~tags'; + + t.equal(params[0], expected, 'tag array is serialized into parameter'); + t.end(); + }); +}; + +module.exports.all = function (tape, common) { + + function test(name, testFunction) { + return tape('generateParams: ' + name, testFunction); + } + + for( var testCase in module.exports.tests ){ + module.exports.tests[testCase](test, common); + } +}; diff --git a/test/run.js b/test/run.js index 6003a39..bbfc0e0 100644 --- a/test/run.js +++ b/test/run.js @@ -3,9 +3,10 @@ var tape = require('tape'); var common = {}; var tests = [ - require('./index.js') + require('./index.js'), + require('./lib/generateParams.js') ]; tests.map(function(t) { t.all(tape, common); -}); \ No newline at end of file +});