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

Commit d2780f8

Browse files
mvuksanomhevery
authored andcommitted
feat(formatter): Add arrayify formatter.
MapFormatter can be used with map and ng-repeat to display a list of key value pairs Closes #394 Closes #931
1 parent 474b002 commit d2780f8

File tree

5 files changed

+49
-0
lines changed

5 files changed

+49
-0
lines changed

Diff for: lib/formatter/arrayify.dart

+27
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
part of angular.formatter_internal;
2+
3+
/**
4+
* Given a Map, returns a list of items which have `key` and `value` property.
5+
*
6+
* Usage:
7+
*
8+
* <div ng-repeat="item in {'key1': 'value1', 'key2':'value2'} | arrayify">
9+
* {{item.key}}: {{item.value}}
10+
* </div>
11+
*/
12+
@Formatter(name:'arrayify')
13+
class Arrayify implements Function {
14+
List<_KeyValue> call(Map inputMap) {
15+
if (inputMap == null) return null;
16+
List<_KeyValue> result = [];
17+
inputMap.forEach((k, v) => result.add(new _KeyValue(k, v)));
18+
return result;
19+
}
20+
}
21+
22+
class _KeyValue<K, V> {
23+
K key;
24+
V value;
25+
26+
_KeyValue(this.key, this.value);
27+
}

Diff for: lib/formatter/module.dart

+1
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ export "package:angular/formatter/module_internal.dart" show
2929
Json,
3030
LimitTo,
3131
Lowercase,
32+
Arrayify,
3233
Number,
3334
OrderBy,
3435
Uppercase,

Diff for: lib/formatter/module_internal.dart

+2
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,15 @@ part 'filter.dart';
1313
part 'json.dart';
1414
part 'limit_to.dart';
1515
part 'lowercase.dart';
16+
part 'arrayify.dart';
1617
part 'number.dart';
1718
part 'order_by.dart';
1819
part 'uppercase.dart';
1920
part 'stringify.dart';
2021

2122
class FormatterModule extends Module {
2223
FormatterModule() {
24+
type(Arrayify);
2325
type(Currency);
2426
type(Date);
2527
type(Filter);

Diff for: test/angular_spec.dart

+1
Original file line numberDiff line numberDiff line change
@@ -215,6 +215,7 @@ main() {
215215
"angular.formatter_internal.Json",
216216
"angular.formatter_internal.LimitTo",
217217
"angular.formatter_internal.Lowercase",
218+
"angular.formatter_internal.Arrayify",
218219
"angular.formatter_internal.Number",
219220
"angular.formatter_internal.OrderBy",
220221
"angular.formatter_internal.Stringify",

Diff for: test/formatter/arrayify_spec.dart

+18
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
library map_spec;
2+
3+
import '../_specs.dart';
4+
import 'package:angular/formatter/module.dart';
5+
6+
void main() {
7+
describe('arrayify', () {
8+
it('should convert a map to list of key value pairs', (Parser parse, FormatterMap formatters) {
9+
List result = parse('{"key1": "value1", "key2": "value2"} | arrayify').eval(null, formatters);
10+
expect(result.map((kv) => kv.key)).toEqual(["key1", "key2"]);
11+
expect(result.map((kv) => kv.value)).toEqual(["value1", "value2"]);
12+
});
13+
14+
it('should treat null as noop', (Parser parse, FormatterMap formatters) {
15+
expect(parse('null | arrayify').eval(null, formatters)).toEqual(null);
16+
});
17+
});
18+
}

0 commit comments

Comments
 (0)