Skip to content

Commit dc98b7a

Browse files
author
vitaly.basaraba
committed
Featured: add theme
1 parent 65d2371 commit dc98b7a

File tree

4 files changed

+3527
-48
lines changed

4 files changed

+3527
-48
lines changed

cli.js

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,15 @@ const filter = args.top ? 'top' : args.filter || 'all';
1010
const amount = args.top || '';
1111
const level = args.level || '';
1212
const format = args.format || 'text';
13+
const theme = args.theme || '';
1314

1415
const logHeader = (header) => console.log('\x1b[32m%s\x1b[0m', header);
1516
const logDivider = () => console.log('_________________________');
1617
const logExampleParams = () => {
1718
console.log("\x1b[32m%s\x1b[0m", "Params example:");
1819
console.log("--top ${amount}");
19-
console.log("--level ( junior | middle | senior )");
20+
console.log("--level ( basic | intermediate | advanced )");
21+
console.log("--theme ( closures | storage | es6 | classes | database ... and other 203 themes)");
2022
console.log("--format ( text | array | json )");
2123
};
2224

@@ -29,10 +31,15 @@ const displayQuestions = (result, format) => {
2931
console.log(result);
3032
break;
3133
default:
32-
result.forEach(({ title, url }) => {
34+
result.forEach(({ title, url, text, theme }) => {
3335
console.log('');
3436
logHeader(`Question: ${title}`);
35-
console.info(`Answer: \x1b]8;;${url}\x1b\\${url}\x1b]8;;\x1b\\`);
37+
if (url) {
38+
console.info(`Answer: \x1b]8;;${url}\x1b\\${url}\x1b]8;;\x1b\\`);
39+
} else {
40+
console.info(`Answer: ${text}`);
41+
}
42+
console.info(`Hash: ${theme.split(',').map((data) => ` #${data.trim().toLowerCase()}`)}`);
3643
logDivider();
3744
});
3845
}
@@ -46,10 +53,11 @@ const main = async () => {
4653
if (filter) console.log('Filter -', filter);
4754
console.log('');
4855

49-
const result = await interviewQuestion({ filter, amount, level, format });
56+
const result = await interviewQuestion({ filter, amount, level, format, theme });
5057
displayQuestions(result, format);
5158

5259
console.log('');
60+
console.log(`Found ${result.length} questions`);
5361
logExampleParams();
5462

5563
if (verbose) console.log('Send questions');

index.js

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ class InterviewQuestion {
3737
* @returns {Promise<Array>} The filtered list of questions.
3838
* @throws {Error} If an invalid level or filter type is provided.
3939
*/
40-
async execute(filter = 'all', amount = 0, level = null) {
40+
async execute(filter = 'all', amount = 0, level = null, theme = null) {
4141
let filteredData = this.data;
4242

4343
// Filter by level if provided
@@ -49,6 +49,11 @@ class InterviewQuestion {
4949
filteredData = filteredData.filter(item => item.level === level);
5050
}
5151

52+
// Filter by level if provided
53+
if (theme) {
54+
filteredData = filteredData.filter(item => item.theme.split(',').map((data) => data.trim().toLowerCase()).includes(theme));
55+
}
56+
5257
switch (filter) {
5358
case 'all':
5459
return filteredData;
@@ -89,6 +94,6 @@ class InterviewQuestion {
8994
*/
9095
module.exports = async function (options = {}) {
9196
const interviewQuestion = new InterviewQuestion(options);
92-
const { filter = 'all', amount = 0, level = null } = options;
93-
return interviewQuestion.execute(filter, amount, level);
97+
const { filter = 'all', amount = 0, level = null, theme = null } = options;
98+
return interviewQuestion.execute(filter, amount, level, theme);
9499
};

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "interview-questions",
3-
"version": "1.2.0",
3+
"version": "1.2.3",
44
"main": "index.js",
55
"scripts": {
66
"test": "npx jest ./test/InterviewQuestion.test.js"

0 commit comments

Comments
 (0)