code: function(name, dimensions) {
        name = name || '';
        name = name.replace(/^\s*/, '');
        name = name.replace(/\s*$/, '');
        if (name.length === 0) {
          throw 'A name for the custom event must be provided';
        }
  
        _.each(dimensions, function(val, key) {
          if (!_.isString(key) || !_.isString(val)) {
            throw 'track() dimensions expects keys and values of type "string".';
          }
        });
  
        return Parse._request({
          route: 'events',
          className: name,
          method: 'POST',
          data: { dimensions: dimensions }
        });
      }
docs: Tracks the occurrence of a custom event with additional dimensions.
  Parse will store a data point at the time of invocation with the given
  event name.
  
  Dimensions will allow segmentation of the occurrences of this custom
  event. Keys and values should be {@code String}s, and will throw
  otherwise.
  
  To track a user signup along with additional metadata, consider the
  following:
  <pre>
  var dimensions = {
  gender: 'm',
  source: 'web',
  dayType: 'weekend'
  };
  Parse.Analytics.track('signup', dimensions);
  </pre>
  
  There is a default limit of 4 dimensions per event tracked.
  
  @param {String} name The name of the custom event to report to Parse as
  having happened.
  @param {Object} dimensions The dictionary of information by which to
  segment this event.
  @return {Parse.Promise} A promise that is resolved when the round-trip
  to the server completes.