Skip to content

Commit 4e7e443

Browse files
M0rtyMerrfreak4pc
authored andcommitted
Added mapTo for Single and Maybe (#221)
1 parent 300923e commit 4e7e443

File tree

3 files changed

+96
-2
lines changed

3 files changed

+96
-2
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ Changelog
77
- `once` now uses a `NSRecursiveLock` instead of the deprecated `OSAtomicOr32OrigBarrier`
88
- added `merge(with:)` for `Observable`
99
- removed `flatMapSync` operator
10+
- added `mapTo` for `Single` and `Maybe`
1011
- added SPM support
1112

1213
5.0.0

Source/RxSwift/mapTo.swift

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,31 @@ extension ObservableType {
1717
- parameter value: A constant that each element of the input sequence is being replaced with
1818
- returns: An observable sequence containing the values `value` provided as a parameter
1919
*/
20-
public func mapTo<R>(_ value: R) -> Observable<R> {
20+
public func mapTo<Result>(_ value: Result) -> Observable<Result> {
2121
return map { _ in value }
2222
}
2323
}
24+
25+
extension PrimitiveSequence where Trait == SingleTrait {
26+
/**
27+
Returns a Single which success event is mapped to constant provided as a parameter
28+
29+
- parameter value: A constant that element of the input sequence is being replaced with
30+
- returns: A Single containing the value `value` provided as a parameter in case of success
31+
*/
32+
public func mapTo<Result>(_ value: Result) -> Single<Result> {
33+
return map { _ in value }
34+
}
35+
}
36+
37+
extension PrimitiveSequence where Trait == MaybeTrait {
38+
/**
39+
Returns a Maybe which success event is mapped to constant provided as a parameter
40+
41+
- parameter value: A constant that element of the input sequence is being replaced with
42+
- returns: A Maybe containing the value `value` provided as a parameter in case of success
43+
*/
44+
public func mapTo<Result>(_ value: Result) -> Maybe<Result> {
45+
return map { _ in value }
46+
}
47+
}

Tests/RxSwift/mapToTests.swift

Lines changed: 70 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import RxTest
1414

1515
class MapToTests: XCTestCase {
1616

17-
let numbers: [Int?] = [1, nil, Int?(3)]
17+
private let numbers: [Int?] = [1, nil, Int?(3)]
1818
private var observer: TestableObserver<String>!
1919

2020
override func setUp() {
@@ -48,3 +48,72 @@ class MapToTests: XCTestCase {
4848
XCTAssertEqual(observer.events, correctValues)
4949
}
5050
}
51+
52+
// MARK: - Single
53+
extension MapToTests {
54+
func testSingleReplaceSuccess() {
55+
// Given
56+
let expectedValue = "candy"
57+
let scheduler = TestScheduler(initialClock: 0)
58+
// When
59+
let result = scheduler.start {
60+
Single.just(1).mapTo(expectedValue).asObservable()
61+
}
62+
// Then
63+
XCTAssertEqual(result.events, [
64+
.next(TestScheduler.Defaults.subscribed, expectedValue),
65+
.completed(TestScheduler.Defaults.subscribed)
66+
])
67+
}
68+
69+
func testSingleNoReplaceFailure() {
70+
// Given
71+
let scheduler = TestScheduler(initialClock: 0)
72+
// When
73+
let result = scheduler.start {
74+
Single<Int>.error(testError).mapTo("candy").asObservable()
75+
}
76+
// Then
77+
XCTAssertEqual(result.events, [.error(TestScheduler.Defaults.subscribed, testError)])
78+
}
79+
}
80+
81+
// MARK: - Maybe
82+
extension MapToTests {
83+
func testMaybeReplaceSuccess() {
84+
// Given
85+
let expectedValue = "candy"
86+
let scheduler = TestScheduler(initialClock: 0)
87+
// When
88+
let result = scheduler.start {
89+
Maybe.just(1).mapTo(expectedValue).asObservable()
90+
}
91+
// Then
92+
XCTAssertEqual(result.events, [
93+
.next(TestScheduler.Defaults.subscribed, expectedValue),
94+
.completed(TestScheduler.Defaults.subscribed)
95+
])
96+
}
97+
98+
func testMaybeNoReplaceFailure() {
99+
// Given
100+
let scheduler = TestScheduler(initialClock: 0)
101+
// When
102+
let result = scheduler.start {
103+
Maybe<Int>.error(testError).mapTo("candy").asObservable()
104+
}
105+
// Then
106+
XCTAssertEqual(result.events, [.error(TestScheduler.Defaults.subscribed, testError)])
107+
}
108+
109+
func testMaybeNoReplaceEmpty() {
110+
// Given
111+
let scheduler = TestScheduler(initialClock: 0)
112+
// When
113+
let result = scheduler.start {
114+
Maybe<Int>.empty().mapTo("candy").asObservable()
115+
}
116+
// Then
117+
XCTAssertEqual(result.events, [.completed(TestScheduler.Defaults.subscribed)])
118+
}
119+
}

0 commit comments

Comments
 (0)