mirror of
				https://github.com/JuanCanham/HackMyResume.git
				synced 2025-11-04 06:47:27 +00:00 
			
		
		
		
	Support NEW command.
This commit is contained in:
		@@ -52,6 +52,15 @@ it when you need to submit, upload, print, or email resumes in specific formats.
 | 
			
		||||
    fluentcv BUILD r1.json r2.json TO out/rez.html out/rez.md foo/rez.all
 | 
			
		||||
    ```
 | 
			
		||||
 | 
			
		||||
- `new` creates a new resume in FRESH or JSON Resume format.
 | 
			
		||||
 | 
			
		||||
    ```bash
 | 
			
		||||
    # fluentcv NEW <OUTPUTS> [-f <FORMAT>]
 | 
			
		||||
    fluentcv NEW resume.json
 | 
			
		||||
    fluentcv NEW resume.json -f fresh
 | 
			
		||||
    fluentcv NEW r1.json r2.json -f jrs
 | 
			
		||||
    ```
 | 
			
		||||
 | 
			
		||||
- `convert` converts your source resume between FRESH and JSON Resume formats.
 | 
			
		||||
Use it to convert between the two formats to take advantage of tools and services.
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										182
									
								
								src/core/empty-fresh.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										182
									
								
								src/core/empty-fresh.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,182 @@
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
  "name": "",
 | 
			
		||||
 | 
			
		||||
  "meta": {
 | 
			
		||||
    "format": "FRESH@0.1.0",
 | 
			
		||||
    "version": "0.1.0"
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  "info": {
 | 
			
		||||
    "label": "",
 | 
			
		||||
    "characterClass": "",
 | 
			
		||||
    "brief": "",
 | 
			
		||||
    "image": ""
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  "contact": {
 | 
			
		||||
    "website": "",
 | 
			
		||||
    "phone": "",
 | 
			
		||||
    "email": "",
 | 
			
		||||
    "other": []
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  "location": {
 | 
			
		||||
    "address": "",
 | 
			
		||||
    "city": "",
 | 
			
		||||
    "region": "",
 | 
			
		||||
    "code": "",
 | 
			
		||||
    "country": ""
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  "social": [
 | 
			
		||||
    {
 | 
			
		||||
      "label": "",
 | 
			
		||||
      "network": "",
 | 
			
		||||
      "user": "",
 | 
			
		||||
      "url": ""
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
 | 
			
		||||
  "employment": {
 | 
			
		||||
    "summary": "",
 | 
			
		||||
    "history": [
 | 
			
		||||
      {
 | 
			
		||||
        "employer": "",
 | 
			
		||||
        "url": "",
 | 
			
		||||
        "position": "",
 | 
			
		||||
        "summary": "",
 | 
			
		||||
        "start": "",
 | 
			
		||||
        "keywords": [],
 | 
			
		||||
        "highlights": []
 | 
			
		||||
      }
 | 
			
		||||
    ]
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  "education": {
 | 
			
		||||
    "summary": "",
 | 
			
		||||
    "level": "",
 | 
			
		||||
    "degree": "",
 | 
			
		||||
    "history": [
 | 
			
		||||
      {
 | 
			
		||||
        "institution": "",
 | 
			
		||||
        "url": "",
 | 
			
		||||
        "start": "",
 | 
			
		||||
        "end": "",
 | 
			
		||||
        "grade": "",
 | 
			
		||||
        "summary": "",
 | 
			
		||||
        "curriculum": []
 | 
			
		||||
      }
 | 
			
		||||
    ]
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  "service": {
 | 
			
		||||
    "summary": "",
 | 
			
		||||
    "history": [
 | 
			
		||||
      {
 | 
			
		||||
        "flavor": "",
 | 
			
		||||
        "position": "",
 | 
			
		||||
        "organization": "",
 | 
			
		||||
        "url": "",
 | 
			
		||||
        "start": "",
 | 
			
		||||
        "end": "",
 | 
			
		||||
        "summary": "",
 | 
			
		||||
        "highlights": []
 | 
			
		||||
      }
 | 
			
		||||
    ]
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  "skills": {
 | 
			
		||||
 | 
			
		||||
    "sets": [
 | 
			
		||||
      {
 | 
			
		||||
        "name": "",
 | 
			
		||||
        "skills": []
 | 
			
		||||
      }
 | 
			
		||||
    ],
 | 
			
		||||
 | 
			
		||||
    "list": [ ]
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  "samples": [
 | 
			
		||||
    {
 | 
			
		||||
      "title": "",
 | 
			
		||||
      "summary": "",
 | 
			
		||||
      "url": "",
 | 
			
		||||
      "date": ""
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
 | 
			
		||||
  "writing": [
 | 
			
		||||
    {
 | 
			
		||||
      "title": "",
 | 
			
		||||
      "flavor": "",
 | 
			
		||||
      "date": "",
 | 
			
		||||
      "publisher": {
 | 
			
		||||
        "name": "",
 | 
			
		||||
        "url": ""
 | 
			
		||||
      },
 | 
			
		||||
      "url": ""
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
 | 
			
		||||
  "reading": [
 | 
			
		||||
    {
 | 
			
		||||
      "title": "",
 | 
			
		||||
      "flavor": "",
 | 
			
		||||
      "url": "",
 | 
			
		||||
      "author": ""
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
 | 
			
		||||
  "recognition": [
 | 
			
		||||
    {
 | 
			
		||||
      "flavor": "",
 | 
			
		||||
      "from": "",
 | 
			
		||||
      "title": "",
 | 
			
		||||
      "event": "",
 | 
			
		||||
      "date": "",
 | 
			
		||||
      "summary": ""
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
 | 
			
		||||
  "references": [
 | 
			
		||||
    {
 | 
			
		||||
      "name": "",
 | 
			
		||||
      "flavor": "",
 | 
			
		||||
      "private": true,
 | 
			
		||||
      "contact": [
 | 
			
		||||
        {
 | 
			
		||||
          "label": "",
 | 
			
		||||
          "flavor": "",
 | 
			
		||||
          "value": ""
 | 
			
		||||
        }
 | 
			
		||||
      ]
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
 | 
			
		||||
  "testimonials": [
 | 
			
		||||
    {
 | 
			
		||||
      "name": "",
 | 
			
		||||
      "flavor": "",
 | 
			
		||||
      "quote": ""
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
 | 
			
		||||
  "languages": [
 | 
			
		||||
    {
 | 
			
		||||
      "language": "",
 | 
			
		||||
      "level": "",
 | 
			
		||||
      "years": 0
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
 | 
			
		||||
  "interests": [
 | 
			
		||||
    {
 | 
			
		||||
      "name": "",
 | 
			
		||||
      "summary": "",
 | 
			
		||||
      "keywords": []
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@@ -143,9 +143,10 @@ Definition of the FRESHResume class.
 | 
			
		||||
    delete this.employment;
 | 
			
		||||
    delete this.service;
 | 
			
		||||
    delete this.education;
 | 
			
		||||
    //delete this.awards;
 | 
			
		||||
    delete this.publications;
 | 
			
		||||
    //delete this.interests;
 | 
			
		||||
    delete this.recognition;
 | 
			
		||||
    delete this.reading;
 | 
			
		||||
    delete this.writing;
 | 
			
		||||
    delete this.interests;
 | 
			
		||||
    delete this.skills;
 | 
			
		||||
    delete this.social;
 | 
			
		||||
  };
 | 
			
		||||
@@ -154,7 +155,7 @@ Definition of the FRESHResume class.
 | 
			
		||||
  Get the default (empty) sheet.
 | 
			
		||||
  */
 | 
			
		||||
  FreshResume.default = function() {
 | 
			
		||||
    return new FreshResume().open( PATH.join( __dirname, 'empty.json'), 'Empty' );
 | 
			
		||||
    return new FreshResume().open( PATH.join( __dirname, 'empty-fresh.json'), 'Empty' );
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
@@ -243,7 +244,7 @@ Definition of the FRESHResume class.
 | 
			
		||||
    //   return( a.safeDate.isBefore(b.safeDate) ) ? 1
 | 
			
		||||
    //     : ( a.safeDate.isAfter(b.safeDate) && -1 ) || 0;
 | 
			
		||||
    // });
 | 
			
		||||
    this.publications && this.publications.sort( function(a, b) {
 | 
			
		||||
    this.writing && this.writing.sort( function(a, b) {
 | 
			
		||||
      return( a.safe.date.isBefore(b.safe.date) ) ? 1
 | 
			
		||||
        : ( a.safe.date.isAfter(b.safe.date) && -1 ) || 0;
 | 
			
		||||
    });
 | 
			
		||||
 
 | 
			
		||||
@@ -50,7 +50,7 @@ Definition of the JRSResume class.
 | 
			
		||||
  */
 | 
			
		||||
  JRSResume.prototype.stringify = function() {
 | 
			
		||||
    function replacer( key,value ) { // Exclude these keys from stringification
 | 
			
		||||
      return _.some(['meta', 'warnings', 'computed', 'filt', 'ctrl', 'index',
 | 
			
		||||
      return _.some(['imp', 'warnings', 'computed', 'filt', 'ctrl', 'index',
 | 
			
		||||
        'safeStartDate', 'safeEndDate', 'safeDate', 'safeReleaseDate', 'result',
 | 
			
		||||
      'isModified', 'htmlPreview', 'display_progress_bar'],
 | 
			
		||||
        function( val ) { return key.trim() === val; }
 | 
			
		||||
@@ -126,7 +126,7 @@ Definition of the JRSResume class.
 | 
			
		||||
  Get the default (empty) sheet.
 | 
			
		||||
  */
 | 
			
		||||
  JRSResume.default = function() {
 | 
			
		||||
    return new JRSResume().open( PATH.join( __dirname, 'empty.json'), 'Empty' );
 | 
			
		||||
    return new JRSResume().open( PATH.join( __dirname, 'empty-jrs.json'), 'Empty' );
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
 
 | 
			
		||||
@@ -104,7 +104,7 @@ module.exports = function () {
 | 
			
		||||
 | 
			
		||||
      var theFormat = _fmts.filter(
 | 
			
		||||
        function( fmt ) { return fmt.name === fi.fmt.pre; })[0];
 | 
			
		||||
      MKDIRP.sync( path.dirname(fOut) ); // Ensure dest folder exists;
 | 
			
		||||
      MKDIRP.sync( path.dirname( fOut ) ); // Ensure dest folder exists;
 | 
			
		||||
      theFormat.gen.generate( rez, fOut, _opts );
 | 
			
		||||
    }
 | 
			
		||||
    catch( ex ) {
 | 
			
		||||
@@ -227,6 +227,20 @@ module.exports = function () {
 | 
			
		||||
    });
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
  Create a new empty resume in either FRESH or JRS format.
 | 
			
		||||
  */
 | 
			
		||||
  function create( src, dst, opts, logger ) {
 | 
			
		||||
    _log = logger || console.log;
 | 
			
		||||
    dst = src || ['resume.json'];
 | 
			
		||||
    dst.forEach( function( t ) {
 | 
			
		||||
      var safeFormat = opts.format.toUpperCase();
 | 
			
		||||
      _log('Creating '.useful +safeFormat.useful.bold+ ' resume: '.useful + t.useful.bold);
 | 
			
		||||
      MKDIRP.sync( path.dirname( t ) ); // Ensure dest folder exists;
 | 
			
		||||
      FLUENT[ safeFormat + 'Resume' ].default().save( t );
 | 
			
		||||
    });
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
  Display help documentation.
 | 
			
		||||
  */
 | 
			
		||||
@@ -275,6 +289,7 @@ module.exports = function () {
 | 
			
		||||
      build: generate,
 | 
			
		||||
      validate: validate,
 | 
			
		||||
      convert: convert,
 | 
			
		||||
      new: create,
 | 
			
		||||
      help: help
 | 
			
		||||
    },
 | 
			
		||||
    lib: require('./fluentlib'),
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										12
									
								
								src/index.js
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								src/index.js
									
									
									
									
									
								
							@@ -59,17 +59,14 @@ function main() {
 | 
			
		||||
  var splitAt = _.indexOf( params, 'to' );
 | 
			
		||||
  if( splitAt === a._.length - 1 ) {
 | 
			
		||||
    // 'TO' cannot be the last argument
 | 
			
		||||
    logMsg('Please '.warn + 'specify an output file'.warnBold +
 | 
			
		||||
      ' for this operation or '.warn + 'omit the TO keyword'.warnBold + '.'.warn );
 | 
			
		||||
    logMsg('Please '.warn + 'specify an output file'.warn.bold +
 | 
			
		||||
      ' for this operation or '.warn + 'omit the TO keyword'.warn.bold +
 | 
			
		||||
      '.'.warn );
 | 
			
		||||
    return;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  var src = a._.slice(1, splitAt === -1 ? undefined : splitAt );
 | 
			
		||||
  var dst = splitAt === -1 ? [] : a._.slice( splitAt + 1 );
 | 
			
		||||
 | 
			
		||||
  // Preload our params array
 | 
			
		||||
  //var dst = (a.o && ((typeof a.o === 'string' && [ a.o ]) || a.o)) || [];
 | 
			
		||||
  //dst = (dst === true) ? [] : dst; // Handle -o with missing output file
 | 
			
		||||
  var parms = [ src, dst, opts, logMsg ];
 | 
			
		||||
 | 
			
		||||
  // Invoke the action
 | 
			
		||||
@@ -86,6 +83,7 @@ function getOpts( args ) {
 | 
			
		||||
  noPretty = noPretty && (noPretty === true || noPretty === 'true');
 | 
			
		||||
  return {
 | 
			
		||||
    theme: args.t || 'modern',
 | 
			
		||||
    format: args.f || 'FRESH',
 | 
			
		||||
    prettify: !noPretty,
 | 
			
		||||
    silent: args.s || args.silent
 | 
			
		||||
  };
 | 
			
		||||
@@ -105,7 +103,7 @@ function handleError( ex ) {
 | 
			
		||||
        Object.keys( FCMD.verbs ).map( function(v, idx, ar) {
 | 
			
		||||
          return (idx === ar.length - 1 ? 'or '.guide : '')
 | 
			
		||||
            + v.toUpperCase().guide;
 | 
			
		||||
        }).join(', '.guide) + ") to get started.\n\n".guide + FS.readFileSync( PATH.join(__dirname, 'use.txt'), 'utf8' ).info.bold;
 | 
			
		||||
        }).join(', '.guide) + ").\n\n".guide + FS.readFileSync( PATH.join(__dirname, 'use.txt'), 'utf8' ).info.bold;
 | 
			
		||||
        break;
 | 
			
		||||
      //case 4: msg = title + '\n' + ; break;
 | 
			
		||||
      case 5: msg = 'Please '.guide + 'specify the output resume file'.guide.bold + ' that should be created in the new format.'.guide; break;
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										12
									
								
								src/use.txt
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								src/use.txt
									
									
									
									
									
								
							@@ -2,21 +2,23 @@ Usage:
 | 
			
		||||
 | 
			
		||||
    fluentcv <COMMAND> <SOURCES> [TO <TARGETS>] [-t <THEME>]
 | 
			
		||||
 | 
			
		||||
<COMMAND> should be BUILD, CONVERT, VALIDATE, or HELP. <SOURCES> should
 | 
			
		||||
<COMMAND> should be BUILD, NEW, CONVERT, VALIDATE, or HELP. <SOURCES> should
 | 
			
		||||
be the path to one or more FRESH or JSON Resume format resumes. <TARGETS>
 | 
			
		||||
should be the name of the destination resume to be created, if any. The
 | 
			
		||||
<THEME> parameter should be the name of a predefined theme (for example:
 | 
			
		||||
COMPACT, MINIMIST, MODERN, or HELLO-WORLD) or the relative path to a
 | 
			
		||||
custom theme.
 | 
			
		||||
COMPACT, MINIMIST, MODERN, or HELLO-WORLD) or the relative path to a custom
 | 
			
		||||
theme.
 | 
			
		||||
 | 
			
		||||
    fluentcv BUILD resume.json TO out/resume.all
 | 
			
		||||
    fluentcv NEW resume.json
 | 
			
		||||
    fluentcv CONVERT resume.json TO resume-jrs.json
 | 
			
		||||
    fluentcv VALIDATE resume.json
 | 
			
		||||
 | 
			
		||||
Both SOURCES and TARGETS can accept multiple files:
 | 
			
		||||
 | 
			
		||||
    fluentCV BUILD r1.json r2.json TO out/resume.all out2/resume.html
 | 
			
		||||
    fluentCV NEW r1.json r2.json r3.json
 | 
			
		||||
    fluentCV VALIDATE resume.json resume2.json resume3.json
 | 
			
		||||
 | 
			
		||||
See https://github.com/fluentdesk/fluentCV/blob/master/README.md
 | 
			
		||||
for more information.
 | 
			
		||||
See https://github.com/fluentdesk/fluentCV/blob/master/README.md for more
 | 
			
		||||
information.
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user