blob: c88a8aae14739dfdb618f92eda2cde33d710284a (
plain)
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
|
#!/usr/bin/env node
'use strict';
const Config = require('../config/config');
const Blog = require('..');
const Minimist = require('minimist');
const internals = {
blog: new Blog(Config),
expectedKeys: ['add', 'update', 'publish'],
// Application entry point. Reads arguments and calls the
// corresponding method from the blog lib
async main() {
try {
const parsedArguments = this._parseArguments();
for (const argument in parsedArguments) {
if (parsedArguments.hasOwnProperty(argument)) {
const value = parsedArguments[argument];
if (argument === 'add') {
await internals.blog.add(value);
return;
}
if (argument === 'update') {
await internals.blog.update(value);
return;
}
if (argument === 'publish') {
await internals.blog.update(value);
return;
}
}
}
console.log('Not yet implemented');
}
catch (err) {
console.error(err.message || err);
this._printUsage();
process.exit(1);
}
},
// Parses arguments and returns them if valid. otherwise Throws
_parseArguments() {
const parsedArguments = Minimist(process.argv.slice(2));
if (!this._areArgumentsValid(parsedArguments)) {
throw new Error(internals.strings.invalidArguments);
}
return parsedArguments;
},
// Checks if the arguments are valid, returns a boolean value.
_areArgumentsValid(parsedArguments) {
const argumentKeys = Object.keys(parsedArguments);
return argumentKeys.some((key) => internals.expectedKeys.indexOf(key) >= 0);
},
// Prints the usage to stderr
_printUsage() {
console.error('\nUsage:\n');
console.error('blog --add path/to/blog_post\t\t(creates new blog post)');
console.error('blog --update path/to/blog_post\t(updates latest blog post)');
console.error('blog --publish \t\t\t(publishes the blog)');
}
};
// Add the strings, added after declaration so they can consume the
// internals object.
internals.strings = {
invalidArguments: `Invalid Arguments, expecting one of: ${internals.expectedKeys.join(', ')}`
};
internals.main();
|