From b949c5598eef03983f1040df1d65ddf9e1f0a6bf Mon Sep 17 00:00:00 2001 From: alexander Date: Thu, 19 Nov 2015 01:09:46 +0300 Subject: [PATCH] create stream from object/dictionary --- source/com/kemsky/Stream.as | 52 ++++++++++++++++++++++++++++++++ testSrc/com/kemsky/TestStream.as | 27 +++++++++++++++++ 2 files changed, 79 insertions(+) diff --git a/source/com/kemsky/Stream.as b/source/com/kemsky/Stream.as index 9390221..413826a 100644 --- a/source/com/kemsky/Stream.as +++ b/source/com/kemsky/Stream.as @@ -2192,5 +2192,57 @@ package com.kemsky return callback == null ? result : result.map(callback); } + + /** + * Create stream from object(dictionary) property names. + * @param object object used as source for a stream + * @return created Stream object + * @example + *
+         *     var obj:Object = {name1: "first", name2: "second"};
+         *     var s:Stream = Stream.fromKeys(obj);
+         *     trace(s);
+         *     //prints ["name1", "name2"]
+         * 
+ * @internal immutable + */ + public static function fromKeys(object:Object):Stream + { + var result:Stream = new Stream(); + for (var prop:String in object) + { + if(object.hasOwnProperty(prop)) + { + result.push(prop); + } + } + return result; + } + + /** + * Create stream from object(dictionary) property values. + * @param object object used as source for a stream + * @return created Stream object + * @example + *
+         *     var obj:Object = {name1: "first", name2: "second"};
+         *     var s:Stream = Stream.fromValues(obj);
+         *     trace(s);
+         *     //prints ["first", "second"]
+         * 
+ * @internal immutable + */ + public static function fromValues(object:Object):Stream + { + var result:Stream = new Stream(); + for (var prop:String in object) + { + if(object.hasOwnProperty(prop)) + { + result.push(object[prop]); + } + } + return result; + } } } diff --git a/testSrc/com/kemsky/TestStream.as b/testSrc/com/kemsky/TestStream.as index 833c706..cdb2957 100644 --- a/testSrc/com/kemsky/TestStream.as +++ b/testSrc/com/kemsky/TestStream.as @@ -22,6 +22,33 @@ package com.kemsky { } + [Test] + public function testFromValues():void + { + var obj:Object = {name1: "first", name2: "second"}; + + var s:Stream = Stream.fromValues(obj).sort(); + assertEquals(s.length, 2); + assertEquals(s.first, "first"); + assertEquals(s.second, "second"); + + var s2:Stream = Stream.fromKeys(null); + assertEquals(s2.length, 0); + } + + [Test] + public function testFromKeys():void + { + var obj:Object = {name1: "first", name2: "second"}; + + var s:Stream = Stream.fromKeys(obj).sort(); + assertEquals(s.length, 2); + assertEquals(s.first, "name1"); + assertEquals(s.second, "name2"); + + var s2:Stream = Stream.fromKeys(null); + assertEquals(s2.length, 0); + } [Test] public function testDeduplicate():void