mirror of
				https://github.com/JuanCanham/HackMyResume.git
				synced 2025-10-31 05:07:26 +00:00 
			
		
		
		
	Scrub.
This commit is contained in:
		| @@ -1,11 +1,15 @@ | |||||||
| /** | /** | ||||||
| Definition of the FRESHResume class. | Definition of the FRESHResume class. | ||||||
| @license MIT. Copyright (c) 2015 James Devlin / FluentDesk. | @license MIT. See LICENSE .md for details. | ||||||
| @module fresh-resume.js | @module fresh-resume.js | ||||||
| */ | */ | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| (function() { | (function() { | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|   var FS = require('fs') |   var FS = require('fs') | ||||||
|     , extend = require('../utils/extend') |     , extend = require('../utils/extend') | ||||||
|     , validator = require('is-my-json-valid') |     , validator = require('is-my-json-valid') | ||||||
| @@ -18,14 +22,19 @@ Definition of the FRESHResume class. | |||||||
|     , CONVERTER = require('./convert') |     , CONVERTER = require('./convert') | ||||||
|     , JRSResume = require('./jrs-resume'); |     , JRSResume = require('./jrs-resume'); | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|   /** |   /** | ||||||
|   A FRESH-style resume in JSON or YAML. |   A FRESH resume or CV. FRESH resumes are backed by JSON, and each FreshResume | ||||||
|  |   object is an instantiation of that JSON decorated with utility methods. | ||||||
|   @class FreshResume |   @class FreshResume | ||||||
|   */ |   */ | ||||||
|   function FreshResume() { |   function FreshResume() { | ||||||
|  |  | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|   /** |   /** | ||||||
|   Open and parse the specified FRESH resume sheet. Merge the JSON object model |   Open and parse the specified FRESH resume sheet. Merge the JSON object model | ||||||
|   onto this Sheet instance with extend() and convert sheet dates to a safe & |   onto this Sheet instance with extend() and convert sheet dates to a safe & | ||||||
| @@ -37,6 +46,8 @@ Definition of the FRESHResume class. | |||||||
|     return this.parse( this.imp.raw, title ); |     return this.parse( this.imp.raw, title ); | ||||||
|   }; |   }; | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|   /** |   /** | ||||||
|   Save the sheet to disk (for environments that have disk access). |   Save the sheet to disk (for environments that have disk access). | ||||||
|   */ |   */ | ||||||
| @@ -46,6 +57,8 @@ Definition of the FRESHResume class. | |||||||
|     return this; |     return this; | ||||||
|   }; |   }; | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|   /** |   /** | ||||||
|   Save the sheet to disk in a specific format, either FRESH or JSON Resume. |   Save the sheet to disk in a specific format, either FRESH or JSON Resume. | ||||||
|   */ |   */ | ||||||
| @@ -62,12 +75,19 @@ Definition of the FRESHResume class. | |||||||
|     return this; |     return this; | ||||||
|   }; |   }; | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |   Duplicate this FreshResume instance. | ||||||
|  |   */ | ||||||
|   FreshResume.prototype.dupe = function() { |   FreshResume.prototype.dupe = function() { | ||||||
|     var rnew = new FreshResume(); |     var rnew = new FreshResume(); | ||||||
|     rnew.parse( this.stringify(), { } ); |     rnew.parse( this.stringify(), { } ); | ||||||
|     return rnew; |     return rnew; | ||||||
|   }; |   }; | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|   /** |   /** | ||||||
|   Convert the supplied object to a JSON string, sanitizing meta-properties along |   Convert the supplied object to a JSON string, sanitizing meta-properties along | ||||||
|   the way. |   the way. | ||||||
| @@ -82,6 +102,8 @@ Definition of the FRESHResume class. | |||||||
|     return JSON.stringify( obj, replacer, 2 ); |     return JSON.stringify( obj, replacer, 2 ); | ||||||
|   }; |   }; | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|   /** |   /** | ||||||
|   Create a copy of this resume in which all string fields have been run through |   Create a copy of this resume in which all string fields have been run through | ||||||
|   a transformation function (such as a Markdown filter or XML encoder). |   a transformation function (such as a Markdown filter or XML encoder). | ||||||
| @@ -128,6 +150,8 @@ Definition of the FRESHResume class. | |||||||
|     return ret; |     return ret; | ||||||
|   }; |   }; | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|   /** |   /** | ||||||
|   Create a copy of this resume in which all fields have been interpreted as |   Create a copy of this resume in which all fields have been interpreted as | ||||||
|   Markdown. |   Markdown. | ||||||
| @@ -148,6 +172,8 @@ Definition of the FRESHResume class. | |||||||
|     return this.transformStrings( ['skills','url','start','end','date'], trx ); |     return this.transformStrings( ['skills','url','start','end','date'], trx ); | ||||||
|   }; |   }; | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|   /** |   /** | ||||||
|   Create a copy of this resume in which all fields have been interpreted as |   Create a copy of this resume in which all fields have been interpreted as | ||||||
|   Markdown. |   Markdown. | ||||||
| @@ -161,6 +187,8 @@ Definition of the FRESHResume class. | |||||||
|     return this.transformStrings( [], trx ); |     return this.transformStrings( [], trx ); | ||||||
|   }; |   }; | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|   /** |   /** | ||||||
|   Convert this object to a JSON string, sanitizing meta-properties along the |   Convert this object to a JSON string, sanitizing meta-properties along the | ||||||
|   way. Don't override .toString(). |   way. Don't override .toString(). | ||||||
| @@ -169,6 +197,8 @@ Definition of the FRESHResume class. | |||||||
|     return FreshResume.stringify( this ); |     return FreshResume.stringify( this ); | ||||||
|   }; |   }; | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|   /** |   /** | ||||||
|   Initialize the FreshResume from JSON data. |   Initialize the FreshResume from JSON data. | ||||||
|   Open and parse the specified FRESH resume. Merge the JSON object model onto |   Open and parse the specified FRESH resume. Merge the JSON object model onto | ||||||
| @@ -202,6 +232,8 @@ Definition of the FRESHResume class. | |||||||
|     return this; |     return this; | ||||||
|   }; |   }; | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|   /** |   /** | ||||||
|   Return the resume format. |   Return the resume format. | ||||||
|   */ |   */ | ||||||
| @@ -209,6 +241,8 @@ Definition of the FRESHResume class. | |||||||
|     return 'FRESH'; |     return 'FRESH'; | ||||||
|   }; |   }; | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|   /** |   /** | ||||||
|   Initialize the the FreshResume from string data. |   Initialize the the FreshResume from string data. | ||||||
|   */ |   */ | ||||||
| @@ -216,6 +250,8 @@ Definition of the FRESHResume class. | |||||||
|     return this.parseJSON( JSON.parse( stringData ), opts ); |     return this.parseJSON( JSON.parse( stringData ), opts ); | ||||||
|   }; |   }; | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|   /** |   /** | ||||||
|   Return internal metadata. Create if it doesn't exist. |   Return internal metadata. Create if it doesn't exist. | ||||||
|   */ |   */ | ||||||
| @@ -224,6 +260,8 @@ Definition of the FRESHResume class. | |||||||
|     return this.imp; |     return this.imp; | ||||||
|   }; |   }; | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|   /** |   /** | ||||||
|   Return a unique list of all keywords across all skills. |   Return a unique list of all keywords across all skills. | ||||||
|   */ |   */ | ||||||
| @@ -235,13 +273,17 @@ Definition of the FRESHResume class. | |||||||
|           .reduce(function(a,b) { return a.concat(b); }); |           .reduce(function(a,b) { return a.concat(b); }); | ||||||
|       } |       } | ||||||
|       else if( this.skills.list ) { |       else if( this.skills.list ) { | ||||||
|         flatSkills = flatSkills.concat( this.skills.list.map(function(sk) { return sk.name;  }) ); |         flatSkills = flatSkills.concat( this.skills.list.map(function(sk) { | ||||||
|  |           return sk.name; | ||||||
|  |         })); | ||||||
|       } |       } | ||||||
|       flatSkills = _.uniq( flatSkills ); |       flatSkills = _.uniq( flatSkills ); | ||||||
|     } |     } | ||||||
|     return flatSkills; |     return flatSkills; | ||||||
|   }, |   }, | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|   /** |   /** | ||||||
|   Reset the sheet to an empty state. |   Reset the sheet to an empty state. | ||||||
|   */ |   */ | ||||||
| @@ -260,6 +302,8 @@ Definition of the FRESHResume class. | |||||||
|     delete this.social; |     delete this.social; | ||||||
|   }; |   }; | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|   /** |   /** | ||||||
|   Get a safe count of the number of things in a section. |   Get a safe count of the number of things in a section. | ||||||
|   */ |   */ | ||||||
| @@ -270,6 +314,8 @@ Definition of the FRESHResume class. | |||||||
|     return obj.length || 0; |     return obj.length || 0; | ||||||
|   }; |   }; | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|   /** |   /** | ||||||
|   Get the default (empty) sheet. |   Get the default (empty) sheet. | ||||||
|   */ |   */ | ||||||
| @@ -277,6 +323,8 @@ Definition of the FRESHResume class. | |||||||
|     return new FreshResume().parseJSON( require('fresh-resume-empty')  ); |     return new FreshResume().parseJSON( require('fresh-resume-empty')  ); | ||||||
|   }; |   }; | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|   /** |   /** | ||||||
|   Add work experience to the sheet. |   Add work experience to the sheet. | ||||||
|   */ |   */ | ||||||
| @@ -297,6 +345,7 @@ Definition of the FRESHResume class. | |||||||
|     return newObject; |     return newObject; | ||||||
|   }; |   }; | ||||||
|  |  | ||||||
|  |  | ||||||
|   /** |   /** | ||||||
|   Determine if the sheet includes a specific social profile (eg, GitHub). |   Determine if the sheet includes a specific social profile (eg, GitHub). | ||||||
|   */ |   */ | ||||||
| @@ -307,6 +356,8 @@ Definition of the FRESHResume class. | |||||||
|     }); |     }); | ||||||
|   }; |   }; | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|   /** |   /** | ||||||
|   Return the specified network profile. |   Return the specified network profile. | ||||||
|   */ |   */ | ||||||
| @@ -317,6 +368,8 @@ Definition of the FRESHResume class. | |||||||
|     }); |     }); | ||||||
|   }; |   }; | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|   /** |   /** | ||||||
|   Return an array of profiles for the specified network, for when the user |   Return an array of profiles for the specified network, for when the user | ||||||
|   has multiple eg. GitHub accounts. |   has multiple eg. GitHub accounts. | ||||||
| @@ -328,6 +381,8 @@ Definition of the FRESHResume class. | |||||||
|     }); |     }); | ||||||
|   }; |   }; | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|   /** |   /** | ||||||
|   Determine if the sheet includes a specific skill. |   Determine if the sheet includes a specific skill. | ||||||
|   */ |   */ | ||||||
| @@ -340,6 +395,8 @@ Definition of the FRESHResume class. | |||||||
|     }); |     }); | ||||||
|   }; |   }; | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|   /** |   /** | ||||||
|   Validate the sheet against the FRESH Resume schema. |   Validate the sheet against the FRESH Resume schema. | ||||||
|   */ |   */ | ||||||
| @@ -357,6 +414,8 @@ Definition of the FRESHResume class. | |||||||
|     return ret; |     return ret; | ||||||
|   }; |   }; | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|   /** |   /** | ||||||
|   Calculate the total duration of the sheet. Assumes this.work has been sorted |   Calculate the total duration of the sheet. Assumes this.work has been sorted | ||||||
|   by start date descending, perhaps via a call to Sheet.sort(). |   by start date descending, perhaps via a call to Sheet.sort(). | ||||||
| @@ -382,6 +441,8 @@ Definition of the FRESHResume class. | |||||||
|     return 0; |     return 0; | ||||||
|   }; |   }; | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|   /** |   /** | ||||||
|   Sort dated things on the sheet by start date descending. Assumes that dates |   Sort dated things on the sheet by start date descending. Assumes that dates | ||||||
|   on the sheet have been processed with _parseDates(). |   on the sheet have been processed with _parseDates(). | ||||||
| @@ -414,11 +475,10 @@ Definition of the FRESHResume class. | |||||||
|       return( a.safe.date.isBefore(b.safe.date) ) ? 1 |       return( a.safe.date.isBefore(b.safe.date) ) ? 1 | ||||||
|         : ( a.safe.date.isAfter(b.safe.date) && -1 ) || 0; |         : ( a.safe.date.isAfter(b.safe.date) && -1 ) || 0; | ||||||
|     }); |     }); | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|   }; |   }; | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|   /** |   /** | ||||||
|   Convert human-friendly dates into formal Moment.js dates for all collections. |   Convert human-friendly dates into formal Moment.js dates for all collections. | ||||||
|   We don't want to lose the raw textual date as entered by the user, so we store |   We don't want to lose the raw textual date as entered by the user, so we store | ||||||
| @@ -464,11 +524,15 @@ Definition of the FRESHResume class. | |||||||
|  |  | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|   /** |   /** | ||||||
|   Export the Sheet function/ctor. |   Export the Sheet function/ctor. | ||||||
|   */ |   */ | ||||||
|   module.exports = FreshResume; |   module.exports = FreshResume; | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| }()); | }()); | ||||||
|  |  | ||||||
| // Note 1: Adjust default date validation to allow YYYY and YYYY-MM formats | // Note 1: Adjust default date validation to allow YYYY and YYYY-MM formats | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user