Browse Source

Add immediate scheduler;

bjorn 10 years ago
parent
commit
d7fd9830e6
3 changed files with 49 additions and 1 deletions
  1. 27 0
      doc/README.md
  2. 20 1
      rx.lua
  3. 2 0
      tests/observable.lua

+ 27 - 0
doc/README.md

@@ -41,6 +41,9 @@ RxLua
   - [unwrap](#unwrap)
   - [wrap](#wrapsize)
 - [Scheduler](#scheduler)
+- [ImmediateScheduler](#immediatescheduler)
+  - [create](#create)
+  - [schedule](#scheduleaction)
 - [CooperativeScheduler](#cooperativescheduler)
   - [create](#createcurrenttime)
   - [schedule](#scheduleaction-delay)
@@ -518,6 +521,30 @@ Arguments:
 
 Schedulers manage groups of Observables.
 
+# ImmediateScheduler
+
+Schedules Observables by running all operations immediately.
+
+---
+
+#### `.create()`
+
+Creates a new Immediate Scheduler.
+
+Returns:
+
+- `Scheduler.Immediate`
+
+---
+
+#### `:schedule(action)`
+
+Schedules a function to be run on the scheduler. It is executed immediately.
+
+Arguments:
+
+- `action` (`function`) - The function to execute.
+
 # CooperativeScheduler
 
 Manages Observables using coroutines and a virtual clock that must be updated manually.

+ 20 - 1
rx.lua

@@ -760,6 +760,25 @@ end
 -- @description Schedulers manage groups of Observables.
 local Scheduler = {}
 
+--- @class ImmediateScheduler
+-- @description Schedules Observables by running all operations immediately.
+local Immediate = {}
+Immediate.__index = Immediate
+
+--- Creates a new Immediate Scheduler.
+-- @returns {Scheduler.Immediate}
+function Immediate.create()
+  return setmetatable({}, Immediate)
+end
+
+--- Schedules a function to be run on the scheduler. It is executed immediately.
+-- @arg {function} action - The function to execute.
+function Immediate:schedule(action)
+  action()
+end
+
+Scheduler.Immediate = Immediate
+
 --- @class CooperativeScheduler
 -- @description Manages Observables using coroutines and a virtual clock that must be updated
 -- manually.
@@ -889,7 +908,7 @@ rx = {
   Observer = Observer,
   Observable = Observable,
   Scheduler = Scheduler,
-  scheduler = Scheduler.Cooperative.create(),
+  scheduler = Scheduler.Immediate.create(),
   Subject = Subject
 }
 

+ 2 - 0
tests/observable.lua

@@ -123,6 +123,7 @@ describe('Observable', function()
         return 3
       end)
 
+      Rx.scheduler = Rx.Scheduler.Cooperative.create()
       local observable = Rx.Observable.fromCoroutine(coroutine)
       local onNext, onError, onComplete = observableSpy(observable)
       repeat Rx.scheduler:update()
@@ -137,6 +138,7 @@ describe('Observable', function()
         return 3
       end
 
+      Rx.scheduler = Rx.Scheduler.Cooperative.create()
       local observable = Rx.Observable.fromCoroutine(coroutine)
       local onNext, onError, onComplete = observableSpy(observable)
       repeat Rx.scheduler:update()