diff --git a/CHANGELOG.md b/CHANGELOG.md
index c7c69173..d8173878 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -11,5 +11,6 @@ All notable changes to this project will be documented in this file.
* Moved from using `>-` operator to protocol extensions
* Change from `disposeBag.addDisposable` to `disposable.addDisposableTo`
* Changes in RxCocoa extensions to enable fluent style
+* Rename of `do*` to `tap*`
####Fixed
diff --git a/Rx.xcworkspace/contents.xcworkspacedata b/Rx.xcworkspace/contents.xcworkspacedata
index 92bb55e5..66596050 100644
--- a/Rx.xcworkspace/contents.xcworkspacedata
+++ b/Rx.xcworkspace/contents.xcworkspacedata
@@ -7,6 +7,9 @@
+
+
diff --git a/RxSwift/RxSwift/Observables/Implementations/Do.swift b/RxSwift/RxSwift/Observables/Implementations/Do.swift
index e28a5360..2ac8a4f6 100644
--- a/RxSwift/RxSwift/Observables/Implementations/Do.swift
+++ b/RxSwift/RxSwift/Observables/Implementations/Do.swift
@@ -8,35 +8,34 @@
import Foundation
-class Do_ : Sink, ObserverType {
+class TapSink : Sink, ObserverType {
typealias Element = O.Element
- typealias DoType = Do
+ typealias Parent = Tap
- let parent: DoType
+ let parent: Parent
- init(parent: DoType, observer: O, cancel: Disposable) {
+ init(parent: Parent, observer: O, cancel: Disposable) {
self.parent = parent
super.init(observer: observer, cancel: cancel)
}
func on(event: Event) {
- parent.eventHandler(event).recoverWith { error in
- // catch clause
- trySendError(observer, error)
- self.dispose()
- return SuccessResult
- }.flatMap { _ -> RxResult in
- trySend(observer, event)
+ do {
+ try parent.eventHandler(event)
+ observer?.on(event)
if event.isStopEvent {
self.dispose()
}
- return SuccessResult
+ }
+ catch let error {
+ observer?.on(.Error(error))
+ self.dispose()
}
}
}
-class Do : Producer {
- typealias EventHandler = Event -> RxResult
+class Tap : Producer {
+ typealias EventHandler = Event throws -> Void
let source: Observable
let eventHandler: EventHandler
@@ -47,7 +46,7 @@ class Do : Producer {
}
override func run(observer: O, cancel: Disposable, setSink: (Disposable) -> Void) -> Disposable {
- let sink = Do_(parent: self, observer: observer, cancel: cancel)
+ let sink = TapSink(parent: self, observer: observer, cancel: cancel)
setSink(sink)
diff --git a/RxSwift/RxSwift/Observables/Observable+Single.swift b/RxSwift/RxSwift/Observables/Observable+Single.swift
index 539c6463..f4e476d3 100644
--- a/RxSwift/RxSwift/Observables/Observable+Single.swift
+++ b/RxSwift/RxSwift/Observables/Observable+Single.swift
@@ -65,23 +65,18 @@ extension ObservableType {
// do
extension ObservableType {
- public func doOrDie(eventHandler: (Event) -> RxResult)
+ public func tap(eventHandler: (Event) throws -> Void)
-> Observable {
- return Do(source: self.normalize(), eventHandler: eventHandler)
- }
-
- public func `do`(eventHandler: (Event) -> Void)
- -> Observable {
- return Do(source: self.normalize(), eventHandler: { success(eventHandler($0)) })
+ return Tap(source: self.normalize(), eventHandler: eventHandler)
}
}
// doOnNext
extension ObservableType {
- public func doOnNext(actionOnNext: E -> Void)
+ public func tapOnNext(actionOnNext: E -> Void)
-> Observable {
- return self.`do` { event in
+ return self.tap { event in
switch event {
case .Next(let value):
actionOnNext(value)
diff --git a/RxTests/RxSwiftTests/Tests/Observable+MultipleTest.swift b/RxTests/RxSwiftTests/Tests/Observable+MultipleTest.swift
index bd5adb47..2edc98ea 100644
--- a/RxTests/RxSwiftTests/Tests/Observable+MultipleTest.swift
+++ b/RxTests/RxSwiftTests/Tests/Observable+MultipleTest.swift
@@ -2520,7 +2520,7 @@ extension ObservableMultipleTest {
var sourceNotDisposed = false
let res = scheduler.start {
- l .`do` { _ in sourceNotDisposed = true } .takeUntil(r)
+ l .tap { _ in sourceNotDisposed = true } .takeUntil(r)
}
XCTAssertEqual(res.messages, [
@@ -2548,7 +2548,7 @@ extension ObservableMultipleTest {
var sourceNotDisposed = false
let res = scheduler.start {
- l .takeUntil(r .`do` { _ in sourceNotDisposed = true })
+ l .takeUntil(r .tap { _ in sourceNotDisposed = true })
}
XCTAssertEqual(res.messages, [
diff --git a/RxTests/RxSwiftTests/Tests/Observable+SingleTest.swift b/RxTests/RxSwiftTests/Tests/Observable+SingleTest.swift
index 6b3f751a..68eed207 100644
--- a/RxTests/RxSwiftTests/Tests/Observable+SingleTest.swift
+++ b/RxTests/RxSwiftTests/Tests/Observable+SingleTest.swift
@@ -288,7 +288,7 @@ extension ObservableSingleTest {
var i = 0
var sum = 2 + 3 + 4 + 5
- let res = scheduler.start { xs.`do` { e in
+ let res = scheduler.start { xs.tap { e in
switch e {
case .Next(let _):
i++
@@ -331,7 +331,7 @@ extension ObservableSingleTest {
])
var i = 0
- let res = scheduler.start { xs.`do` { e in
+ let res = scheduler.start { xs.tap { e in
switch e {
case .Next(_):
i++
@@ -373,7 +373,7 @@ extension ObservableSingleTest {
var i = 0
var sum = 2 + 3 + 4 + 5
var completedEvaluation = false
- let res = scheduler.start { xs.`do` { e in
+ let res = scheduler.start { xs.tap { e in
switch e {
case .Next(let value):
i++
@@ -415,7 +415,7 @@ extension ObservableSingleTest {
var i = 0
var completedEvaluation = false
- let res = scheduler.start { xs.`do` { e in
+ let res = scheduler.start { xs.tap { e in
switch e {
case .Next(_):
i++
@@ -455,7 +455,7 @@ extension ObservableSingleTest {
var i = 0
var sum = 2 + 3 + 4 + 5
var sawError = false
- let res = scheduler.start { xs.`do` { e in
+ let res = scheduler.start { xs.tap { e in
switch e {
case .Next(let value):
i++
@@ -502,7 +502,7 @@ extension ObservableSingleTest {
var i = 0
var sum = 2 + 3 + 4 + 5
var sawError = false
- let res = scheduler.start { xs.`do` { e in
+ let res = scheduler.start { xs.tap { e in
switch e {
case .Next(let value):
i++
@@ -534,7 +534,31 @@ extension ObservableSingleTest {
XCTAssertEqual(xs.subscriptions, correctSubscriptions)
}
- // ...
+ func testDo_Throws() {
+ let scheduler = TestScheduler(initialClock: 0)
+
+ let xs = scheduler.createHotObservable([
+ next(150, 1),
+ next(210, 2),
+ completed(250)
+ ])
+
+ let res = scheduler.start { xs.tap { _ in
+ throw testError
+ }
+ }
+
+ let correctMessages = [
+ error(210, testError) as Recorded
+ ]
+
+ let correctSubscriptions = [
+ Subscription(200, 210)
+ ]
+
+ XCTAssertEqual(res.messages, correctMessages)
+ XCTAssertEqual(xs.subscriptions, correctSubscriptions)
+ }
}
// retry