diff --git a/src/ng/filter.js b/src/ng/filter.js index 5c6ffd0f908e..5620e32bde1e 100644 --- a/src/ng/filter.js +++ b/src/ng/filter.js @@ -79,7 +79,13 @@ function $FilterProvider($provide) { var suffix = 'Filter'; function register(name, factory) { - return $provide.factory(name + suffix, factory); + if(isObject(name)) { + forEach(name, function(filter, key) { + register(key, filter); + }); + } else { + return $provide.factory(name + suffix, factory); + } } this.register = register; diff --git a/test/ng/filterSpec.js b/test/ng/filterSpec.js new file mode 100644 index 000000000000..d30575a35cf5 --- /dev/null +++ b/test/ng/filterSpec.js @@ -0,0 +1,53 @@ +'use strict'; + +describe('$filter', function() { + var $filterProvider, $filter; + + beforeEach(module(function(_$filterProvider_) { + $filterProvider = _$filterProvider_; + })); + + beforeEach(inject(function(_$filter_) { + $filter = _$filter_; + })); + + describe('provider', function() { + it('should allow registration of filters', function() { + var FooFilter = function() { + return function() { + return 'foo'; + } + }; + + $filterProvider.register('foo', FooFilter); + + var fooFilter = $filter('foo'); + expect(fooFilter()).toBe('foo'); + }); + + it('should allow registration of a map of filters', function() { + var FooFilter = function() { + return function() { + return 'foo'; + } + }; + + var BarFilter = function() { + return function() { + return 'bar'; + } + }; + + $filterProvider.register({ + 'foo': FooFilter, + 'bar': BarFilter + }); + + var fooFilter = $filter('foo'); + expect(fooFilter()).toBe('foo'); + + var barFilter = $filter('bar'); + expect(barFilter()).toBe('bar'); + }); + }); +}); \ No newline at end of file