From 5cd74823aa6493b5b86cef4383366d94f154b412 Mon Sep 17 00:00:00 2001 From: Victor Berchet Date: Fri, 8 Aug 2014 09:31:20 +0200 Subject: [PATCH] feat(OrderBy): allow ordering an Iterable fixes #1324 --- lib/formatter/order_by.dart | 11 +++++------ test/formatter/order_by_spec.dart | 5 +++++ 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/lib/formatter/order_by.dart b/lib/formatter/order_by.dart index 12596e33d..92f087b5d 100644 --- a/lib/formatter/order_by.dart +++ b/lib/formatter/order_by.dart @@ -3,7 +3,7 @@ part of angular.formatter_internal; typedef dynamic _Mapper(dynamic e); /** - * Orders the the elements of a list using a predicate. + * Orders the the elements of an [Iterable] using a predicate. * * # Usage * @@ -15,7 +15,7 @@ typedef dynamic _Mapper(dynamic e); * - **a custom callable expression**: an expression that will be called to transform the element * before a sort. * - **a list**: the list may consist of either strings or callable expressions. A list expression - * indicates a list of fallback expressions to use when a comparision results in the items + * indicates a list of fallback expressions to use when a comparison results in the items * being equal. * * If the expression is explicitly empty(`orderBy:''`), the elements are sorted in @@ -166,10 +166,9 @@ class OrderBy implements Function { * - `expression`: String/Function or Array of String/Function. * - `descending`: When specified, use descending order. (The default is ascending order.) */ - List call(List items, var expression, [bool descending=false]) { - if (items == null) { - return null; - } + List call(Iterable items, var expression, [bool descending=false]) { + if (items == null) return null; + if (items is! List) items = items.toList(); List expressions = null; if (expression is String || expression is _Mapper) { expressions = [expression]; diff --git a/test/formatter/order_by_spec.dart b/test/formatter/order_by_spec.dart index 42ad2ea34..1d56b1835 100644 --- a/test/formatter/order_by_spec.dart +++ b/test/formatter/order_by_spec.dart @@ -54,6 +54,11 @@ main() { expect(parse('list | orderBy:"-"').eval(scope.context, formatters)).toEqual([3, 2, 1]); }); + it('should sort Iterables', (Scope scope, Parser parse, FormatterMap formatters) { + scope.context['iterable'] = [1, 3, 2].map((x) => x); + expect(parse('iterable | orderBy:""').eval(scope.context, formatters)).toEqual([1, 2, 3]); + }); + it('should sort by expression', (Scope scope, Parser parse, FormatterMap formatters) { expect(parse('authors | orderBy:"firstName"').eval(scope.context, formatters)).toEqual([ Emily___Bronte,