Add Observable:pack; Add Observable:unpack; Add Observable:unwrap;

This commit is contained in:
bjorn 2015-08-28 15:31:57 -07:00
parent 62fcabc3a6
commit b569234fa9
2 changed files with 68 additions and 0 deletions

View File

@ -286,6 +286,16 @@ Returns:
---
#### `:pack()`
Returns an Observable that produces the values of the original inside tables.
Returns:
- `Observable`
---
#### `:pluck(key)`
Returns a new Observable that produces values computed by extracting the given key from the tables produced by the original.
@ -379,6 +389,26 @@ Returns:
- `Observable`
---
#### `:unpack()`
Returns an Observable that unpacks the tables produced by the original.
Returns:
- `Observable`
---
#### `:unwrap()`
Returns an Observable that takes any values produced by the original that consist of multiple return values and produces each value individually.
Returns:
- `Observable`
# Scheduler
Schedulers manage groups of Observables.

38
rx.lua
View File

@ -1,5 +1,7 @@
local rx
local pack = table.pack or function(...) return {...} end
local unpack = table.unpack or unpack
local function noop() end
local function identity(x) return x end
@ -438,6 +440,12 @@ function Observable:merge(...)
end)
end
--- Returns an Observable that produces the values of the original inside tables.
-- @returns {Observable}
function Observable:pack()
return self:map(pack)
end
--- Returns a new Observable that produces values computed by extracting the given key from the
-- tables produced by the original.
-- @arg {function} key - The key to extract from the table.
@ -611,6 +619,36 @@ function Observable:takeUntil(other)
end)
end
--- Returns an Observable that unpacks the tables produced by the original.
-- @returns {Observable}
function Observable:unpack()
return self:map(unpack)
end
--- Returns an Observable that takes any values produced by the original that consist of multiple
-- return values and produces each value individually.
-- @returns {Observable}
function Observable:unwrap()
return Observable.create(function(observer)
local function onNext(...)
local values = {...}
for i = 1, #values do
observer:onNext(values[i])
end
end
local function onError(message)
return observer:onError(message)
end
local function onComplete()
return observer:onComplete()
end
return self:subscribe(onNext, onError, onComplete)
end)
end
--- @class Scheduler
-- @description Schedulers manage groups of Observables.
local Scheduler = {}