Parcourir la source

Observable.empty; Observable.never; Observable.throw;

bjorn il y a 9 ans
Parent
commit
a9af5c6150
4 fichiers modifiés avec 86 ajouts et 0 suppressions
  1. 21 0
      doc/README.md
  2. 19 0
      rx.lua
  3. 19 0
      src/observable.lua
  4. 27 0
      tests/observable.lua

+ 21 - 0
doc/README.md

@@ -12,6 +12,9 @@ RxLua
 - [Observable](#observable)
   - [create](#createsubscribe)
   - [subscribe](#subscribeonnext-onerror-oncomplete)
+  - [empty](#empty)
+  - [never](#never)
+  - [throw](#throwmessage)
   - [fromValue](#fromvaluevalue)
   - [fromRange](#fromrangeinitial-limit-step)
   - [fromTable](#fromtabletable-iterator-keys)
@@ -159,6 +162,24 @@ Shorthand for creating an Observer and passing it to this Observable's subscript
 
 ---
 
+#### `:empty()`
+
+Returns an Observable that immediately completes without producing a value.
+
+---
+
+#### `:never()`
+
+Returns an Observable that never produces values and never completes.
+
+---
+
+#### `:throw(message)`
+
+Returns an Observable that immediately produces an error.
+
+---
+
 #### `.fromValue(value)`
 
 Creates an Observable that produces a single value.

+ 19 - 0
rx.lua

@@ -114,6 +114,25 @@ function Observable:subscribe(onNext, onError, onComplete)
   end
 end
 
+--- Returns an Observable that immediately completes without producing a value.
+function Observable:empty()
+  return Observable.create(function(observer)
+    observer:onComplete()
+  end)
+end
+
+--- Returns an Observable that never produces values and never completes.
+function Observable:never()
+  return Observable.create(function(observer) end)
+end
+
+--- Returns an Observable that immediately produces an error.
+function Observable:throw(message)
+  return Observable.create(function(observer)
+    observer:onError(message)
+  end)
+end
+
 --- Creates an Observable that produces a single value.
 -- @arg {*} value
 -- @returns {Observable}

+ 19 - 0
src/observable.lua

@@ -29,6 +29,25 @@ function Observable:subscribe(onNext, onError, onComplete)
   end
 end
 
+--- Returns an Observable that immediately completes without producing a value.
+function Observable:empty()
+  return Observable.create(function(observer)
+    observer:onComplete()
+  end)
+end
+
+--- Returns an Observable that never produces values and never completes.
+function Observable:never()
+  return Observable.create(function(observer) end)
+end
+
+--- Returns an Observable that immediately produces an error.
+function Observable:throw(message)
+  return Observable.create(function(observer)
+    observer:onError(message)
+  end)
+end
+
 --- Creates an Observable that produces a single value.
 -- @arg {*} value
 -- @returns {Observable}

+ 27 - 0
tests/observable.lua

@@ -32,6 +32,33 @@ describe('Observable', function()
     end)
   end)
 
+  describe('empty', function()
+    it('returns an Observable that does not produce any values', function()
+      local observable = Rx.Observable.empty()
+      local onNext, onError, onComplete = observableSpy(observable)
+      expect(#onNext).to.equal(0)
+      expect(#onError).to.equal(0)
+      expect(#onComplete).to.equal(1)
+    end)
+  end)
+
+  describe('never', function()
+    it('returns an Observable that does not produce values or complete', function()
+      local observable = Rx.Observable.never()
+      local onNext, onError, onComplete = observableSpy(observable)
+      expect(#onNext).to.equal(0)
+      expect(#onError).to.equal(0)
+      expect(#onComplete).to.equal(0)
+    end)
+  end)
+
+  describe('throw', function()
+    it('returns an Observable that produces an error', function()
+      local observable = Rx.Observable.throw('message')
+      expect(function() observable:subscribe() end).to.fail()
+    end)
+  end)
+
   describe('fromValue', function()
     it('returns an Observable that produces the first argument and completes', function()
       local observable = Rx.Observable.fromValue(1, 2, 3)