diff --git a/README.md b/README.md index 14f1fef..28d5de0 100644 --- a/README.md +++ b/README.md @@ -118,8 +118,8 @@ var result:Stream = s.filter(function(item:Item):Boolean{ }); // 2. using provided global functions(can compare Boolean, Number, Date, XML, String types) -// supports nested properties i.e. prop("prop.prop.prop") -var result:Stream = s.filter(gt(prop("price"), 1)); +// supports nested properties i.e. member("prop.prop.prop") +var result:Stream = s.filter(gt(member("price"), 1)); // 3. using Proxy magick and global functions var result:Stream = s.price(gt(_, 1)); diff --git a/source/com/kemsky/$.as b/source/com/kemsky/$.as index dee2423..3aeb36b 100644 --- a/source/com/kemsky/$.as +++ b/source/com/kemsky/$.as @@ -48,6 +48,11 @@ package com.kemsky //$ from list return new Stream(arg.toArray()); } + else if(arg == null || arg === undefined) + { + //ignore empty arg + return new Stream(); + } else { //$ from one item diff --git a/source/com/kemsky/Stream.as b/source/com/kemsky/Stream.as index b43e7b9..f48b102 100644 --- a/source/com/kemsky/Stream.as +++ b/source/com/kemsky/Stream.as @@ -300,10 +300,10 @@ package com.kemsky * @example *
          *     var s1:Stream = $(1, 2, 3);
-         *     var s2:Stream = $(1, 2, 3);
+         *     var s2:Stream = $("1", "2", "3");
          *     var z:Stream = s1.zip(s2);
          *     trace(z);
-         *     //Stream{Stream{1, 1}, Stream{2, 2}, Stream{3, 3}}
+         *     //Stream{Stream{1, "1"}, Stream{2, "2"}, Stream{3, "3"}}
          * 
* @return A new list of lists created from the items and their corresponding items from another strea. * @internal immutable @@ -1236,7 +1236,7 @@ package com.kemsky * var item2:Object = {id: 2, key: "key1"}; * var item3:Object = {id: 3, key: "key2"}; * var s:Stream = $(item1, item2, item3); - * var d:Dictionary = s.dictionary(prop("key")); + * var d:Dictionary = s.dictionary(member("key")); * trace(d["key1"]); * //Stream{item1, item2} * trace(d["key2"]); @@ -1313,7 +1313,7 @@ package com.kemsky * var item2:Object = {id: 2, key: "key1"}; * var item3:Object = {id: 3, key: "key2"}; * var s:Stream = $(item1, item2, item3); - * var d:Object = s.object(prop("key")); + * var d:Object = s.object(member("key")); * trace(d["key1"]); * //Stream{item1, item2} * trace(d["key2"]); diff --git a/source/com/kemsky/combine.as b/source/com/kemsky/combine.as index 2fc4f54..50028aa 100644 --- a/source/com/kemsky/combine.as +++ b/source/com/kemsky/combine.as @@ -1,7 +1,6 @@ package com.kemsky { /** - * @private * Creates combined function * @param rest a list of functions * @return combined function diff --git a/source/com/kemsky/filters/prop.as b/source/com/kemsky/filters/member.as similarity index 90% rename from source/com/kemsky/filters/prop.as rename to source/com/kemsky/filters/member.as index 0d78df3..3ee6009 100644 --- a/source/com/kemsky/filters/prop.as +++ b/source/com/kemsky/filters/member.as @@ -2,10 +2,10 @@ package com.kemsky.filters { /** * Creates function that extracts named property from value - * @param name name of the property (nested properties are supported: 'prop.prop1.prop2') - * @return function function that extracts named property from value + * @param name name of the property or method (nested properties are supported: 'prop.prop1.prop2') + * @return function function that extracts named property or method from value */ - public function prop(name:String):Function + public function member(name:String):Function { var path:Array = name.split("."); diff --git a/testSrc/com/kemsky/TestStream.as b/testSrc/com/kemsky/TestStream.as index 641895a..5f614f7 100644 --- a/testSrc/com/kemsky/TestStream.as +++ b/testSrc/com/kemsky/TestStream.as @@ -3,7 +3,7 @@ package com.kemsky import com.kemsky.filters._; import com.kemsky.filters.eq; import com.kemsky.filters.gt; - import com.kemsky.filters.prop; + import com.kemsky.filters.member; import com.kemsky.support.stream_internal; import flash.utils.ByteArray; @@ -23,6 +23,16 @@ package com.kemsky } + [Test] + public function testFactory():void + { + var s:Stream = $(null); + assertEquals(s.length, 0); + + var s1:Stream = $(null, undefined); + assertEquals(s1.length, 2); + } + [Test] public function testVector():void { @@ -153,8 +163,8 @@ package com.kemsky var item1:Item = new Item("item1", 1); var item2:Item = new Item("item2", 2); - assertEquals($(item1, item2).max(prop("price")), item2); - assertEquals($().max(prop("price"), 1), 1); + assertEquals($(item1, item2).max(member("price")), item2); + assertEquals($().max(member("price"), 1), 1); try { @@ -176,8 +186,8 @@ package com.kemsky var item1:Item = new Item("item1", 1); var item2:Item = new Item("item2", 2); - assertEquals($(item1, item2).min(prop("price")), item1); - assertEquals($().min(prop("price"), 1), 1); + assertEquals($(item1, item2).min(member("price")), item1); + assertEquals($().min(member("price"), 1), 1); try { @@ -316,7 +326,7 @@ package com.kemsky { var item:Item = new Item("name1", 5, 0); var s:Stream = $(item); - assertEquals(s.map(prop("name")).first, "name1"); + assertEquals(s.map(member("name")).first, "name1"); } [Test] @@ -504,7 +514,7 @@ package com.kemsky var s:Stream = $(item1, item2); - var d:Dictionary = s.dictionary(prop("name")); + var d:Dictionary = s.dictionary(member("name")); assertEquals(d["1"], item1); assertEquals(d["2"], item2); @@ -521,7 +531,7 @@ package com.kemsky var s:Stream = $(item1, item2); - var d:Object = s.object(prop("name"), prop("price")); + var d:Object = s.object(member("name"), member("price")); assertEquals(d["1"], item1.price); assertEquals(d["2"], item2.price); } diff --git a/testSrc/com/kemsky/filters/TestFilters.as b/testSrc/com/kemsky/filters/TestFilters.as index dd2fd21..99d1887 100644 --- a/testSrc/com/kemsky/filters/TestFilters.as +++ b/testSrc/com/kemsky/filters/TestFilters.as @@ -92,8 +92,8 @@ package com.kemsky.filters var s:Stream = $(item1, item2); - assertEquals(s.filter(eq(prop("bool"), true)).first, item2); - assertEquals(s.filter(eq(prop("bool"), false)).first, item1); + assertEquals(s.filter(eq(member("bool"), true)).first, item2); + assertEquals(s.filter(eq(member("bool"), false)).first, item1); } [Test] @@ -183,7 +183,7 @@ package com.kemsky.filters var s:Stream = $(item1, item2); - var result:Stream = s.filter(gt(prop("price"), 1)); + var result:Stream = s.filter(gt(member("price"), 1)); assertEquals(result.length, 1); assertEquals(result.first, item2); @@ -195,19 +195,19 @@ package com.kemsky.filters assertEquals(result.length, 1); assertEquals(result.first, item2.price); - result = s.filter(ge(prop("price"), 2)); + result = s.filter(ge(member("price"), 2)); assertEquals(result.length, 1); assertEquals(result.first, item2); - result = s.filter(gt(add(prop("price"), prop("vat"), 0), 2)); + result = s.filter(gt(add(member("price"), member("vat"), 0), 2)); assertEquals(result.length, 1); assertEquals(result.first, item1); - result = s.filter(gt(subtract(prop("price"), prop("vat")), 0)); + result = s.filter(gt(subtract(member("price"), member("vat")), 0)); assertEquals(result.length, 1); assertEquals(result.first, item2); - result = s.filter(gt(subtract(prop("price"), 1), 0)); + result = s.filter(gt(subtract(member("price"), 1), 0)); assertEquals(result.length, 1); assertEquals(result.first, item2); @@ -222,43 +222,43 @@ package com.kemsky.filters var nested:Stream = $(obj); - result = nested.filter(eq(prop("name"), "p0")); + result = nested.filter(eq(member("name"), "p0")); assertEquals(result.length, 1); - result = nested.filter(eq(prop("name1"), undefined)); + result = nested.filter(eq(member("name1"), undefined)); assertEquals(result.length, 1); - result = nested.filter(eq(prop("item.name"), "p1")); + result = nested.filter(eq(member("item.name"), "p1")); assertEquals(result.length, 1); - result = nested.filter(eq(prop("item.name1"), undefined)); + result = nested.filter(eq(member("item.name1"), undefined)); assertEquals(result.length, 1); - result = nested.filter(eq(prop("item.item.name"), "p2")); + result = nested.filter(eq(member("item.item.name"), "p2")); assertEquals(result.length, 1); - result = nested.filter(eq(prop("item.item.name1"), undefined)); + result = nested.filter(eq(member("item.item.name1"), undefined)); assertEquals(result.length, 1); - result = nested.filter(eq(prop("item.item.item.name"), "p3")); + result = nested.filter(eq(member("item.item.item.name"), "p3")); assertEquals(result.length, 1); - result = nested.filter(eq(prop("item.item.item.name1"), undefined)); + result = nested.filter(eq(member("item.item.item.name1"), undefined)); assertEquals(result.length, 1); - result = nested.filter(eq(prop("item.item.item.item.name"), "p4")); + result = nested.filter(eq(member("item.item.item.item.name"), "p4")); assertEquals(result.length, 1); - result = nested.filter(eq(prop("item.item.item.item.name1"), undefined)); + result = nested.filter(eq(member("item.item.item.item.name1"), undefined)); assertEquals(result.length, 1); try { - nested.filter(eq(prop("item.item.item.item.item.name"), "p5")); + nested.filter(eq(member("item.item.item.item.item.name"), "p5")); assertTrue(false); } catch(e:Error){} @@ -295,8 +295,8 @@ package com.kemsky.filters var s:Stream = $(item); - assertEquals(s.filter(mapped(prop("name"), d)).length, 1); - assertEquals(s.filter(mapped(prop("name"), o)).length, 1); + assertEquals(s.filter(mapped(member("name"), d)).length, 1); + assertEquals(s.filter(mapped(member("name"), o)).length, 1); var p:Stream = $("name", "price", "vat");