Skip to content

Commit 310ac7f

Browse files
committed
refactor to use 'stat' command
Signed-off-by: Eric Wang <[email protected]>
1 parent 024ec43 commit 310ac7f

File tree

2 files changed

+64
-54
lines changed

2 files changed

+64
-54
lines changed

lib/commands/stat.js

+64
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
var chalk = require('chalk');
2+
var log = require('loglevel');
3+
var sprintf = require('sprintf-js').sprintf;
4+
5+
var core = require('../core');
6+
7+
var cmd = {
8+
command: 'stat',
9+
desc: 'show statistics',
10+
builder: {
11+
}
12+
};
13+
14+
function bar(c, n) {
15+
return new Buffer(n).fill(c).toString();
16+
}
17+
18+
function prettyLine(key, done, all) {
19+
done = done || 0;
20+
var n = 30;
21+
var x = Math.ceil(n * done / all);
22+
return sprintf('%-8s %3d/%-3d (%.2f%%)\t%s%s%s',
23+
key, done, all, done * 100 / all,
24+
chalk.green('[' + bar(chalk.enabled ? '.' : '+', x)),
25+
chalk.red(bar('.', n - x)),
26+
done === all ? chalk.green(']') : chalk.red(']'));
27+
}
28+
29+
function showSummary(problems) {
30+
var stats = {};
31+
var statsNoLock = {};
32+
33+
problems.forEach(function(problem) {
34+
var keyAll = 'all' + problem.level;
35+
var keyAC = problem.state + problem.level;
36+
stats[keyAll] = (stats[keyAll] || 0) + 1;
37+
stats[keyAC] = (stats[keyAC] || 0) + 1;
38+
39+
if (!problem.locked) {
40+
statsNoLock[keyAll] = (statsNoLock[keyAll] || 0) + 1;
41+
statsNoLock[keyAC] = (statsNoLock[keyAC] || 0) + 1;
42+
}
43+
});
44+
45+
log.info(prettyLine('Easy', stats.acEasy, stats.allEasy));
46+
log.info(prettyLine('Medium', stats.acMedium, stats.allMedium));
47+
log.info(prettyLine('Hard', stats.acHard, stats.allHard));
48+
49+
log.info();
50+
log.info('Without Locked:');
51+
log.info(prettyLine('Easy', statsNoLock.acEasy, statsNoLock.allEasy));
52+
log.info(prettyLine('Medium', statsNoLock.acMedium, statsNoLock.allMedium));
53+
log.info(prettyLine('Hard', statsNoLock.acHard, statsNoLock.allHard));
54+
}
55+
56+
cmd.handler = function(argv) {
57+
core.getProblems(function(e, problems) {
58+
if (e) return log.fail(e);
59+
60+
showSummary(problems);
61+
});
62+
};
63+
64+
module.exports = cmd;

lib/commands/user.js

-54
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
var chalk = require('chalk');
22
var log = require('loglevel');
33
var prompt = require('prompt');
4-
var sprintf = require('sprintf-js').sprintf;
54

65
var core = require('../core');
76

@@ -20,31 +19,10 @@ var cmd = {
2019
type: 'boolean',
2120
default: false,
2221
describe: 'Logout'
23-
},
24-
stat: {
25-
alias: 's',
26-
type: 'boolean',
27-
default: false,
28-
describe: 'Show user statistics'
2922
}
3023
}
3124
};
3225

33-
function bar(c, n) {
34-
return new Buffer(n).fill(c).toString();
35-
}
36-
37-
function prettyLine(key, done, all) {
38-
done = done || 0;
39-
var n = 30;
40-
var x = Math.ceil(n * done / all);
41-
return sprintf('%-8s %3d/%-3d (%.2f%%)\t%s%s%s',
42-
key, done, all, done * 100 / all,
43-
chalk.green('[' + bar(chalk.enabled ? '.' : '+', x)),
44-
chalk.red(bar('.', n - x)),
45-
done === all ? chalk.green(']') : chalk.red(']'));
46-
}
47-
4826
cmd.handler = function(argv) {
4927
var user = null;
5028
if (argv.login) {
@@ -78,38 +56,6 @@ cmd.handler = function(argv) {
7856
log.info('You are now login as', chalk.yellow(user.name));
7957
else
8058
return log.fail('You are not login yet?');
81-
82-
if (argv.stat) {
83-
core.getProblems(function(e, problems) {
84-
if (e) return log.fail(e);
85-
86-
var stats = {};
87-
var statsNoLock = {};
88-
89-
problems.forEach(function(problem) {
90-
var keyAll = 'all' + problem.level;
91-
var keyAC = problem.state + problem.level;
92-
stats[keyAll] = (stats[keyAll] || 0) + 1;
93-
stats[keyAC] = (stats[keyAC] || 0) + 1;
94-
95-
if (!problem.locked) {
96-
statsNoLock[keyAll] = (statsNoLock[keyAll] || 0) + 1;
97-
statsNoLock[keyAC] = (statsNoLock[keyAC] || 0) + 1;
98-
}
99-
});
100-
101-
log.info();
102-
log.info(prettyLine('Easy', stats.acEasy, stats.allEasy));
103-
log.info(prettyLine('Medium', stats.acMedium, stats.allMedium));
104-
log.info(prettyLine('Hard', stats.acHard, stats.allHard));
105-
106-
log.info();
107-
log.info('Without Locked:');
108-
log.info(prettyLine('Easy', statsNoLock.acEasy, statsNoLock.allEasy));
109-
log.info(prettyLine('Medium', statsNoLock.acMedium, statsNoLock.allMedium));
110-
log.info(prettyLine('Hard', statsNoLock.acHard, statsNoLock.allHard));
111-
});
112-
}
11359
}
11460
};
11561

0 commit comments

Comments
 (0)