Skip to content
This repository has been archived by the owner on Feb 22, 2018. It is now read-only.

Commit

Permalink
fix(Filter): Add support for maps
Browse files Browse the repository at this point in the history
closes #715
  • Loading branch information
vicb committed Mar 13, 2014
1 parent 26cba06 commit b32beec
Show file tree
Hide file tree
Showing 2 changed files with 51 additions and 5 deletions.
2 changes: 2 additions & 0 deletions lib/core/scope.dart
Expand Up @@ -1009,6 +1009,8 @@ class _FilterWrapper extends FunctionApply {
if (!identical(value, lastValue)) {
if (value is CollectionChangeRecord) {
args[i] = (value as CollectionChangeRecord).iterable;
} else if (value is MapChangeRecord) {
args[i] = (value as MapChangeRecord).map;
} else {
args[i] = value;
}
Expand Down
54 changes: 49 additions & 5 deletions test/core/scope_spec.dart
Expand Up @@ -19,7 +19,9 @@ void main() {
..type(_MultiplyFilter)
..type(_ListHeadFilter)
..type(_ListTailFilter)
..type(_SortFilter);
..type(_SortFilter)
..type(_IdentityFilter)
..type(_MapKeys);
}));

describe('AST Bridge', () {
Expand Down Expand Up @@ -204,6 +206,29 @@ void main() {
expect(logger).toEqual(['sort']);
logger.clear();
}));

iit('should support maps in filters', inject((Logger logger, Map context,
RootScope rootScope,
AstParser parser,
FilterMap filters) {
context['a'] = {'foo': 'bar'};
rootScope.watch(
parser('a | identity | keys', filters: filters),
(value, previous) => logger(value));
rootScope.digest();
expect(logger).toEqual(['identity', 'keys', ['foo']]);
logger.clear();

rootScope.digest();
expect(logger).toEqual([]);
logger.clear();

context['a']['bar'] = 'baz';
rootScope.digest();
expect(logger).toEqual(['identity', 'keys', ['foo', 'bar']]);
logger.clear();
}));

});


Expand Down Expand Up @@ -1435,6 +1460,26 @@ void main() {
});
}

@NgFilter(name: 'identity')
class _IdentityFilter {
Logger logger;
_IdentityFilter(this.logger);
call(v) {
logger('identity');
return v;
}
}

@NgFilter(name: 'keys')
class _MapKeys {
Logger logger;
_MapKeys(this.logger);
call(Map m) {
logger('keys');
return m.keys;
}
}

@NgFilter(name: 'multiply')
class _MultiplyFilter {
call(a, b) => a * b;
Expand All @@ -1443,18 +1488,17 @@ class _MultiplyFilter {
@NgFilter(name: 'listHead')
class _ListHeadFilter {
Logger logger;
_ListHeadFilter(Logger this.logger);
_ListHeadFilter(this.logger);
call(list, head) {
logger('listHead');
return [head]..addAll(list);
}
}


@NgFilter(name: 'listTail')
class _ListTailFilter {
Logger logger;
_ListTailFilter(Logger this.logger);
_ListTailFilter(this.logger);
call(list, tail) {
logger('listTail');
return new List.from(list)..add(tail);
Expand All @@ -1464,7 +1508,7 @@ class _ListTailFilter {
@NgFilter(name: 'sort')
class _SortFilter {
Logger logger;
_SortFilter(Logger this.logger);
_SortFilter(this.logger);
call(list) {
logger('sort');
return new List.from(list)..sort();
Expand Down

0 comments on commit b32beec

Please sign in to comment.