Skip to content

Instantly share code, notes, and snippets.

@sundeepgupta
Last active May 16, 2018 17:36
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sundeepgupta/7be5fddc7dbb8472e10dc0313132de4b to your computer and use it in GitHub Desktop.
Save sundeepgupta/7be5fddc7dbb8472e10dc0313132de4b to your computer and use it in GitHub Desktop.
FlatMap Article - Type Declarations
class Project {
private let developerSubject = PublishSubject<Developer>()
var developerStream: Observable<Developer> {
return developerSubject.asObservable()
}
func addDeveloper(_ developer: Developer) {
developerSubject.onNext(developer)
}
func stop() {
developerSubject.onCompleted()
}
}
class Developer {
private let commitSubject = PublishSubject<Commit>()
let name: String
init(_ name: String) {
self.name = name
}
func startCoding() -> Observable<Commit> {
return commitSubject.asObservable()
}
func stopCoding() {
commitSubject.onCompleted()
}
// Helper to externally simulate coding activity.
func pushCommit(_ hash: String) {
commitSubject.onNext(Commit(author: name, hash: hash))
}
}
struct Commit {
let author: String
let hash: String
}
class CI: ObserverType {
func on(_ event: Event<Commit>) {
switch event {
case .next(let commit): print("CI is building \(commit).")
case .completed: print("CI stopped.")
case .error(let error): print("CI errored: \(error).")
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment