lib/classes/Variables.js/Variables/populateProperty
class Variables:  populateProperty(propertyParam, populateInPlace) {
    let property;
    if (populateInPlace) {
      property = propertyParam;
    } else {
      property = _.cloneDeep(propertyParam);
    }
    const allValuesToPopulate = [];

    if (typeof property === 'string' && property.match(this.variableSyntax)) {
      property.match(this.variableSyntax).forEach((matchedString) => {
        const variableString = matchedString
          .replace(this.variableSyntax, (match, varName) => varName.trim())
          .replace(/\s/g, '');

        let singleValueToPopulate = null;
        if (variableString.match(this.overwriteSyntax)) {
          singleValueToPopulate = this.overwrite(variableString);
        } else {
          singleValueToPopulate = this.getValueFromSource(variableString)
            .then(valueToPopulate => {
              if (typeof valueToPopulate === 'object') {
                return this.populateObject(valueToPopulate);
              }
              return valueToPopulate;
            });
        }

        singleValueToPopulate = singleValueToPopulate.then(valueToPopulate => {
          this.warnIfNotFound(variableString, valueToPopulate);
          return this.populateVariable(property, matchedString, valueToPopulate)
            .then(newProperty => {
              property = newProperty;
              return BbPromise.resolve(property);
            });
        });

        allValuesToPopulate.push(singleValueToPopulate);
      });
      return BbPromise.all(allValuesToPopulate).then(() => {
        if (property !== this.service) {
          return this.populateProperty(property);
        }
        return BbPromise.resolve(property);
      });
    }
    // return property;
    return BbPromise.resolve(property);
  }