Skip to content

Instantly share code, notes, and snippets.

@jayfresh
Last active August 31, 2021 16:29
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jayfresh/11822b6a6e56c09feb0609dd61b6645f to your computer and use it in GitHub Desktop.
Save jayfresh/11822b6a6e56c09feb0609dd61b6645f to your computer and use it in GitHub Desktop.
Extracts people's reviews from CharlieHR company.xml export, saves as TSV
var fs = require('fs'),
xml2js = require('xml2js');
var parser = new xml2js.Parser();
fs.readFile(__dirname + '/company.xml', function(err, data) {
parser.parseString(data, function (err, result) {
var team = result.company['team-members'][0]['team-member'];
var lines = [];
team.forEach(member => {
// create a line for each review, with the email as the first column
var reviews = member.reviews[0].review;
if (!reviews) return;
var reviewLines = reviews.map(review => [
member.email[0],
...Object.keys(review).map(key => {
var item = review[key][0];
// for the review Q&A, condense them into one field
if (key === 'reviewee-answers' || key === 'reviewer-answers') {
// the answers are in a property like 'reviewee-answer'
// so chop the 's' off the end of the key
item = item[key.slice(0, key.length - 1)];
if (!item) {
return key + '';
}
item = item.map(q => {
var question = q['baked-review-question'][0].content[0];
var answer = q.content[0];
return `${question} // ${safeEscapeChars(answer) || 'n/a'}`;
}).join(' // ');
}
return key + ': ' + (safeEscapeChars(item) || 'n/a');
})
].join('\t'));
lines = lines.concat(reviewLines);
});
fs.writeFile(__dirname + '/output.tsv', lines.join('\n'), function(err) {
if (err) console.error(err);
console.log(`OK: ${lines.length}`);
});
});
});
function safeEscapeChars(item) {
return item
&& item.replace
&& item.replace(/\t/g,'\\t').replace(/\r?\n/g, '\\n');
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment