Skip to content
This repository has been archived by the owner on Oct 27, 2021. It is now read-only.

Commit

Permalink
Implement disposeBag
Browse files Browse the repository at this point in the history
  • Loading branch information
rb-de0 committed Mar 21, 2017
1 parent 2727d10 commit 3220fa4
Show file tree
Hide file tree
Showing 5 changed files with 116 additions and 0 deletions.
8 changes: 8 additions & 0 deletions Fluxer.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,8 @@
18D395621E8116810068E37D /* ObservableValueTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18D395611E8116810068E37D /* ObservableValueTests.swift */; };
18D395641E8117300068E37D /* RenderTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18D395631E8117300068E37D /* RenderTests.swift */; };
18D395661E81193F0068E37D /* DispatcherTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18D395651E81193F0068E37D /* DispatcherTests.swift */; };
18D395691E81232B0068E37D /* DisposeBag.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18D395671E8123270068E37D /* DisposeBag.swift */; };
18D3956B1E8123DF0068E37D /* DisposeBagTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18D3956A1E8123DF0068E37D /* DisposeBagTests.swift */; };
/* End PBXBuildFile section */

/* Begin PBXContainerItemProxy section */
Expand Down Expand Up @@ -108,6 +110,8 @@
18D395611E8116810068E37D /* ObservableValueTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ObservableValueTests.swift; sourceTree = "<group>"; };
18D395631E8117300068E37D /* RenderTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RenderTests.swift; sourceTree = "<group>"; };
18D395651E81193F0068E37D /* DispatcherTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DispatcherTests.swift; sourceTree = "<group>"; };
18D395671E8123270068E37D /* DisposeBag.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DisposeBag.swift; sourceTree = "<group>"; };
18D3956A1E8123DF0068E37D /* DisposeBagTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DisposeBagTests.swift; sourceTree = "<group>"; };
/* End PBXFileReference section */

/* Begin PBXFrameworksBuildPhase section */
Expand Down Expand Up @@ -216,6 +220,7 @@
18D395481E8106B90068E37D /* BlockDisposable.swift */,
18D395491E8106B90068E37D /* CompositeDisposable.swift */,
18D3954A1E8106B90068E37D /* Disposable.swift */,
18D395671E8123270068E37D /* DisposeBag.swift */,
);
path = Disposable;
sourceTree = "<group>";
Expand All @@ -233,6 +238,7 @@
children = (
18D3955D1E81131E0068E37D /* BlockDisposableTests.swift */,
18D3955F1E8114C80068E37D /* CompositeDisposableTests.swift */,
18D3956A1E8123DF0068E37D /* DisposeBagTests.swift */,
);
path = Disposable;
sourceTree = "<group>";
Expand Down Expand Up @@ -405,6 +411,7 @@
buildActionMask = 2147483647;
files = (
18D3954F1E8106C70068E37D /* Observable.swift in Sources */,
18D395691E81232B0068E37D /* DisposeBag.swift in Sources */,
18D3954C1E8106B90068E37D /* CompositeDisposable.swift in Sources */,
18D395331E80F3B50068E37D /* Dispatcher.swift in Sources */,
18D395571E810B960068E37D /* AnyObservable.swift in Sources */,
Expand All @@ -427,6 +434,7 @@
18D395191E80F31F0068E37D /* FluxerTests.swift in Sources */,
18D395661E81193F0068E37D /* DispatcherTests.swift in Sources */,
18D3955E1E81131E0068E37D /* BlockDisposableTests.swift in Sources */,
18D3956B1E8123DF0068E37D /* DisposeBagTests.swift in Sources */,
18D395621E8116810068E37D /* ObservableValueTests.swift in Sources */,
18D395601E8114C80068E37D /* CompositeDisposableTests.swift in Sources */,
);
Expand Down
35 changes: 35 additions & 0 deletions FluxerTests/Disposable/DisposeBagTests.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
//
// DisposeBagTests.swift
// Fluxer
//
// Created by rb_de0 on 2017/03/21.
// Copyright © 2017年 rb_de0. All rights reserved.
//

import XCTest
@testable import Fluxer

class DisposeBagTests: XCTestCase {

func testDeinit() {

var disposeBag = DisposeBag()

var bindableValue = 0
let value = ObservableValue(0)

value.subscribe {
bindableValue = $0
}.addTo(disposeBag)

value.value = 10

XCTAssertEqual(bindableValue, 10)

disposeBag = DisposeBag()

value.value = -1

XCTAssertEqual(bindableValue, 10)
}
}
44 changes: 44 additions & 0 deletions FluxerTests/Observable/ObservableValueTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -24,4 +24,48 @@ class ObservableValueTests: XCTestCase {

XCTAssertEqual(bindableValue, 10)
}

func testDispose() {

var bindableValue = 0
let value = ObservableValue(0)

let disposable = value.subscribe {
bindableValue = $0
}

value.value = 10

disposable.dispose()

value.value = 1

XCTAssertEqual(bindableValue, 10)
}

func testCompositeDispose() {

var bindableValue = 0
let value = ObservableValue(0)

let disposable = value.subscribe { _ in
bindableValue += 1
}

let disposable2 = value.subscribe { _ in
bindableValue += 1
}

let compositeDisposable = CompositeDisposable([disposable, disposable2])

value.value = 10

XCTAssertEqual(bindableValue, 2)

compositeDisposable.dispose()

value.value = 1

XCTAssertEqual(bindableValue, 2)
}
}
7 changes: 7 additions & 0 deletions Sources/Observable/Disposable/Disposable.swift
Original file line number Diff line number Diff line change
Expand Up @@ -9,3 +9,10 @@
public protocol Disposable {
func dispose()
}

extension Disposable {

func addTo(_ disposeBag: DisposeBag) {
disposeBag.append(self)
}
}
22 changes: 22 additions & 0 deletions Sources/Observable/Disposable/DisposeBag.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
//
// DisposeBag.swift
// Fluxer
//
// Created by rb_de0 on 2017/03/21.
// Copyright © 2017年 rb_de0. All rights reserved.
//

public final class DisposeBag {

private var disposables = [Disposable]()

func append(_ disposable: Disposable) {
disposables.append(disposable)
}

deinit {
disposables.forEach {
$0.dispose()
}
}
}

0 comments on commit 3220fa4

Please sign in to comment.