Skip to content

Commit 71d57ee

Browse files
committed
groupping into families and giving families an info method
1 parent 6456411 commit 71d57ee

10 files changed

Lines changed: 89 additions & 21 deletions

File tree

bin/httpsnippet

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -91,11 +91,9 @@ async.waterfall([
9191
var index = files.indexOf(file);
9292
var name = path.basename(file, path.extname(file));
9393

94-
console.info(cmd.family, cmd.target);
95-
9694
var filename = path.format({
9795
dir: dir,
98-
base: name + HTTPSnippet.info(cmd.family, cmd.target).ext
96+
base: name + HTTPSnippet.extname(cmd.family, cmd.target)
9997
});
10098

10199
fs.writeFile(filename, snippets[index]);

src/index.js

Lines changed: 58 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -87,19 +87,20 @@ HTTPSnippet.prototype._matchTarget = function (familyName, target) {
8787
if (typeof family === 'function') {
8888
return family;
8989
}
90-
// find the first possibel target
91-
var firstTarget = Object.keys(family).pop();
90+
91+
// find the first default target
92+
var defaultTarget = family._familyInfo().default;
9293

9394
// shorthand
9495
if (!target || typeof target === 'object') {
95-
target = firstTarget;
96+
target = defaultTarget;
9697
}
9798

9899
// asking for a particular target
99100
if (typeof target === 'string') {
100101
// attempt to call the first one we find
101102
if (typeof family[target] !== 'function') {
102-
target = firstTarget;
103+
target = defaultTarget;
103104
}
104105

105106
// last chance
@@ -119,12 +120,61 @@ module.exports._targets = function () {
119120
return Object.keys(targets);
120121
};
121122

123+
module.exports._familyInfo = function (family) {
124+
if (targets[family] && targets[family]._familyInfo) {
125+
return targets[family]._familyInfo();
126+
}
127+
128+
return false;
129+
};
130+
122131
module.exports.info = function (family, target) {
123-
var result = HTTPSnippet.prototype._matchTarget.call(null, family, target);
132+
if (!targets[family]) {
133+
return false;
134+
}
124135

125-
if (result) {
126-
return result.info();
136+
if (typeof targets[family] === 'function') {
137+
return targets[family].info();
127138
}
128139

129-
return false;
140+
// get all info for all family members
141+
if (!target && typeof targets[family] === 'object') {
142+
var results = {
143+
family: family
144+
};
145+
146+
results.members = Object.keys(targets[family])
147+
.filter(function (key) {
148+
return key !== '_familyInfo';
149+
})
150+
151+
.map(function (target) {
152+
var info = targets[family][target].info();
153+
154+
delete info.family;
155+
156+
return info;
157+
});
158+
159+
return results;
160+
}
161+
162+
if (typeof targets[family] === 'object' && typeof targets[family][target] === 'function') {
163+
return targets[family][target].info();
164+
}
165+
};
166+
167+
module.exports.extname = function (family, target) {
168+
if (!targets[family]) {
169+
return '';
170+
}
171+
172+
if (typeof targets[family] === 'function') {
173+
return targets[family].info().extname;
174+
}
175+
176+
// get all info for all family members
177+
if (!target && typeof targets[family] === 'object') {
178+
return targets[family]._familyInfo().extname;
179+
}
130180
};

src/targets/curl.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,9 +45,9 @@ module.exports = function (options) {
4545
module.exports.info = function () {
4646
return {
4747
key: 'curl',
48-
ext: '.sh',
4948
title: 'cURL',
5049
link: 'http://curl.haxx.se/',
51-
description: 'curl is a command line tool and library for transferring data with URL syntax'
50+
description: 'curl is a command line tool and library for transferring data with URL syntax',
51+
extname: '.sh'
5252
};
5353
};

src/targets/httpie.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -108,9 +108,9 @@ module.exports = function (options) {
108108
module.exports.info = function () {
109109
return {
110110
key: 'httpie',
111-
ext: '.sh',
112111
title: 'HTTPie',
113112
link: 'http://httpie.org/',
114-
description: 'a CLI, cURL-like tool for humans'
113+
description: 'a CLI, cURL-like tool for humans',
114+
extname: '.sh'
115115
};
116116
};

src/targets/node/index.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,12 @@
11
'use strict';
22

33
module.exports = require('requireindex')(__dirname);
4+
5+
module.exports._familyInfo = function () {
6+
return {
7+
key: 'node',
8+
title: 'Node.JS',
9+
extname: '.js',
10+
default: 'native'
11+
};
12+
};

src/targets/node/native.js

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,8 +67,7 @@ module.exports.info = function () {
6767
return {
6868
family: 'node',
6969
key: 'native',
70-
ext: '.js',
71-
title: 'Node.JS',
70+
title: 'HTTP',
7271
link: 'http://nodejs.org/api/http.html#http_http_request_options_callback',
7372
description: 'Node.js native HTTP interface'
7473
};

src/targets/php/curl.js

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -106,8 +106,7 @@ module.exports.info = function () {
106106
return {
107107
family: 'php',
108108
key: 'curl',
109-
ext: '.php',
110-
title: 'PHP',
109+
title: 'cURL',
111110
link: 'http://php.net/manual/en/book.curl.php',
112111
description: 'PHP with libcurl'
113112
};

src/targets/php/index.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,12 @@
11
'use strict';
22

33
module.exports = require('requireindex')(__dirname);
4+
5+
module.exports._familyInfo = function () {
6+
return {
7+
key: 'php',
8+
title: 'PHP',
9+
extname: '.php',
10+
default: 'curl'
11+
};
12+
};

src/targets/wget.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,9 +48,9 @@ module.exports = function (options) {
4848
module.exports.info = function () {
4949
return {
5050
key: 'wget',
51-
ext: '.sh',
5251
title: 'Wget',
5352
link: 'https://www.gnu.org/software/wget/',
54-
description: 'a free software package for retrieving files using HTTP, HTTPS'
53+
description: 'a free software package for retrieving files using HTTP, HTTPS',
54+
extname: '.sh'
5555
};
5656
};

test/info.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,10 @@ async.filter(Object.keys(targets), isTargetFamily, function (families) {
4040
async.each(Object.keys(targets[family]), function (key) {
4141
var target = targets[family][key];
4242

43+
if (key === '_familyInfo') {
44+
return;
45+
}
46+
4347
describe(family + '[' + key + ']' + '.info()', function () {
4448
it('should have info method', function (done) {
4549
target.should.have.property('info');

0 commit comments

Comments
 (0)