diff --git a/package.json b/package.json index 9167412..469d02b 100644 --- a/package.json +++ b/package.json @@ -52,6 +52,7 @@ "commander": "^2.9.0", "copy": "^0.1.3", "fresca": "~0.4.0", + "fresh-jrs-converter": "^0.1.0", "fresh-resume-starter": "^0.2.0", "fresh-themes": "~0.13.0-beta", "fs-extra": "^0.24.0", diff --git a/src/core/convert.js b/src/core/convert.js deleted file mode 100644 index ffc0350..0000000 --- a/src/core/convert.js +++ /dev/null @@ -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; - } - - - -}()); diff --git a/src/core/fresh-resume.js b/src/core/fresh-resume.js index efbc464..5dc00c1 100644 --- a/src/core/fresh-resume.js +++ b/src/core/fresh-resume.js @@ -19,7 +19,7 @@ Definition of the FRESHResume class. , moment = require('moment') , XML = require('xml-escape') , MD = require('marked') - , CONVERTER = require('./convert') + , CONVERTER = require('fresh-jrs-converter') , JRSResume = require('./jrs-resume'); diff --git a/src/core/jrs-resume.js b/src/core/jrs-resume.js index 6c30550..2ebb48a 100644 --- a/src/core/jrs-resume.js +++ b/src/core/jrs-resume.js @@ -16,7 +16,7 @@ Definition of the JRSResume class. , _ = require('underscore') , PATH = require('path') , MD = require('marked') - , CONVERTER = require('./convert') + , CONVERTER = require('fresh-jrs-converter') , moment = require('moment'); diff --git a/src/core/resume-factory.js b/src/core/resume-factory.js index b5ca938..14924f1 100644 --- a/src/core/resume-factory.js +++ b/src/core/resume-factory.js @@ -13,7 +13,7 @@ Definition of the ResumeFactory class. var FS = require('fs'), HACKMYSTATUS = require('./status-codes'), HME = require('./event-codes'), - ResumeConverter = require('./convert'), + ResumeConverter = require('fresh-jrs-converter'), chalk = require('chalk'), SyntaxErrorEx = require('../utils/syntax-error-ex'), _ = require('underscore'); diff --git a/test/test-converter.js b/test/test-converter.js index 3821d0d..d7c55c1 100644 --- a/test/test-converter.js +++ b/test/test-converter.js @@ -7,7 +7,7 @@ var chai = require('chai') , _ = require('underscore') , FRESHResume = require('../src/core/fresh-resume') , JRSResume = require('../src/core/jrs-resume') - , CONVERTER = require('../src/core/convert') + , CONVERTER = require('fresh-jrs-converter') , FS = require('fs') , MKDIRP = require('mkdirp') , _ = require('underscore');