Lorel 8 лет назад
Родитель
Сommit
69a2145d22
3 измененных файлов с 52 добавлено и 2 удалено
  1. 11 1
      doc/README.md
  2. 21 1
      rx.lua
  3. 20 0
      src/observable.lua

+ 11 - 1
doc/README.md

@@ -19,6 +19,7 @@ RxLua
   - [fromRange](#fromrangeinitial-limit-step)
   - [fromTable](#fromtabletable-iterator-keys)
   - [fromCoroutine](#fromcoroutinecoroutine)
+  - [fromFileByLine](#fromfilebylinefilename)
   - [defer](#deferfactory)
   - [replicate](#replicatevalue-count)
   - [dump](#dumpname-formatter)
@@ -259,6 +260,16 @@ Creates an Observable that produces values when the specified coroutine yields.
 
 ---
 
+#### `.fromFileByLine(filename)`
+
+Creates an Observable that produces values from a file, line by line.
+
+| Name | Type | Default | Description |
+|------|------|---------|-------------|
+| `filename` | string |  | The name of the file used to create the Observable |
+
+---
+
 #### `.defer(factory)`
 
 Creates an Observable that creates a new Observable for each observer using a factory function.
@@ -1014,4 +1025,3 @@ Pushes zero or more values to the ReplaySubject. They will be broadcasted to all
 | Name | Type | Default | Description |
 |------|------|---------|-------------|
 | `values` | *... |  |  |
-

+ 21 - 1
rx.lua

@@ -260,6 +260,26 @@ function Observable:dump(name, formatter)
   return self:subscribe(onNext, onError, onCompleted)
 end
 
+--- Creates an Observable that produces values from a file, line by line.
+-- @arg {string} filename - The name of the file used to create the Observable
+-- @returns {Observable}
+function Observable.fromFileByLine(filename)
+  return Observable.create(function(observer)
+    local f = io.open(filename, "rb")
+    if f
+    then
+      f:close()
+      for line in io.lines(filename) do
+        observer:onNext(line)
+      end
+
+      return observer:onCompleted()
+    else
+      return observer:onError(filename)
+    end
+  end)
+end
+
 --- Determine whether all items emitted by an Observable meet some criteria.
 -- @arg {function=identity} predicate - The predicate used to evaluate objects.
 function Observable:all(predicate)
@@ -2200,4 +2220,4 @@ return {
   AsyncSubject = AsyncSubject,
   BehaviorSubject = BehaviorSubject,
   ReplaySubject = ReplaySubject
-}
+}

+ 20 - 0
src/observable.lua

@@ -165,4 +165,24 @@ function Observable:dump(name, formatter)
   return self:subscribe(onNext, onError, onCompleted)
 end
 
+--- Creates an Observable that produces values from a file, line by line.
+-- @arg {string} filename - The name of the file used to create the Observable
+-- @returns {Observable}
+function Observable.fromFileByLine(filename)
+  return Observable.create(function(observer)
+    local f = io.open(filename, "rb")
+    if f
+    then
+      f:close()
+      for line in io.lines(filename) do
+        observer:onNext(line)
+      end
+
+      return observer:onCompleted()
+    else
+      return observer:onError(filename)
+    end
+  end)
+end
+
 return Observable