Mercurial > hg > thermostat-ng > web-client
changeset 124:5745b0703d35
Rework filters module
Filters now register themselves directly on the filters module,
rather than the filters module iterating over the filesystem and
registering the filters on their behalf.
Reviewed-by: almac
Review-thread: http://icedtea.classpath.org/pipermail/thermostat/2017-July/024083.html
author | Andrew Azores <aazores@redhat.com> |
---|---|
date | Wed, 12 Jul 2017 10:33:54 -0400 |
parents | f1079500a01f |
children | 44578f20a2d8 |
files | src/app/shared/filters/big-int-to-string.filter.js src/app/shared/filters/extract-class.filter.js src/app/shared/filters/filters.module.js src/app/shared/filters/metric-to-big-int.filter.js src/app/shared/filters/metric-to-big-int.filter.spec.js src/app/shared/filters/metric-to-number.filter.js src/app/shared/filters/metric-to-number.filter.spec.js src/app/shared/filters/string-to-number.filter.js src/app/shared/filters/timestamp-to-date.filter.js src/app/shared/filters/timestamp-to-date.filter.spec.js src/app/shared/filters/unix-to-date.filter.js src/app/shared/filters/unix-to-date.filter.spec.js |
diffstat | 12 files changed, 96 insertions(+), 73 deletions(-) [+] |
line wrap: on
line diff
--- a/src/app/shared/filters/big-int-to-string.filter.js Wed Jul 12 09:30:38 2017 -0400 +++ b/src/app/shared/filters/big-int-to-string.filter.js Wed Jul 12 10:33:54 2017 -0400 @@ -25,13 +25,16 @@ * exception statement from your version. */ -export default function filterProvider () { +import filterModule from './filters.module.js'; + +function filterProvider () { return val => { val = val || 0; return val.toFixed(); }; } -const filterName = 'bigIntToString'; - -export { filterName }; +export default angular + .module(filterModule) + .filter('bigIntToString', filterProvider) + .name;
--- a/src/app/shared/filters/extract-class.filter.js Wed Jul 12 09:30:38 2017 -0400 +++ b/src/app/shared/filters/extract-class.filter.js Wed Jul 12 10:33:54 2017 -0400 @@ -25,11 +25,14 @@ * exception statement from your version. */ -export default function filterProvider (extractClassService) { +import filterModule from './filters.module.js'; + +function filterProvider (extractClassService) { 'ngInject'; return extractClassService.extract; } -const filterName = 'extractClass'; - -export { filterName }; +export default angular + .module(filterModule) + .filter('extractClass', filterProvider) + .name;
--- a/src/app/shared/filters/filters.module.js Wed Jul 12 09:30:38 2017 -0400 +++ b/src/app/shared/filters/filters.module.js Wed Jul 12 10:33:54 2017 -0400 @@ -25,12 +25,11 @@ * exception statement from your version. */ -let mod = angular.module('app.filters', ['app.services']); +import servicesModule from 'shared/services/services.module.js'; + +export default angular + .module('app.filters', [servicesModule]) + .name; let req = require.context('./', true, /\.filter\.js/); -req.keys().map(v => { - let f = req(v); - mod.filter(f.filterName, f.default); -}); - -export default mod.name; +req.keys().map(req);
--- a/src/app/shared/filters/metric-to-big-int.filter.js Wed Jul 12 09:30:38 2017 -0400 +++ b/src/app/shared/filters/metric-to-big-int.filter.js Wed Jul 12 10:33:54 2017 -0400 @@ -25,7 +25,9 @@ * exception statement from your version. */ -export default function filterProvider (metricToBigIntService) { +import filterModule from './filters.module.js'; + +function filterProvider (metricToBigIntService) { 'ngInject'; return (val, scale = 1) => { // in case the filter is invoked on asynchronously loaded data and @@ -42,6 +44,7 @@ }; } -const filterName = 'metricToBigInt'; - -export { filterName }; +export default angular + .module(filterModule) + .filter('metricToBigInt', filterProvider) + .name;
--- a/src/app/shared/filters/metric-to-big-int.filter.spec.js Wed Jul 12 09:30:38 2017 -0400 +++ b/src/app/shared/filters/metric-to-big-int.filter.spec.js Wed Jul 12 10:33:54 2017 -0400 @@ -29,13 +29,14 @@ describe('metricToBigInt filter', () => { - beforeEach(angular.mock.module('app.filters')); - let fn; - beforeEach(angular.mock.inject(metricToBigIntFilter => { - 'ngInject'; - fn = metricToBigIntFilter; - })); + beforeEach(() => { + angular.mock.module('app.filters'); + angular.mock.inject(metricToBigIntFilter => { + 'ngInject'; + fn = metricToBigIntFilter; + }); + }); it('should return the inner $numberLong property value', () => { fn({ $numberLong: '100' }).should.deepEqual(big('100'));
--- a/src/app/shared/filters/metric-to-number.filter.js Wed Jul 12 09:30:38 2017 -0400 +++ b/src/app/shared/filters/metric-to-number.filter.js Wed Jul 12 10:33:54 2017 -0400 @@ -25,7 +25,9 @@ * exception statement from your version. */ -export default function filterProvider ( +import filterModule from './filters.module.js'; + +function filterProvider ( metricToBigIntFilter, bigIntToStringFilter, stringToNumberFilter) { 'ngInject'; return (metric, scale = 1) => { @@ -35,6 +37,7 @@ } } -const filterName = 'metricToNumber'; - -export { filterName }; +export default angular + .module(filterModule) + .filter('metricToNumber', filterProvider) + .name;
--- a/src/app/shared/filters/metric-to-number.filter.spec.js Wed Jul 12 09:30:38 2017 -0400 +++ b/src/app/shared/filters/metric-to-number.filter.spec.js Wed Jul 12 10:33:54 2017 -0400 @@ -25,21 +25,25 @@ * exception statement from your version. */ -import metricToNumberProvider from './metric-to-number.filter.js'; -import { filterName } from './metric-to-number.filter.js'; - -describe('metricToString filter', () => { +describe('metricToNumber filter', () => { let metricToBigIntStub = sinon.stub().returns('a'); let bigIntToStringStub = sinon.stub().returns('b'); let stringToNumberStub = sinon.stub().returns('c'); - let fn = metricToNumberProvider(metricToBigIntStub, bigIntToStringStub, stringToNumberStub); + let fn; - it('should be exported', () => { - should.exist(metricToNumberProvider); - }); + beforeEach(() => { + angular.mock.module('app.filters'); + angular.mock.module('app.filters', $provide => { + 'ngInject'; + $provide.value('metricToBigIntFilter', metricToBigIntStub); + $provide.value('bigIntToStringFilter', bigIntToStringStub); + $provide.value('stringToNumberFilter', stringToNumberStub); + }); - it('should name itself', () => { - filterName.should.equal('metricToNumber'); + angular.mock.inject(metricToNumberFilter => { + 'ngInject'; + fn = metricToNumberFilter; + }); }); it ('should recognize one parameter and apply default', () => {
--- a/src/app/shared/filters/string-to-number.filter.js Wed Jul 12 09:30:38 2017 -0400 +++ b/src/app/shared/filters/string-to-number.filter.js Wed Jul 12 10:33:54 2017 -0400 @@ -25,10 +25,13 @@ * exception statement from your version. */ -export default function filterProvider () { +import filterModule from './filters.module.js'; + +function filterProvider () { return val => parseInt(val); } -const filterName = 'stringToNumber'; - -export { filterName }; +export default angular + .module(filterModule) + .filter('stringToNumber', filterProvider) + .name;
--- a/src/app/shared/filters/timestamp-to-date.filter.js Wed Jul 12 09:30:38 2017 -0400 +++ b/src/app/shared/filters/timestamp-to-date.filter.js Wed Jul 12 10:33:54 2017 -0400 @@ -25,7 +25,9 @@ * exception statement from your version. */ -export default function filterProvider ( +import filterModule from './filters.module.js'; + +function filterProvider ( metricToBigIntFilter, bigIntToStringFilter, stringToNumberFilter, unixToDateFilter) { 'ngInject'; @@ -37,7 +39,7 @@ }; } -const filterName = 'timeStampToDate'; - -export { filterName }; - +export default angular + .module(filterModule) + .filter('timeStampToDate', filterProvider) + .name;
--- a/src/app/shared/filters/timestamp-to-date.filter.spec.js Wed Jul 12 09:30:38 2017 -0400 +++ b/src/app/shared/filters/timestamp-to-date.filter.spec.js Wed Jul 12 10:33:54 2017 -0400 @@ -25,27 +25,30 @@ * exception statement from your version. */ -import timeStampToDateProvider from './timestamp-to-date.filter.js'; -import { filterName } from './timestamp-to-date.filter.js'; - describe('timeStampToDate filter', () => { let metricToBigIntStub = sinon.stub().returns('a'); let bigIntToStringStub = sinon.stub().returns('b'); let stringToNumberStub = sinon.stub().returns('c'); let unixToDateStub = sinon.stub().returns('Dec 31, 1969 7:00 PM'); + let fn; - it('should be exported', () => { - should.exist(timeStampToDateProvider); - }); + beforeEach(() => { + angular.mock.module('app.filters'); + angular.mock.module('app.filters', $provide => { + 'ngInject'; + $provide.value('metricToBigIntFilter', metricToBigIntStub); + $provide.value('bigIntToStringFilter', bigIntToStringStub); + $provide.value('stringToNumberFilter', stringToNumberStub); + $provide.value('unixToDateFilter', unixToDateStub); + }); - it('should name itself', () => { - filterName.should.equal('timeStampToDate'); + angular.mock.inject(timeStampToDateFilter => { + 'ngInject'; + fn = timeStampToDateFilter; + }); }); it('should follow the pipeline', () => { - let fn = timeStampToDateProvider( - metricToBigIntStub, bigIntToStringStub, stringToNumberStub, unixToDateStub); - let timestamp = 1497624324; fn(timestamp).should.equal('Dec 31, 1969 7:00 PM'); metricToBigIntStub.should.be.calledWith(timestamp);
--- a/src/app/shared/filters/unix-to-date.filter.js Wed Jul 12 09:30:38 2017 -0400 +++ b/src/app/shared/filters/unix-to-date.filter.js Wed Jul 12 10:33:54 2017 -0400 @@ -25,14 +25,18 @@ * exception statement from your version. */ +import filterModule from './filters.module.js'; import moment from 'moment'; -export default function filterProvider (formatter = moment) { +function filterProvider (formatter = moment) { return (timestamp, format = 'lll') => { return formatter(timestamp).format(format); }; } -const filterName = 'unixToDate'; +export {filterProvider}; -export { filterName }; +export default angular + .module(filterModule) + .filter('unixToDate', filterProvider) + .name;
--- a/src/app/shared/filters/unix-to-date.filter.spec.js Wed Jul 12 09:30:38 2017 -0400 +++ b/src/app/shared/filters/unix-to-date.filter.spec.js Wed Jul 12 10:33:54 2017 -0400 @@ -25,30 +25,25 @@ * exception statement from your version. */ -import unixToDateProvider from './unix-to-date.filter.js'; -import { filterName } from './unix-to-date.filter.js'; +import {filterProvider} from './unix-to-date.filter.js'; describe('unixToDate filter', () => { let formatSpy = sinon.spy(); let momentStub = sinon.stub().returns({ format: formatSpy }); it('should be exported', () => { - should.exist(unixToDateProvider); - }); - - it('should name itself', () => { - filterName.should.equal('unixToDate'); + should.exist(filterProvider); }); it('should provide a timestamp formatting function', () => { - let fn = unixToDateProvider(); + let fn = filterProvider(); should.exist(fn); fn.should.be.a.Function(); }); it('should use the provided \'moment\' & format', () => { let timestamp = 450000; - let fn = unixToDateProvider(momentStub); + let fn = filterProvider(momentStub); fn(timestamp); momentStub.should.be.calledWith(timestamp); @@ -57,13 +52,13 @@ it('should accept alternate time formats', () => { let timestamp = 450000; - let fn = unixToDateProvider(momentStub); + let fn = filterProvider(momentStub); fn(timestamp, 'LTS'); formatSpy.should.be.calledWith('LTS'); }); it('should allow caller to supply format', () => { - let fn = unixToDateProvider(momentStub); + let fn = filterProvider(momentStub); fn(100, 'fooFormat'); momentStub.should.be.calledWith(100); formatSpy.should.be.calledWith('fooFormat');