[ui/public/utils] Delete unused base_object & find_by_param (#52500)

Closes #51854
This commit is contained in:
Alexey Antonov 2019-12-11 10:30:45 +03:00 committed by GitHub
parent 1013271c85
commit 6a8b2a25c8
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 194 additions and 321 deletions

View file

@ -316,6 +316,27 @@ export function StateProvider(Private, $rootScope, $location, stateManagementCon
return this._urlParam;
};
/**
* Returns an object with each property name and value corresponding to the entries in this collection
* excluding fields started from '$', '_' and all methods
*
* @return {object}
*/
State.prototype.toObject = function () {
return _.omit(this, (value, key) => {
return key.charAt(0) === '$' || key.charAt(0) === '_' || _.isFunction(value);
});
};
/** Alias for method 'toObject'
*
* @obsolete Please use 'toObject' method instead
* @return {object}
*/
State.prototype.toJSON = function () {
return this.toObject();
};
return State;
}

View file

@ -1,57 +0,0 @@
/*
* Licensed to Elasticsearch B.V. under one or more contributor
* license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright
* ownership. Elasticsearch B.V. licenses this file to you under
* the Apache License, Version 2.0 (the "License"); you may
* not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import expect from '@kbn/expect';
import ngMock from 'ng_mock';
import '../../private';
import { BaseObject } from '../base_object';
describe('Base Object', function () {
beforeEach(ngMock.module('kibana'));
it('should take an inital set of values', function () {
const baseObject = new BaseObject({ message: 'test' });
expect(baseObject).to.have.property('message', 'test');
});
it('should serialize attributes to RISON', function () {
const baseObject = new BaseObject();
baseObject.message = 'Testing... 1234';
const rison = baseObject.toRISON();
expect(rison).to.equal('(message:\'Testing... 1234\')');
});
it('should not serialize $$attributes to RISON', function () {
const baseObject = new BaseObject();
baseObject.$$attributes = { foo: 'bar' };
baseObject.message = 'Testing... 1234';
const rison = baseObject.toRISON();
expect(rison).to.equal('(message:\'Testing... 1234\')');
});
it('should serialize attributes for JSON', function () {
const baseObject = new BaseObject();
baseObject.message = 'Testing... 1234';
baseObject._private = 'foo';
baseObject.$private = 'stuff';
const json = JSON.stringify(baseObject);
expect(json).to.equal('{"message":"Testing... 1234"}');
});
});

View file

@ -1,175 +0,0 @@
/*
* Licensed to Elasticsearch B.V. under one or more contributor
* license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright
* ownership. Elasticsearch B.V. licenses this file to you under
* the Apache License, Version 2.0 (the "License"); you may
* not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import { SimpleEmitter } from '../simple_emitter';
import expect from '@kbn/expect';
import sinon from 'sinon';
describe('SimpleEmitter class', function () {
let emitter;
beforeEach(function () {
emitter = new SimpleEmitter();
});
it('constructs an event emitter', function () {
expect(emitter).to.have.property('on');
expect(emitter).to.have.property('off');
expect(emitter).to.have.property('emit');
expect(emitter).to.have.property('listenerCount');
expect(emitter).to.have.property('removeAllListeners');
});
describe('#listenerCount', function () {
it('counts all event listeners without any arg', function () {
expect(emitter.listenerCount()).to.be(0);
emitter.on('a', function () {});
expect(emitter.listenerCount()).to.be(1);
emitter.on('b', function () {});
expect(emitter.listenerCount()).to.be(2);
});
it('limits to the event that is passed in', function () {
expect(emitter.listenerCount()).to.be(0);
emitter.on('a', function () {});
expect(emitter.listenerCount('a')).to.be(1);
emitter.on('a', function () {});
expect(emitter.listenerCount('a')).to.be(2);
emitter.on('b', function () {});
expect(emitter.listenerCount('a')).to.be(2);
expect(emitter.listenerCount('b')).to.be(1);
expect(emitter.listenerCount()).to.be(3);
});
});
describe('#on', function () {
it('registers a handler', function () {
const handler = sinon.stub();
emitter.on('a', handler);
expect(emitter.listenerCount('a')).to.be(1);
expect(handler.callCount).to.be(0);
emitter.emit('a');
expect(handler.callCount).to.be(1);
});
it('allows multiple event handlers for the same event', function () {
emitter.on('a', function () {});
emitter.on('a', function () {});
expect(emitter.listenerCount('a')).to.be(2);
});
it('allows the same function to be registered multiple times', function () {
const handler = function () {};
emitter.on('a', handler);
expect(emitter.listenerCount()).to.be(1);
emitter.on('a', handler);
expect(emitter.listenerCount()).to.be(2);
});
});
describe('#off', function () {
it('removes a listener if it was registered', function () {
const handler = sinon.stub();
expect(emitter.listenerCount()).to.be(0);
emitter.on('a', handler);
expect(emitter.listenerCount('a')).to.be(1);
emitter.off('a', handler);
expect(emitter.listenerCount('a')).to.be(0);
});
it('clears all listeners if no handler is passed', function () {
emitter.on('a', function () {});
emitter.on('a', function () {});
expect(emitter.listenerCount()).to.be(2);
emitter.off('a');
expect(emitter.listenerCount()).to.be(0);
});
it('does not mind if the listener is not registered', function () {
emitter.off('a', function () {});
});
it('does not mind if the event has no listeners', function () {
emitter.off('a');
});
});
describe('#emit', function () {
it('calls the handlers in the order they were defined', function () {
let i = 0;
const incr = function () { return ++i; };
const one = sinon.spy(incr);
const two = sinon.spy(incr);
const three = sinon.spy(incr);
const four = sinon.spy(incr);
emitter
.on('a', one)
.on('a', two)
.on('a', three)
.on('a', four)
.emit('a');
expect(one).to.have.property('callCount', 1);
expect(one.returned(1)).to.be.ok();
expect(two).to.have.property('callCount', 1);
expect(two.returned(2)).to.be.ok();
expect(three).to.have.property('callCount', 1);
expect(three.returned(3)).to.be.ok();
expect(four).to.have.property('callCount', 1);
expect(four.returned(4)).to.be.ok();
});
it('always emits the handlers that were initially registered', function () {
const destructive = sinon.spy(function () {
emitter.removeAllListeners();
expect(emitter.listenerCount()).to.be(0);
});
const stub = sinon.stub();
emitter.on('run', destructive).on('run', stub).emit('run');
expect(destructive).to.have.property('callCount', 1);
expect(stub).to.have.property('callCount', 1);
});
it('applies all arguments except the first', function () {
emitter
.on('a', function (a, b, c) {
expect(a).to.be('foo');
expect(b).to.be('bar');
expect(c).to.be('baz');
})
.emit('a', 'foo', 'bar', 'baz');
});
it('uses the SimpleEmitter as the this context', function () {
emitter
.on('a', function () {
expect(this).to.be(emitter);
})
.emit('a');
});
});
});

View file

@ -1,47 +0,0 @@
/*
* Licensed to Elasticsearch B.V. under one or more contributor
* license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright
* ownership. Elasticsearch B.V. licenses this file to you under
* the Apache License, Version 2.0 (the "License"); you may
* not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import angular from 'angular';
import _ from 'lodash';
// @ts-ignore -- awaiting https://github.com/w33ble/rison-node/issues/1
import rison from 'rison-node';
export class BaseObject {
// Set the attributes or default to an empty object
constructor(attributes: Record<string, any> = {}) {
// Set the attributes or default to an empty object
_.assign(this, attributes);
}
public toObject() {
// return just the data.
return _.omit(this, (value: any, key: string) => {
return key.charAt(0) === '$' || key.charAt(0) === '_' || _.isFunction(value);
});
}
public toRISON() {
// Use Angular to remove the private vars, and JSON.stringify to serialize
return rison.encode(JSON.parse(angular.toJson(this)));
}
public toJSON() {
return this.toObject();
}
}

View file

@ -1,38 +0,0 @@
/*
* Licensed to Elasticsearch B.V. under one or more contributor
* license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright
* ownership. Elasticsearch B.V. licenses this file to you under
* the Apache License, Version 2.0 (the "License"); you may
* not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import _ from 'lodash';
interface AnyObject {
[key: string]: any;
}
// given an object or array of objects, return the value of the passed param
// if the param is missing, return undefined
export function findByParam(values: AnyObject | AnyObject[], param: string) {
if (Array.isArray(values)) {
// point series chart
const index = _.findIndex(values, param);
if (index === -1) {
return;
}
return values[index][param];
}
return values[param]; // pie chart
}

View file

@ -18,8 +18,6 @@
*/
import _ from 'lodash';
import { BaseObject } from './base_object';
import { createLegacyClass } from './legacy_class';
/**
* Simple event emitter class used in the vislib. Calls
@ -27,7 +25,6 @@ import { createLegacyClass } from './legacy_class';
*
* @class
*/
createLegacyClass(SimpleEmitter).inherits(BaseObject);
export function SimpleEmitter() {
this._listeners = {};
}
@ -134,4 +131,3 @@ SimpleEmitter.prototype.listenerCount = function (name) {
return count + _.size(handlers);
}, 0);
};

View file

@ -0,0 +1,173 @@
/*
* Licensed to Elasticsearch B.V. under one or more contributor
* license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright
* ownership. Elasticsearch B.V. licenses this file to you under
* the Apache License, Version 2.0 (the "License"); you may
* not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import { SimpleEmitter } from './simple_emitter';
import sinon from 'sinon';
describe('SimpleEmitter class', () => {
let emitter;
beforeEach(() => {
emitter = new SimpleEmitter();
});
it('constructs an event emitter', () => {
expect(emitter).toHaveProperty('on');
expect(emitter).toHaveProperty('off');
expect(emitter).toHaveProperty('emit');
expect(emitter).toHaveProperty('listenerCount');
expect(emitter).toHaveProperty('removeAllListeners');
});
describe('#listenerCount', () => {
it('counts all event listeners without any arg', () => {
expect(emitter.listenerCount()).toBe(0);
emitter.on('a', () => {});
expect(emitter.listenerCount()).toBe(1);
emitter.on('b', () => {});
expect(emitter.listenerCount()).toBe(2);
});
it('limits to the event that is passed in', () => {
expect(emitter.listenerCount()).toBe(0);
emitter.on('a', () => {});
expect(emitter.listenerCount('a')).toBe(1);
emitter.on('a', () => {});
expect(emitter.listenerCount('a')).toBe(2);
emitter.on('b', () => {});
expect(emitter.listenerCount('a')).toBe(2);
expect(emitter.listenerCount('b')).toBe(1);
expect(emitter.listenerCount()).toBe(3);
});
});
describe('#on', () => {
it('registers a handler', () => {
const handler = sinon.stub();
emitter.on('a', handler);
expect(emitter.listenerCount('a')).toBe(1);
expect(handler.callCount).toBe(0);
emitter.emit('a');
expect(handler.callCount).toBe(1);
});
it('allows multiple event handlers for the same event', () => {
emitter.on('a', () => {});
emitter.on('a', () => {});
expect(emitter.listenerCount('a')).toBe(2);
});
it('allows the same function to be registered multiple times', () => {
const handler = () => {};
emitter.on('a', handler);
expect(emitter.listenerCount()).toBe(1);
emitter.on('a', handler);
expect(emitter.listenerCount()).toBe(2);
});
});
describe('#off', () => {
it('removes a listener if it was registered', () => {
const handler = sinon.stub();
expect(emitter.listenerCount()).toBe(0);
emitter.on('a', handler);
expect(emitter.listenerCount('a')).toBe(1);
emitter.off('a', handler);
expect(emitter.listenerCount('a')).toBe(0);
});
it('clears all listeners if no handler is passed', () => {
emitter.on('a', () => {});
emitter.on('a', () => {});
expect(emitter.listenerCount()).toBe(2);
emitter.off('a');
expect(emitter.listenerCount()).toBe(0);
});
it('does not mind if the listener is not registered', () => {
emitter.off('a', () => {});
});
it('does not mind if the event has no listeners', () => {
emitter.off('a');
});
});
describe('#emit', () => {
it('calls the handlers in the order they were defined', () => {
let i = 0;
const incr = () => ++i;
const one = sinon.spy(incr);
const two = sinon.spy(incr);
const three = sinon.spy(incr);
const four = sinon.spy(incr);
emitter
.on('a', one)
.on('a', two)
.on('a', three)
.on('a', four)
.emit('a');
expect(one).toHaveProperty('callCount', 1);
expect(one.returned(1)).toBeDefined();
expect(two).toHaveProperty('callCount', 1);
expect(two.returned(2)).toBeDefined();
expect(three).toHaveProperty('callCount', 1);
expect(three.returned(3)).toBeDefined();
expect(four).toHaveProperty('callCount', 1);
expect(four.returned(4)).toBeDefined();
});
it('always emits the handlers that were initially registered', () => {
const destructive = sinon.spy(() => {
emitter.removeAllListeners();
expect(emitter.listenerCount()).toBe(0);
});
const stub = sinon.stub();
emitter.on('run', destructive).on('run', stub).emit('run');
expect(destructive).toHaveProperty('callCount', 1);
expect(stub).toHaveProperty('callCount', 1);
});
it('applies all arguments except the first', () => {
emitter
.on('a', (a, b, c) => {
expect(a).toBe('foo');
expect(b).toBe('bar');
expect(c).toBe('baz');
})
.emit('a', 'foo', 'bar', 'baz');
});
it('uses the SimpleEmitter as the this context', () => {
emitter
.on('a', function () {
expect(this).toBe(emitter);
})
.emit('a');
});
});
});