From 1fa4441b3a44a303b78d7151fadda73c2b1ca8dc Mon Sep 17 00:00:00 2001 From: Alexander Date: Tue, 9 Feb 2016 13:29:41 +0300 Subject: [PATCH] improve either filter --- source/com/kemsky/filters/either.as | 10 ++++++---- source/com/kemsky/support/Compare.as | 8 ++++++++ testSrc/com/kemsky/filters/TestFilters.as | 10 ++++++---- 3 files changed, 20 insertions(+), 8 deletions(-) diff --git a/source/com/kemsky/filters/either.as b/source/com/kemsky/filters/either.as index b9fd631..b4134bc 100644 --- a/source/com/kemsky/filters/either.as +++ b/source/com/kemsky/filters/either.as @@ -8,18 +8,20 @@ package com.kemsky.filters { import com.kemsky.$; import com.kemsky.Stream; + import com.kemsky.support.Compare; import com.kemsky.support.StreamError; import com.kemsky.support.toValue; /** * Creates function that checks if value equals to one of the arguments * @param value item or item property - * @param rest arguments + * @param enumeration arguments (any iterable type supported by stream) + * @param options comparison options * @return function that checks if value equals to one of the arguments */ - public function either(value:*, ...rest):Function + public function either(value:*, enumeration:*, options:uint = 0):Function { - var values:Stream = $.apply(null, rest); + var values:Stream = $(enumeration); if (values.length == 0) { @@ -32,7 +34,7 @@ package com.kemsky.filters var result:Boolean = values.some(function (val2:*):Boolean { - return val == toValue(item, val2); + return Compare.compare(val, toValue(item, val2), options, true) == 0; }); return result; diff --git a/source/com/kemsky/support/Compare.as b/source/com/kemsky/support/Compare.as index 37341ef..1875013 100644 --- a/source/com/kemsky/support/Compare.as +++ b/source/com/kemsky/support/Compare.as @@ -53,6 +53,10 @@ package com.kemsky.support { result = 1; } + else if(a === b) + { + result = 0; + } else { var numeric:Boolean = (options & Stream.NUMERIC) == Stream.NUMERIC; @@ -125,6 +129,10 @@ package com.kemsky.support { return UNDEFINED; } + else if (object is Stream) + { + cls = Stream; + } else if (object != null) { cls = object.constructor; diff --git a/testSrc/com/kemsky/filters/TestFilters.as b/testSrc/com/kemsky/filters/TestFilters.as index 3a57626..5c80e00 100644 --- a/testSrc/com/kemsky/filters/TestFilters.as +++ b/testSrc/com/kemsky/filters/TestFilters.as @@ -5,6 +5,8 @@ package com.kemsky.filters import flash.utils.Dictionary; + import mx.collections.ArrayCollection; + import org.flexunit.asserts.assertEquals; import org.flexunit.asserts.assertFalse; import org.flexunit.asserts.assertTrue; @@ -415,14 +417,14 @@ package com.kemsky.filters public function testEither():void { var s:Stream = $(1, 2, 3); - assertEquals(s.count(either(_, 1, 2)), 2); - assertEquals(s.count(either(_, [1, 2])), 2); - assertEquals(s.count(either(_, [4])), 0); + assertEquals(s.count(either(_, [1, 2])), 2); + assertEquals(s.count(either(_, $(4))), 0); + assertEquals(s.count(either(_, new ArrayCollection([4]))), 0); try { - s.count(either(_)); + s.count(either(_, [])); assertFalse(true); } catch (e:Error)