Skip to content

Commit dc8aaea

Browse files
committed
finace: ensure supplyDefaults is idempotent
1 parent d61afb9 commit dc8aaea

File tree

4 files changed

+38
-7
lines changed

4 files changed

+38
-7
lines changed

src/traces/candlestick/defaults.js

+1-3
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,12 @@ var helpers = require('../ohlc/helpers');
1515
var attributes = require('./attributes');
1616

1717
module.exports = function supplyDefaults(traceIn, traceOut) {
18+
helpers.pushDummyTransformOpts(traceIn, traceOut);
1819

1920
function coerce(attr, dflt) {
2021
return Lib.coerce(traceIn, traceOut, attributes, attr, dflt);
2122
}
2223

23-
var transformOpts = { type: 'candlestick' };
24-
helpers.prependTransformOpts(traceIn, traceOut, transformOpts);
25-
2624
var len = handleOHLC(traceIn, traceOut, coerce);
2725
if(len === 0) {
2826
traceOut.visible = false;

src/traces/ohlc/defaults.js

+1-3
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,12 @@ var attributes = require('./attributes');
1515
var helpers = require('./helpers');
1616

1717
module.exports = function supplyDefaults(traceIn, traceOut) {
18+
helpers.pushDummyTransformOpts(traceIn, traceOut);
1819

1920
function coerce(attr, dflt) {
2021
return Lib.coerce(traceIn, traceOut, attributes, attr, dflt);
2122
}
2223

23-
var transformOpts = { type: 'ohlc' };
24-
helpers.prependTransformOpts(traceIn, traceOut, transformOpts);
25-
2624
var len = handleOHLC(traceIn, traceOut, coerce);
2725
if(len === 0) {
2826
traceOut.visible = false;

src/traces/ohlc/helpers.js

+16-1
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,23 @@
1212
var Lib = require('../../lib');
1313

1414
// TODO add comment
15-
exports.prependTransformOpts = function(traceIn, traceOut, transformOpts) {
15+
exports.pushDummyTransformOpts = function(traceIn, traceOut) {
16+
var transformOpts = {
17+
18+
// give dummy transform the same type as trace
19+
type: traceOut.type,
20+
21+
// track ephemeral transforms in user data
22+
_ephemeral: true
23+
};
24+
1625
if(Array.isArray(traceIn.transforms)) {
26+
var transformsIn = traceIn.transforms;
27+
28+
for(var i = 0; i < transformsIn.length; i++) {
29+
if(transformsIn[i]._ephemeral) transformsIn.splice(i, 1);
30+
}
31+
1732
traceIn.transforms.push(transformOpts);
1833
}
1934
else {

test/jasmine/tests/finance_test.js

+20
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,26 @@ describe('finance charts defaults:', function() {
5454
expect(directions).toEqual(['increasing', 'decreasing', 'increasing', 'decreasing']);
5555
});
5656

57+
it('unfortunately mutates user trace', function() {
58+
var trace0 = Lib.extendDeep({}, mock0, {
59+
type: 'ohlc'
60+
});
61+
62+
var trace1 = Lib.extendDeep({}, mock1, {
63+
type: 'candlestick'
64+
});
65+
66+
var out = _supply([trace0, trace1]);
67+
expect(out.data[0].transforms).toEqual([{ type: 'ohlc', _ephemeral: true }]);
68+
expect(out.data[1].transforms).toEqual([{ type: 'candlestick', _ephemeral: true }]);
69+
70+
// but at least in an idempotent way
71+
72+
var out2 = _supply(out.data);
73+
expect(out2.data[0].transforms).toEqual([{ type: 'ohlc', _ephemeral: true }]);
74+
expect(out2.data[1].transforms).toEqual([{ type: 'candlestick', _ephemeral: true }]);
75+
});
76+
5777
it('should work with transforms', function() {
5878
var trace0 = Lib.extendDeep({}, mock1, {
5979
type: 'ohlc',

0 commit comments

Comments
 (0)