Skip to content

Commit 0482d30

Browse files
committed
fully async CLI
1 parent 3586717 commit 0482d30

2 files changed

Lines changed: 79 additions & 21 deletions

File tree

bin/httpsnippet

Lines changed: 78 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
'use strict';
44

55
var cmd = require('commander');
6+
var async = require('async');
67
var debug = require('debug')('httpsnippet');
78
var fs = require('fs');
89
var HTTPSnippet = require('../src');
@@ -22,34 +23,91 @@ if (!cmd.args.length || !cmd.language) {
2223
cmd.help();
2324
}
2425

25-
var output = {};
26+
if (cmd.output) {
27+
var dir = path.resolve(cmd.output);
2628

27-
cmd.args.map(function (file) {
28-
var stats = fs.statSync(file);
29+
if (!fs.existsSync(dir)) {
30+
fs.mkdirSync(dir);
31+
}
32+
}
2933

30-
if (stats.isFile()) {
31-
var data = fs.readFileSync(file);
34+
async.waterfall([
35+
function isFile (next) {
36+
var iterator = function (item, cb) {
37+
cb(fs.statSync(item).isFile());
38+
};
3239

33-
var source = JSON.parse(data);
40+
async.filter(cmd.args, iterator, function (results) {
41+
next(null, results);
42+
});
43+
},
3444

35-
var snippet = new HTTPSnippet(source);
36-
var code = snippet[cmd.language].apply(snippet);
45+
function read (files, next) {
46+
var iterator = function (file, cb) {
47+
fs.readFile(file, cb);
48+
};
3749

38-
output[file] = code;
39-
}
40-
});
50+
async.map(files, iterator, function (err, results) {
51+
next(err, files, results);
52+
});
53+
},
4154

42-
Object.keys(output).map(function (file) {
43-
if (cmd.output) {
44-
var name = path.basename(file, path.extname(file));
55+
function parse (files, buffers, next) {
56+
var iterator = function (buffer, cb) {
57+
try {
58+
cb(null, JSON.parse(buffer));
59+
} catch (e) {
60+
debug('failed to parse source json');
61+
cb('fail', null);
62+
}
63+
};
4564

46-
var filename = path.format({
47-
dir: path.resolve(cmd.output),
48-
base: name + HTTPSnippet.extname(cmd.language)
65+
async.map(buffers, iterator, function (err, results) {
66+
next(err, files, results);
4967
});
68+
},
69+
70+
function snippet (files, sources, next) {
71+
var iterator = function (source, cb) {
72+
var snippet = new HTTPSnippet(source);
73+
cb(null, snippet[cmd.language].apply(snippet));
74+
};
75+
76+
async.map(sources, iterator, function (err, results) {
77+
next(err, files, results);
78+
});
79+
},
80+
81+
function writeOutput (files, snippets, next) {
82+
if (cmd.output) {
83+
var iterator = function (file) {
84+
var index = files.indexOf(file);
85+
var name = path.basename(file, path.extname(file));
86+
87+
var filename = path.format({
88+
dir: dir,
89+
base: name + HTTPSnippet.extname(cmd.language)
90+
});
91+
92+
fs.writeFile(filename, snippets[index]);
93+
};
94+
95+
async.each(files, iterator);
96+
}
97+
98+
next(null, files, snippets);
99+
},
100+
101+
function log (files, snippets, next) {
102+
if (!cmd.output) {
103+
var iterator = function (file) {
104+
var index = files.indexOf(file);
105+
console.log(chalk.cyan.bold.underline(file), chalk.cyan.bold(':'), '\n', snippets[index], '\n');
106+
};
50107

51-
fs.writeFile(filename, output[file]);
52-
} else {
53-
console.log(chalk.cyan.bold.underline(file), chalk.cyan.bold(':'), '\n', output[file], '\n');
108+
async.each(files, iterator);
109+
}
54110
}
111+
], function (err, files, result) {
112+
console.log(result);
55113
});

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,11 @@
1717
},
1818
"homepage": "https://github.com/ahmadnassri/httpsnippet",
1919
"devDependencies": {
20-
"async": "^0.9.0",
2120
"mocha": "^2.1.0",
2221
"should": "^5.0.1"
2322
},
2423
"dependencies": {
24+
"async": "^0.9.0",
2525
"chalk": "^1.0.0",
2626
"commander": "^2.6.0",
2727
"debug": "^2.1.1",

0 commit comments

Comments
 (0)