Skip to content

Commit 773894a

Browse files
committed
feat(MapFormatter): Add MapFormatter.
MapFormatter can be used with repeat decorator to display a list of key value pairs Closes dart-archive#394
1 parent 9622318 commit 773894a

File tree

5 files changed

+46
-0
lines changed

5 files changed

+46
-0
lines changed

lib/formatter/map.dart

+27
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
part of angular.formatter_internal;
2+
3+
/**
4+
* Returns a list of key-value pairs.
5+
*
6+
* Usage:
7+
*
8+
* {{ {'key1': 'value1', 'key2':'value2'} | map }}
9+
*/
10+
@Formatter(name:'map')
11+
class MapFormatter<K, V> implements Function {
12+
List<_KeyValue<K, V>> call(Map<K, V> inputMap) {
13+
if (inputMap == null) return null;
14+
List<_KeyValue<K, V>> result = [];
15+
inputMap.keys.forEach((K k) {
16+
result.add(new _KeyValue(k, inputMap[k]));
17+
});
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+
}

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+
MapFormatter,
3233
Number,
3334
OrderBy,
3435
Uppercase,

lib/formatter/module_internal.dart

+2
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ part 'filter.dart';
1313
part 'json.dart';
1414
part 'limit_to.dart';
1515
part 'lowercase.dart';
16+
part 'map.dart';
1617
part 'number.dart';
1718
part 'order_by.dart';
1819
part 'uppercase.dart';
@@ -26,6 +27,7 @@ class FormatterModule extends Module {
2627
type(Json);
2728
type(LimitTo);
2829
type(Lowercase);
30+
type(MapFormatter);
2931
type(Number);
3032
type(OrderBy);
3133
type(Uppercase);

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.MapFormatter",
218219
"angular.formatter_internal.Number",
219220
"angular.formatter_internal.OrderBy",
220221
"angular.formatter_internal.Stringify",

test/formatter/map_spec.dart

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

0 commit comments

Comments
 (0)