added apropos-style content search

master
Gregory Scheerlinck 8 years ago
parent 3a784dd69a
commit 6b54afdd71

@ -19,13 +19,17 @@ var yargs = require('yargs')
.usage('Usage: $0 <search terms>')
.default('d', false)
.boolean('d')
.alias('d', 'deep-search')
.alias('d', 'desc-search')
.default('k', false)
.boolean('k')
.alias('k', 'apropos')
.help('h')
.alias('h', 'help')
.argv;
var searchTerms = yargs._;
var isDeep = yargs.d;
var isApro = yargs.k;
var options = {
name: '',
@ -36,7 +40,7 @@ var options = {
manual: '',
};
Promise.resolve(narrowDown(articles, searchTerms, isDeep)).then(function select(filteredArticles) {
Promise.resolve(narrowDown(articles, searchTerms, isDeep, isApro)).then(function select(filteredArticles) {
return selectArticle(filteredArticles);
}).then(function makeRoff(selectedArticle) {
return getContents(selectedArticle);

@ -2,11 +2,12 @@
var inquirer = require('inquirer');
var chalk = require('chalk');
var getContents = require('../lib/fileio').getContents;
exports.narrowDown = narrowDown;
exports.selectArticle = selectArticle;
function narrowDown(articles, terms, deep) {
function narrowDown(articles, terms, deep, apropos) {
var reSearchTerms = terms.map(function mapRE(term) {
return new RegExp(term, 'i');
});
@ -15,8 +16,21 @@ function narrowDown(articles, terms, deep) {
return !article.category;
});
if (deep) {
return filtered.filter(function filterOnTitle(article) {
if (apropos) {
filtered = filtered.map(function getArticleContents(art) {
return getContents(art).then(function makeArts(article) {
return article;
});
});
return Promise.all(filtered).then(function filterIt(items) {
return items.filter(function filterOnTitleContents(article) {
return reSearchTerms.every(function checkRE(reTerm) {
return reTerm.test(article.title) || reTerm.test(article.contents);
});
});
});
} else if (deep) {
return filtered.filter(function filterOnTitleDesc(article) {
return reSearchTerms.every(function checkRE(reTerm) {
return reTerm.test(article.title) || reTerm.test(article.description);
});
@ -55,7 +69,6 @@ function selectArticle(articles) {
name: 'selection',
message: 'Select the Arch Wiki article',
choices: choices,
pageSize: 15,
}], function getAnswer(response) {
var pos = choices.indexOf(response.selection);
return resolve(sorted[pos]);

@ -25,6 +25,8 @@
"remark": "^3.2.2",
"remark-man": "^2.0.1",
"remark-unlink": "^2.0.0",
"sanitize-filename": "^1.5.3",
"tmp": "0.0.28",
"yargs": "^3.32.0"
},
"devDependencies": {

Loading…
Cancel
Save