code: function (params, options) {
          if (!params) { return EMPTY; }
  
          var str,
              encode = options && options.encode,
              ignoreDisabled = options && options.ignoreDisabled;
  
          // Convert hash maps to an array of params
          if (!_.isArray(params) && !PropertyList.isPropertyList(params)) {
              return _.reduce(params, function (result, value, key) {
                  result && (result += AMPERSAND);
                  return result + QueryParam.unparseSingle({ key: key, value: value }, encode);
              }, EMPTY);
          }
  
          // construct a query parameter string from the list, with considerations for disabled values
          str = params.reduce(function (result, param) {
              // If disabled parameters are to be ignored, bail out here
              if (ignoreDisabled && (param.disabled === true)) { return result; }
  
              // If the current unparsed result is non empty, append an ampersand
              result && (result += AMPERSAND);
  
              return result + QueryParam.unparseSingle(param, encode);
          }, EMPTY);
  
          encode && (str = str.replace(REGEX_BRACE_START, BRACE_START).replace(REGEX_BRACE_END, BRACE_END));
  
          return str;
      }
docs: Create a query string from array of parameters (or object of key-values). This function ensures that
  the double braces "{{" and "}}" are not URL-encoded on unparsing, which allows for variable-substitution.
  
  @param {Array|Object} params
  @param {Object=} options
  @param {?Boolean} [options.encode=false] - Enables URL encoding of the parameters
  @param {?Boolean} [options.ignoreDisabled=false] - Removes disabled query parameters when set to true.
  @returns {string}
  
  @deprecated since v3.4.6, drop support for `options.encode`
  
  @todo - remove disabled arg and flatten params (retain back compat)