Add getFormat for aggType

This commit is contained in:
Rashid Khan 2015-05-06 15:40:31 -07:00
parent e4d570d2f5
commit a5449701c3
5 changed files with 86 additions and 6 deletions

View file

@ -2,6 +2,7 @@ define(function (require) {
return function AggTypeFactory(Private) {
var _ = require('lodash');
var AggParams = Private(require('components/agg_types/_agg_params'));
var fieldFormats = Private(require('registry/field_formats'));
/**
* Generic AggType Constructor
@ -116,8 +117,25 @@ define(function (require) {
* is created, giving the agg type a chance to modify the agg config
*/
this.decorateAggConfig = config.decorateAggConfig || null;
if (config.getFormat) {
this.getFormat = config.getFormat;
}
}
/**
* Pick a format for the values produced by this agg type,
* overriden by several metrics that always output a simple
* number
*
* @param {agg} agg - the agg to pick a format for
* @return {FieldFromat}
*/
AggType.prototype.getFormat = function (agg) {
var field = agg.field();
return field ? field.format : fieldFormats.getDefaultInstance('number');
};
return AggType;
};
});

View file

@ -6,13 +6,24 @@ define(function (require) {
return function DateRangeAggDefinition(Private, config) {
var BucketAggType = Private(require('components/agg_types/buckets/_bucket_agg_type'));
var createFilter = Private(require('components/agg_types/buckets/create_filter/date_range'));
var fieldFormats = Private(require('registry/field_formats'));
return new BucketAggType({
name: 'date_range',
title: 'Date Range',
createFilter: createFilter,
getKey: function (bucket) {
return dateRange.toString(bucket, config.get('dateFormat'));
getKey: function (bucket, key, agg) {
var formatter;
if (agg.field()) {
formatter = agg.field().format.getConverterFor('text');
} else {
formatter = fieldFormats.getDefaultInstance('date').getConverterFor('text');
}
return dateRange.toString(bucket, formatter);
},
getFormat: function () {
return fieldFormats.getDefaultInstance('string');
},
makeLabel: function (aggConfig) {
return aggConfig.params.field.displayName + ' date ranges';

View file

@ -255,7 +255,7 @@ define(function (require) {
};
AggConfig.prototype.getKey = function (bucket, key) {
return this.type.getKey(bucket, key);
return this.type.getKey(bucket, key, this);
};
AggConfig.prototype.makeLabel = function () {

View file

@ -4,11 +4,11 @@ define(function (require) {
return {
toString: function (range, format) {
if (!range.from) {
return 'Before ' + moment(range.to).format(format);
return 'Before ' + format(range.to);
} else if (!range.to) {
return 'After ' + moment(range.from).format(format);
return 'After ' + format(range.from);
} else {
return moment(range.from).format(format) + ' to ' + moment(range.to).format(format);
return format(range.from) + ' to ' + format(range.to);
}
},
parse: function (rangeString, format) {

View file

@ -4,6 +4,10 @@ define(function (require) {
var sinon = require('test_utils/auto_release_sinon');
var AggType;
var AggParams;
var AggConfig;
var indexPattern;
var fieldFormat;
var Vis;
require('services/private');
@ -13,7 +17,11 @@ define(function (require) {
AggParams = sinon.spy(Private(AggParamsPM));
Private.stub(AggParamsPM, AggParams);
Vis = Private(require('components/vis/vis'));
fieldFormat = Private(require('registry/field_formats'));
AggType = Private(require('components/agg_types/_agg_type'));
AggConfig = Private(require('components/vis/_agg_config'));
indexPattern = Private(require('fixtures/stubbed_logstash_index_pattern'));
}));
describe('constructor', function () {
@ -65,6 +73,49 @@ define(function (require) {
});
});
describe('getFormat', function () {
it('returns the formatter for the aggConfig', function () {
var aggType = new AggType({});
var vis = new Vis(indexPattern, {
type: 'histogram',
aggs: [
{
type: 'date_histogram',
schema: 'segment'
}
]
});
var aggConfig = vis.aggs.byTypeName.date_histogram[0];
expect(aggType.getFormat(aggConfig)).to.be(fieldFormat.getDefaultInstance('date'));
vis = new Vis(indexPattern, {
type: 'metric',
aggs: [
{
type: 'count',
schema: 'metric'
}
]
});
aggConfig = vis.aggs.byTypeName.count[0];
expect(aggType.getFormat(aggConfig)).to.be(fieldFormat.getDefaultInstance('number'));
});
it('can be overridden via config', function () {
var someGetter = function () {};
var aggType = new AggType({
getFormat: someGetter
});
expect(aggType.getFormat).to.be(someGetter);
});
});
describe('params', function () {
it('defaults to AggParams object with JSON param', function () {
var aggType = new AggType({