-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.js
66 lines (62 loc) · 1.72 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
var Formula = require('fparser'),
inquander = require('inquander'),
inquirer = require('inquirer'),
_ = require('lodash'),
program = require('commander'),
result, formula, variables;
program
.version('0.0.1')
.command('* <formula> [values]')
.description('Parses a mathematical formula from a string')
.action(function(expression, values) {
formula = new Formula(expression);
variables = formula.getVariables();
if (values) {
result = formula.evaluate(getValuesObject(values));
console.log('Result:', result);
} else {
askForValues();
}
});
inquander.parse(program, process.argv, {
defaultCommand: '*',
hidden: ['values']
});
function askForValues() {
inquirer.prompt(_.map(variables, function(variable) {
return {
type: 'input',
name: variable,
message: variable
};
}), function(answers) {
result = formula.evaluate(answers);
console.log('Result:', result);
inquirer.prompt([{
type: 'confirm',
name: 'again',
message: 'Would you like to calculate other values?'
}], function(answer) {
if (answer.again) {
askForValues();
}
});
});
}
function getValuesObject(values) {
var result = [],
obj = {};
values = values.split(',');
_.each(values, function(value) {
var split = value.split('='),
name = split[0].trim();
value = parseInt(split[1]);
if (obj[name]) {
result.push(obj);
obj = {};
}
obj[name] = value;
});
result.push(obj);
return result;
}