docs: function ramp (datasource, column, args) {
    if (args.length === 0) {
      return Promise.reject(
        new TurboCartoError('invalid number of arguments')
      );
    }
  
    /**
     * Overload scenarios to support
     * marker-width: ramp([price], 4, 100);
     * marker-width: ramp([price], 4, 100, method);
     * marker-width: ramp([price], 4, 100, 5, method);
     * marker-width: ramp([price], 4, 100, 3, (100, 200, 1000));
     * marker-width: ramp([price], 4, 100, (100, 150, 250, 200, 1000));
     */
    if (Number.isFinite(args[0])) {
      return compatibilityNumericRamp(datasource, column, args);
    }
  
    /**
     * Overload methods to support
     * marker-fill: ramp([price], colorbrewer(Reds));
     * marker-fill: ramp([price], colorbrewer(Reds), jenks);
     */
    if (!isResult(args[1])) {
      return compatibilityValuesRamp(datasource, column, args);
    }
  
    /**
     * Overload methods to support from here
     * marker-fill: ramp([price], colorbrewer(Reds), (100, 200, 300, 400, 500));
     * marker-fill: ramp([price], colorbrewer(Reds), (100, 200, 300, 400, 500), =);
     * marker-fill: ramp([price], (...values), (...filters), [mapping]);
     */
    var values = args[0];
    var filters = args[1];
    var mapping = args[2];
    var strategy = strategyFromMapping(mapping);
    filters = filters.is(ValuesResult) ? new FiltersResult(filters.get(), strategy) : filters;
    if (filters.is(LazyFiltersResult)) {
      return filters.get(column, strategy).then(createRampFn(values));
    } else {
      return Promise.resolve(filters).then(createRampFn(values));
    }
  }