Browse Source

Add better support for multiple return values for Subjects;

bjorn 10 years ago
parent
commit
1751e30084
1 changed files with 15 additions and 8 deletions
  1. 15 8
      rx.lua

+ 15 - 8
rx.lua

@@ -662,11 +662,11 @@ local Subject = setmetatable({}, Observable)
 Subject.__index = Subject
 Subject.__index = Subject
 
 
 --- Creates a new Subject.
 --- Creates a new Subject.
--- @arg {*} value - The initial value.
+-- @arg {*...} value - The initial values.
 -- @returns {Subject}
 -- @returns {Subject}
-function Subject.create(value)
+function Subject.create(...)
   local self = {
   local self = {
-    value = value,
+    value = {...},
     observers = {}
     observers = {}
   }
   }
 
 
@@ -681,13 +681,13 @@ function Subject:subscribe(onNext, onError, onComplete)
   table.insert(self.observers, Observer.create(onNext, onError, onComplete))
   table.insert(self.observers, Observer.create(onNext, onError, onComplete))
 end
 end
 
 
---- Pushes a value to the Subject. It will be broadcasted to all Observers.
--- @arg {*} value
-function Subject:onNext(value)
-  self.value = value
+--- Pushes zero or more values to the Subject. It will be broadcasted to all Observers.
+-- @arg {*...} values
+function Subject:onNext(...)
+  self.value = {...}
 
 
   for i = 1, #self.observers do
   for i = 1, #self.observers do
-    self.observers[i]:onNext(value)
+    self.observers[i]:onNext(...)
   end
   end
 end
 end
 
 
@@ -706,6 +706,13 @@ function Subject:onComplete()
   end
   end
 end
 end
 
 
+--- Returns the last value emitted by the Subject, or the initial value passed to the constructor
+-- if nothing has been emitted yet.
+-- @returns {*...}
+function Subject:getValue()
+  return unpack(self.value or {})
+end
+
 Subject.__call = Subject.onNext
 Subject.__call = Subject.onNext
 
 
 rx = {
 rx = {