Browse Source

Add Observable.fromRange; Add Observable.fromTable;

bjorn 10 years ago
parent
commit
8c8eef8fc4
2 changed files with 68 additions and 0 deletions
  1. 31 0
      doc/README.md
  2. 37 0
      rx.lua

+ 31 - 0
doc/README.md

@@ -78,6 +78,37 @@ Returns:
 
 ---
 
+#### `.fromRange(initial, limit, step)`
+
+Creates an Observable that produces a range of values in a manner similar to a Lua for loop.
+
+Arguments:
+
+- `initial` (`number`) - The first value of the range, or the upper limit if no other arguments are specified.
+- `[limit]` (`number`) - The second value of the range.
+- `[step=1]` (`number`) - An amount to increment the value by each iteration.
+
+Returns:
+
+- `Observable`
+
+---
+
+#### `.fromTable(table, iterator)`
+
+Creates an Observable that produces values from a table.
+
+Arguments:
+
+- `table` (`table`) - The table used to create the Observable.
+- `[iterator=pairs]` (`function`) - An iterator used to iterate the table, e.g. pairs or ipairs.
+
+Returns:
+
+- `Observable`
+
+---
+
 #### `.fromCoroutine(coroutine)`
 
 Creates an Observable that produces values when the specified coroutine yields.

+ 37 - 0
rx.lua

@@ -75,6 +75,43 @@ function Observable.fromValue(value)
   end)
 end
 
+--- Creates an Observable that produces a range of values in a manner similar to a Lua for loop.
+-- @arg {number} initial - The first value of the range, or the upper limit if no other arguments
+--                         are specified.
+-- @arg {number=} limit - The second value of the range.
+-- @arg {number=1} step - An amount to increment the value by each iteration.
+-- @returns {Observable}
+function Observable.fromRange(initial, limit, step)
+  if not limit and not step then
+    initial, limit = 1, initial
+  end
+
+  step = step or 1
+
+  return Observable.create(function(observer)
+    for i = initial, limit, step do
+      observer:onNext(i)
+    end
+
+    observer:onComplete()
+  end)
+end
+
+--- Creates an Observable that produces values from a table.
+-- @arg {table} table - The table used to create the Observable.
+-- @arg {function=pairs} iterator - An iterator used to iterate the table, e.g. pairs or ipairs.
+-- @returns {Observable}
+function Observable.fromTable(t, iterator)
+  iterator = iterator or pairs
+  return Observable.create(function(observer)
+    for key, value in iterator(t) do
+      observer:onNext(value, key)
+    end
+
+    observer:onComplete()
+  end)
+end
+
 --- Creates an Observable that produces values when the specified coroutine yields.
 -- @arg {thread} coroutine
 -- @returns {Observable}