resume/node/app.js
2017-06-06 22:25:54 +02:00

75 lines
1.8 KiB
JavaScript
Executable File

const fs = require('fs');
const path = require('path');
const exec = require('child_process').exec;
/**
* converts resumes to pdf
* @return {Promise}
*/
const convert = () => {
try {
const directories = getResumesFromDirectories();
const scripts = directories.map(resume => electroshotScript(resume.path));
execBash(scripts.join(' && '));
} catch (err) {
throw new Error(err);
}
};
/**
* generates electroshot command for screenshoting resume
* @param {string} resume resume name in URL
* @return {string} electroshot command
*/
const electroshotScript = resume => {
const dir = path.join(__dirname, '../pdf');
return 'electroshot localhost:8080/#/resume/' + resume +
' 2481x3508 --pdf-margin none --format pdf --out ' + dir +
' --filename "' + resume + '.pdf" --pdf-background';
};
/**
* gets resumes names and paths from directories
* @return {Object[]} array with resumes object {path: '', name: ''}
*/
const getResumesFromDirectories = () => {
const directories = getDirectories();
return directories
.filter(dir => dir.includes('resume-') && dir !== 'resume-XX')
.map(dir => {
let name = dir.replace('resume-', '');
let fileName = dir.replace('.vue', '');
return {
path: fileName.replace('resume-', ''),
name: name.replace('-', ' ')
};
});
};
/**
* gets directories starting with 'resume-'
* @return {[]}
*/
const getDirectories = () => {
const srcpath = path.join(__dirname, '../src/components');
return fs.readdirSync(srcpath)
.filter(file => file.includes('resume-'));
};
/**
* executes command
* @param {string} script e.g. 'echo "Hello World"'
* @return {Promise}
*/
const execBash = script => {
return new Promise((resolve, reject) => {
exec(script,
error => {
if (error) reject(error);
else resolve();
});
});
};
convert();