mirror of
https://github.com/JuanCanham/HackMyResume.git
synced 2024-11-22 16:30:11 +00:00
Integrate with fresh-jrs-converter.
Move FRESH/JRS conversion logic (and all future format conversions) into a separate repo.
This commit is contained in:
parent
17f2ebb753
commit
5c95fe7af1
@ -52,6 +52,7 @@
|
|||||||
"commander": "^2.9.0",
|
"commander": "^2.9.0",
|
||||||
"copy": "^0.1.3",
|
"copy": "^0.1.3",
|
||||||
"fresca": "~0.4.0",
|
"fresca": "~0.4.0",
|
||||||
|
"fresh-jrs-converter": "^0.1.0",
|
||||||
"fresh-resume-starter": "^0.2.0",
|
"fresh-resume-starter": "^0.2.0",
|
||||||
"fresh-themes": "~0.13.0-beta",
|
"fresh-themes": "~0.13.0-beta",
|
||||||
"fs-extra": "^0.24.0",
|
"fs-extra": "^0.24.0",
|
||||||
|
@ -1,419 +0,0 @@
|
|||||||
/**
|
|
||||||
FRESH to JSON Resume conversion routiens.
|
|
||||||
@license MIT. See LICENSE.md for details.
|
|
||||||
@module convert.js
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
(function(){ // TODO: refactor everything
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
var _ = require('underscore');
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
Convert between FRESH and JRS resume/CV formats.
|
|
||||||
@class FRESHConverter
|
|
||||||
*/
|
|
||||||
var FRESHConverter = module.exports = {
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
Convert from JSON Resume format to FRESH.
|
|
||||||
@method toFresh
|
|
||||||
@todo Refactor
|
|
||||||
*/
|
|
||||||
toFRESH: function( src, foreign ) {
|
|
||||||
|
|
||||||
foreign = (foreign === undefined || foreign === null) ? true : foreign;
|
|
||||||
|
|
||||||
return {
|
|
||||||
name: src.basics.name,
|
|
||||||
imp: src.basics.imp,
|
|
||||||
info: {
|
|
||||||
label: src.basics.label,
|
|
||||||
class: src.basics.class, // <--> round-trip
|
|
||||||
image: src.basics.picture,
|
|
||||||
brief: src.basics.summary
|
|
||||||
},
|
|
||||||
contact: {
|
|
||||||
email: src.basics.email,
|
|
||||||
phone: src.basics.phone,
|
|
||||||
website: src.basics.website,
|
|
||||||
other: src.basics.other // <--> round-trip
|
|
||||||
},
|
|
||||||
meta: meta( true, src.meta ),
|
|
||||||
location: {
|
|
||||||
city: src.basics.location.city,
|
|
||||||
region: src.basics.location.region,
|
|
||||||
country: src.basics.location.countryCode,
|
|
||||||
code: src.basics.location.postalCode,
|
|
||||||
address: src.basics.location.address
|
|
||||||
},
|
|
||||||
employment: employment( src.work, true ),
|
|
||||||
education: education( src.education, true),
|
|
||||||
service: service( src.volunteer, true),
|
|
||||||
skills: skillsToFRESH( src.skills ),
|
|
||||||
writing: writing( src.publications, true),
|
|
||||||
recognition: recognition( src.awards, true, foreign ),
|
|
||||||
social: social( src.basics.profiles, true ),
|
|
||||||
interests: src.interests,
|
|
||||||
testimonials: references( src.references, true ),
|
|
||||||
languages: src.languages,
|
|
||||||
disposition: src.disposition // <--> round-trip
|
|
||||||
};
|
|
||||||
},
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
Convert from FRESH format to JSON Resume.
|
|
||||||
@param foreign True if non-JSON-Resume properties should be included in
|
|
||||||
the result, false if those properties should be excluded.
|
|
||||||
@todo Refactor
|
|
||||||
*/
|
|
||||||
toJRS: function( src, foreign ) {
|
|
||||||
|
|
||||||
foreign = (foreign === undefined || foreign === null) ? false : foreign;
|
|
||||||
|
|
||||||
return {
|
|
||||||
basics: {
|
|
||||||
name: src.name,
|
|
||||||
label: src.info.label,
|
|
||||||
class: foreign ? src.info.class : undefined,
|
|
||||||
summary: src.info.brief,
|
|
||||||
website: src.contact.website,
|
|
||||||
phone: src.contact.phone,
|
|
||||||
email: src.contact.email,
|
|
||||||
picture: src.info.image,
|
|
||||||
location: {
|
|
||||||
address: src.location.address,
|
|
||||||
postalCode: src.location.code,
|
|
||||||
city: src.location.city,
|
|
||||||
countryCode: src.location.country,
|
|
||||||
region: src.location.region
|
|
||||||
},
|
|
||||||
profiles: social( src.social, false ),
|
|
||||||
imp: src.imp
|
|
||||||
},
|
|
||||||
work: employment( src.employment, false ),
|
|
||||||
education: education( src.education, false ),
|
|
||||||
skills: skillsToJRS( src.skills, false ),
|
|
||||||
volunteer: service( src.service, false ),
|
|
||||||
awards: recognition( src.recognition, false, foreign ),
|
|
||||||
publications: writing( src.writing, false ),
|
|
||||||
interests: src.interests,
|
|
||||||
references: references( src.testimonials, false ),
|
|
||||||
samples: foreign ? src.samples : undefined,
|
|
||||||
disposition: foreign ? src.disposition : undefined,
|
|
||||||
languages: src.languages
|
|
||||||
};
|
|
||||||
|
|
||||||
},
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
toSTRING: function( src ) {
|
|
||||||
function replacerJRS( key,value ) { // Exclude these keys
|
|
||||||
return _.some(['imp', 'warnings', 'computed', 'filt', 'ctrl', 'index',
|
|
||||||
'safeStartDate', 'safeEndDate', 'safeDate', 'safeReleaseDate',
|
|
||||||
'result', 'isModified', 'htmlPreview', 'display_progress_bar'],
|
|
||||||
function( val ) { return key.trim() === val; }
|
|
||||||
) ? undefined : value;
|
|
||||||
}
|
|
||||||
function replacerFRESH( key,value ) { // Exclude these keys
|
|
||||||
return _.some(['imp', 'warnings', 'computed', 'filt', 'ctrl', 'index',
|
|
||||||
'safe', 'result', 'isModified', 'htmlPreview', 'display_progress_bar'],
|
|
||||||
function( val ) { return key.trim() === val; }
|
|
||||||
) ? undefined : value;
|
|
||||||
}
|
|
||||||
|
|
||||||
return JSON.stringify( src, src.basics ? replacerJRS : replacerFRESH, 2 );
|
|
||||||
}
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
function meta( direction, obj ) {
|
|
||||||
//if( !obj ) return obj; // preserve null and undefined
|
|
||||||
if( direction ) {
|
|
||||||
obj = obj || { };
|
|
||||||
obj.format = obj.format || "FRESH@0.1.0";
|
|
||||||
obj.version = obj.version || "0.1.0";
|
|
||||||
}
|
|
||||||
return obj;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
function employment( obj, direction ) {
|
|
||||||
if( !obj ) return obj;
|
|
||||||
if( !direction ) {
|
|
||||||
return obj && obj.history ?
|
|
||||||
obj.history.map(function(emp){
|
|
||||||
return {
|
|
||||||
company: emp.employer,
|
|
||||||
website: emp.url,
|
|
||||||
position: emp.position,
|
|
||||||
startDate: emp.start,
|
|
||||||
endDate: emp.end,
|
|
||||||
summary: emp.summary,
|
|
||||||
highlights: emp.highlights
|
|
||||||
};
|
|
||||||
}) : undefined;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return {
|
|
||||||
history: obj && obj.length ?
|
|
||||||
obj.map( function( job ) {
|
|
||||||
return {
|
|
||||||
position: job.position,
|
|
||||||
employer: job.company,
|
|
||||||
summary: job.summary,
|
|
||||||
current: (!job.endDate || !job.endDate.trim() ||
|
|
||||||
job.endDate.trim().toLowerCase() === 'current') || undefined,
|
|
||||||
start: job.startDate,
|
|
||||||
end: job.endDate,
|
|
||||||
url: job.website,
|
|
||||||
keywords: [],
|
|
||||||
highlights: job.highlights
|
|
||||||
};
|
|
||||||
}) : undefined
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
function education( obj, direction ) {
|
|
||||||
if( !obj ) return obj;
|
|
||||||
if( direction ) {
|
|
||||||
return obj && obj.length ? {
|
|
||||||
level: "",
|
|
||||||
history: obj.map(function(edu){
|
|
||||||
return {
|
|
||||||
institution: edu.institution,
|
|
||||||
start: edu.startDate,
|
|
||||||
end: edu.endDate,
|
|
||||||
grade: edu.gpa,
|
|
||||||
curriculum: edu.courses,
|
|
||||||
url: edu.website || edu.url || undefined,
|
|
||||||
summary: edu.summary || "",
|
|
||||||
area: edu.area,
|
|
||||||
studyType: edu.studyType
|
|
||||||
};
|
|
||||||
})
|
|
||||||
} : undefined;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return obj && obj.history ?
|
|
||||||
obj.history.map(function(edu){
|
|
||||||
return {
|
|
||||||
institution: edu.institution,
|
|
||||||
gpa: edu.grade,
|
|
||||||
courses: edu.curriculum,
|
|
||||||
startDate: edu.start,
|
|
||||||
endDate: edu.end,
|
|
||||||
area: edu.area,
|
|
||||||
studyType: edu.studyType
|
|
||||||
};
|
|
||||||
}) : undefined;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
function service( obj, direction, foreign ) {
|
|
||||||
if( !obj ) return obj;
|
|
||||||
if( direction ) {
|
|
||||||
return {
|
|
||||||
history: obj && obj.length ? obj.map(function(vol) {
|
|
||||||
return {
|
|
||||||
type: 'volunteer',
|
|
||||||
position: vol.position,
|
|
||||||
organization: vol.organization,
|
|
||||||
start: vol.startDate,
|
|
||||||
end: vol.endDate,
|
|
||||||
url: vol.website,
|
|
||||||
summary: vol.summary,
|
|
||||||
highlights: vol.highlights
|
|
||||||
};
|
|
||||||
}) : undefined
|
|
||||||
};
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return obj && obj.history ?
|
|
||||||
obj.history.map(function(srv){
|
|
||||||
return {
|
|
||||||
flavor: foreign ? srv.flavor : undefined,
|
|
||||||
organization: srv.organization,
|
|
||||||
position: srv.position,
|
|
||||||
startDate: srv.start,
|
|
||||||
endDate: srv.end,
|
|
||||||
website: srv.url,
|
|
||||||
summary: srv.summary,
|
|
||||||
highlights: srv.highlights
|
|
||||||
};
|
|
||||||
}) : undefined;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
function social( obj, direction ) {
|
|
||||||
if( !obj ) return obj;
|
|
||||||
if( direction ) {
|
|
||||||
return obj.map(function(pro){
|
|
||||||
return {
|
|
||||||
label: pro.network,
|
|
||||||
network: pro.network,
|
|
||||||
url: pro.url,
|
|
||||||
user: pro.username
|
|
||||||
};
|
|
||||||
});
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return obj.map( function( soc ) {
|
|
||||||
return {
|
|
||||||
network: soc.network,
|
|
||||||
username: soc.user,
|
|
||||||
url: soc.url
|
|
||||||
};
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
function recognition( obj, direction, foreign ) {
|
|
||||||
if( !obj ) return obj;
|
|
||||||
if( direction ) {
|
|
||||||
return obj && obj.length ? obj.map(
|
|
||||||
function(awd){
|
|
||||||
return {
|
|
||||||
flavor: foreign ? awd.flavor : undefined,
|
|
||||||
url: foreign ? awd.url: undefined,
|
|
||||||
title: awd.title,
|
|
||||||
date: awd.date,
|
|
||||||
from: awd.awarder,
|
|
||||||
summary: awd.summary
|
|
||||||
};
|
|
||||||
}) : undefined;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return obj && obj.length ? obj.map(function(awd){
|
|
||||||
return {
|
|
||||||
flavor: foreign ? awd.flavor : undefined,
|
|
||||||
url: foreign ? awd.url: undefined,
|
|
||||||
title: awd.title,
|
|
||||||
date: awd.date,
|
|
||||||
awarder: awd.from,
|
|
||||||
summary: awd.summary
|
|
||||||
};
|
|
||||||
}) : undefined;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
function references( obj, direction ) {
|
|
||||||
if( !obj ) return obj;
|
|
||||||
if( direction ) {
|
|
||||||
return obj && obj.length && obj.map(function(ref){
|
|
||||||
return {
|
|
||||||
name: ref.name,
|
|
||||||
flavor: 'professional',
|
|
||||||
quote: ref.reference,
|
|
||||||
private: false
|
|
||||||
};
|
|
||||||
});
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return obj && obj.length && obj.map(function(ref){
|
|
||||||
return {
|
|
||||||
name: ref.name,
|
|
||||||
reference: ref.quote
|
|
||||||
};
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
function writing( obj, direction ) {
|
|
||||||
if( !obj ) return obj;
|
|
||||||
if( direction ) {
|
|
||||||
return obj.map(function( pub ) {
|
|
||||||
return {
|
|
||||||
title: pub.name,
|
|
||||||
flavor: undefined,
|
|
||||||
publisher: pub.publisher,
|
|
||||||
url: pub.website,
|
|
||||||
date: pub.releaseDate,
|
|
||||||
summary: pub.summary
|
|
||||||
};
|
|
||||||
});
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return obj && obj.length ? obj.map(function(pub){
|
|
||||||
return {
|
|
||||||
name: pub.title,
|
|
||||||
publisher: pub.publisher &&
|
|
||||||
pub.publisher.name ? pub.publisher.name : pub.publisher,
|
|
||||||
releaseDate: pub.date,
|
|
||||||
website: pub.url,
|
|
||||||
summary: pub.summary
|
|
||||||
};
|
|
||||||
}) : undefined;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
function skillsToFRESH( skills ) {
|
|
||||||
if( !skills ) return skills;
|
|
||||||
return {
|
|
||||||
sets: skills.map(function( set ) {
|
|
||||||
return {
|
|
||||||
name: set.name,
|
|
||||||
level: set.level,
|
|
||||||
skills: set.keywords
|
|
||||||
};
|
|
||||||
})
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
function skillsToJRS( skills ) {
|
|
||||||
if( !skills ) return skills;
|
|
||||||
var ret = [];
|
|
||||||
if( skills.sets && skills.sets.length ) {
|
|
||||||
ret = skills.sets.map(function(set){
|
|
||||||
return {
|
|
||||||
name: set.name,
|
|
||||||
level: set.level,
|
|
||||||
keywords: set.skills
|
|
||||||
};
|
|
||||||
});
|
|
||||||
}
|
|
||||||
else if( skills.list ) {
|
|
||||||
ret = skills.list.map(function(sk){
|
|
||||||
return {
|
|
||||||
name: sk.name,
|
|
||||||
level: sk.level,
|
|
||||||
keywords: sk.keywords
|
|
||||||
};
|
|
||||||
});
|
|
||||||
}
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}());
|
|
@ -19,7 +19,7 @@ Definition of the FRESHResume class.
|
|||||||
, moment = require('moment')
|
, moment = require('moment')
|
||||||
, XML = require('xml-escape')
|
, XML = require('xml-escape')
|
||||||
, MD = require('marked')
|
, MD = require('marked')
|
||||||
, CONVERTER = require('./convert')
|
, CONVERTER = require('fresh-jrs-converter')
|
||||||
, JRSResume = require('./jrs-resume');
|
, JRSResume = require('./jrs-resume');
|
||||||
|
|
||||||
|
|
||||||
|
@ -16,7 +16,7 @@ Definition of the JRSResume class.
|
|||||||
, _ = require('underscore')
|
, _ = require('underscore')
|
||||||
, PATH = require('path')
|
, PATH = require('path')
|
||||||
, MD = require('marked')
|
, MD = require('marked')
|
||||||
, CONVERTER = require('./convert')
|
, CONVERTER = require('fresh-jrs-converter')
|
||||||
, moment = require('moment');
|
, moment = require('moment');
|
||||||
|
|
||||||
|
|
||||||
|
@ -13,7 +13,7 @@ Definition of the ResumeFactory class.
|
|||||||
var FS = require('fs'),
|
var FS = require('fs'),
|
||||||
HACKMYSTATUS = require('./status-codes'),
|
HACKMYSTATUS = require('./status-codes'),
|
||||||
HME = require('./event-codes'),
|
HME = require('./event-codes'),
|
||||||
ResumeConverter = require('./convert'),
|
ResumeConverter = require('fresh-jrs-converter'),
|
||||||
chalk = require('chalk'),
|
chalk = require('chalk'),
|
||||||
SyntaxErrorEx = require('../utils/syntax-error-ex'),
|
SyntaxErrorEx = require('../utils/syntax-error-ex'),
|
||||||
_ = require('underscore');
|
_ = require('underscore');
|
||||||
|
@ -7,7 +7,7 @@ var chai = require('chai')
|
|||||||
, _ = require('underscore')
|
, _ = require('underscore')
|
||||||
, FRESHResume = require('../src/core/fresh-resume')
|
, FRESHResume = require('../src/core/fresh-resume')
|
||||||
, JRSResume = require('../src/core/jrs-resume')
|
, JRSResume = require('../src/core/jrs-resume')
|
||||||
, CONVERTER = require('../src/core/convert')
|
, CONVERTER = require('fresh-jrs-converter')
|
||||||
, FS = require('fs')
|
, FS = require('fs')
|
||||||
, MKDIRP = require('mkdirp')
|
, MKDIRP = require('mkdirp')
|
||||||
, _ = require('underscore');
|
, _ = require('underscore');
|
||||||
|
Loading…
Reference in New Issue
Block a user