code: function parseIngredientPath(ingredientPath) {
  	assert(_.isString(ingredientPath), '`ingredientPath` must be a string');
  
  	var split = ingredientPath.split('/');
  
  	var pantry, ingredient;
  	if (Pantry.isValidName(split[0])) {
  		// the pantry name is not scoped
  		pantry = split[0];
  		ingredient = split.slice(1).join('/');
  	} else {
  		// the pantry name is scoped
  		pantry = split.slice(0, 2).join('/');
  		ingredient = split.slice(2).join('/');
  	}
  
  	if (!Pantry.isValidName(pantry) || !Ingredient.isValidName(ingredient)) {
  		return null;
  	}
  
  	return {
  		pantry: pantry,
  		ingredient: ingredient
  	};
  }
docs: @typedef ParsedIngredientPath
  @type Object
  @property {string} pantry - the (possibly namespaced) pantry name
  @property {string} ingredient - the ingredient name
   
  Parse the pantry and ingredient names out of an ingredient path
  
  If passed a valid Roux ingredient path, this function returns an object with
  the pantry and ingredient names. If passed a string that is not a valid path,
  it returns `null`. If passed anything else, it throws an `Error`.
  
  @param {string} ingredientPath - the path to parse
  
  @return {ParsedIngredientPath} - the parsed ingredient path or null