ADD export script

This commit is contained in:
salomonelli 2017-06-09 22:26:23 +02:00
parent cdb7753a23
commit 44e7a2e14e
8 changed files with 55 additions and 33 deletions

View File

@ -1,26 +1,55 @@
/* eslint-disable */
const fs = require('fs'); const fs = require('fs');
const path = require('path'); const path = require('path');
const exec = require('child_process').exec; const exec = require('child_process').exec;
const Rx = require('rxjs/Rx');
const http = require('http');
/** const fetchResponse = () => {
* converts resumes to pdf return new Promise((res, rej) => {
* @return {Promise} try {
*/ const req = http.request('http://localhost:8080/#/', response => res(response.statusCode));
const convert = () => { req.on('error', (err) => rej(err));
req.end();
} catch (err) {
rej(err);
}
});
};
const waitForServerReachable = () => {
return Rx.Observable
.interval(1000)
.mergeMap(async() => {
try {
const statusCode = await fetchResponse();
if (statusCode === 200) return true;
} catch (err) {}
return false;
})
.filter(ok => !!ok);
};
const timedOut = timeout => {
return new Promise(res => {
setTimeout(res, timeout);
});
};
const convert = async() => {
await waitForServerReachable().first().toPromise();
console.log('Connected to server ...');
console.log('Exporting ...');
try { try {
const directories = getResumesFromDirectories(); const directories = getResumesFromDirectories();
const scripts = directories.map(resume => electroshotScript(resume.path)); const scripts = directories.map(resume => electroshotScript(resume.path));
execBash(scripts.join(' && ')); await execBash(scripts.join(' && '));
} catch (err) { } catch (err) {
throw new Error(err); throw new Error(err);
} }
console.log('Finished exports.');
}; };
/**
* generates electroshot command for screenshoting resume
* @param {string} resume resume name in URL
* @return {string} electroshot command
*/
const electroshotScript = resume => { const electroshotScript = resume => {
const dir = path.join(__dirname, '../pdf'); const dir = path.join(__dirname, '../pdf');
return 'electroshot localhost:8080/#/resume/' + resume + return 'electroshot localhost:8080/#/resume/' + resume +
@ -28,39 +57,26 @@ const electroshotScript = resume => {
' --filename "' + resume + '.pdf" --pdf-background'; ' --filename "' + resume + '.pdf" --pdf-background';
}; };
/**
* gets resumes names and paths from directories
* @return {Object[]} array with resumes object {path: '', name: ''}
*/
const getResumesFromDirectories = () => { const getResumesFromDirectories = () => {
const directories = getDirectories(); const directories = getDirectories();
return directories return directories
.filter(dir => dir.includes('resume-') && dir !== 'resume-XX') .filter(dir => dir.includes('resume-') && dir !== 'resume-XX')
.map(dir => { .map(dir => {
let name = dir.replace('resume-', ''); let name = dir.replace('resume-', '');
let fileName = dir.replace('.vue', ''); let fileName = dir.replace('.vue', '');
return { return {
path: fileName.replace('resume-', ''), path: fileName.replace('resume-', ''),
name: name.replace('-', ' ') name: name.replace('-', ' ')
}; };
}); });
}; };
/**
* gets directories starting with 'resume-'
* @return {[]}
*/
const getDirectories = () => { const getDirectories = () => {
const srcpath = path.join(__dirname, '../src/components'); const srcpath = path.join(__dirname, '../src/components');
return fs.readdirSync(srcpath) return fs.readdirSync(srcpath)
.filter(file => file.includes('resume-')); .filter(file => file.includes('resume-'));
}; };
/**
* executes command
* @param {string} script e.g. 'echo "Hello World"'
* @return {Promise}
*/
const execBash = script => { const execBash = script => {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
exec(script, exec(script,

View File

@ -8,6 +8,7 @@
"dev": "node build/dev-server.js", "dev": "node build/dev-server.js",
"start": "node build/dev-server.js", "start": "node build/dev-server.js",
"pdf": "node node/app.js", "pdf": "node node/app.js",
"export": "concurrently \"npm run dev\" \"npm run pdf\" --success first --kill-others --raw",
"test": "cross-env BABEL_ENV=test karma start test/karma.conf.js --single-run", "test": "cross-env BABEL_ENV=test karma start test/karma.conf.js --single-run",
"lint": "eslint --ext .js,.vue src test/unit/specs test/e2e/specs" "lint": "eslint --ext .js,.vue src test/unit/specs test/e2e/specs"
}, },
@ -58,6 +59,7 @@
"file-loader": "^0.11.1", "file-loader": "^0.11.1",
"friendly-errors-webpack-plugin": "^1.1.3", "friendly-errors-webpack-plugin": "^1.1.3",
"html-webpack-plugin": "^2.28.0", "html-webpack-plugin": "^2.28.0",
"http": "0.0.0",
"http-proxy-middleware": "^0.17.3", "http-proxy-middleware": "^0.17.3",
"inject-loader": "^3.0.0", "inject-loader": "^3.0.0",
"karma": "^1.4.1", "karma": "^1.4.1",
@ -80,13 +82,17 @@
"phantomjs-prebuilt": "^2.1.14", "phantomjs-prebuilt": "^2.1.14",
"postcss": "^6.0.1", "postcss": "^6.0.1",
"postcss-cssnext": "^2.11.0", "postcss-cssnext": "^2.11.0",
"request": "^2.81.0",
"request-promise": "^4.2.1", "request-promise": "^4.2.1",
"rimraf": "^2.6.0", "rimraf": "^2.6.0",
"rx": "^4.1.0",
"rxjs": "^5.4.0",
"selenium-server": "^3.0.1", "selenium-server": "^3.0.1",
"semver": "^5.3.0", "semver": "^5.3.0",
"shelljs": "^0.7.6", "shelljs": "^0.7.6",
"sinon": "^2.1.0", "sinon": "^2.1.0",
"sinon-chai": "^2.8.0", "sinon-chai": "^2.8.0",
"url-exists": "^1.0.3",
"url-loader": "^0.5.8", "url-loader": "^0.5.8",
"vue-loader": "^11.3.4", "vue-loader": "^11.3.4",
"vue-style-loader": "^2.0.5", "vue-style-loader": "^2.0.5",

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.