parseJSON( rep, opts ) {

    let scrubbed;
    if (opts && opts.privatize) {
      // Ignore any element with the 'ignore: true' or 'private: true' designator.
      const scrubber = require('../utils/resume-scrubber');
      var ret = scrubber.scrubResume(rep, opts);
      scrubbed = ret.scrubbed;
    }

    // Now apply the resume representation onto this object
    extend(true, this, opts && opts.privatize ? scrubbed : rep);

    // If the resume has already been processed, then we are being called from
    // the .dupe method, and there's no need to do any post processing
    if (!(this.imp != null ? this.imp.processed : undefined)) {
      // Set up metadata TODO: Clean up metadata on the object model.
      opts = opts || { };
      if ((opts.imp === undefined) || opts.imp) {
        this.imp = this.imp || { };
        this.imp.title = (opts.title || this.imp.title) || this.name;
        if (!this.imp.raw) {
          this.imp.raw = JSON.stringify(rep);
        }
      }
      this.imp.processed = true;
      // Parse dates, sort dates, and calculate computed values
      ((opts.date === undefined) || opts.date) && _parseDates.call( this );
      ((opts.sort === undefined) || opts.sort) && this.sort();
      ((opts.compute === undefined) || opts.compute) && (this.computed = {
         numYears: this.duration(),
         keywords: this.keywords()
      });
    }

    return this;
  }
Initialize the FreshResume from JSON.
  Open and parse the specified FRESH resume. Merge the JSON object model onto
  this Sheet instance with extend() and convert sheet dates to a safe &
  consistent format. Then sort each section by startDate descending.
  @param rep {Object} The raw JSON representation.
  @param opts {Object} Resume loading and parsing options.
  {
    date: Perform safe date conversion.
    sort: Sort resume items by date.
    compute: Prepare computed resume totals.
  }