]> git.r.bdr.sh - rbdr/blog/blobdiff - bin/blog.js
✨📝🔧 Add generator bin and files
[rbdr/blog] / bin / blog.js
diff --git a/bin/blog.js b/bin/blog.js
new file mode 100755 (executable)
index 0000000..c88a8aa
--- /dev/null
@@ -0,0 +1,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();