From eb3f308648d83aabb140a3fdb784b519529b6e5f Mon Sep 17 00:00:00 2001 From: Krunoslav Zaher Date: Sat, 19 Dec 2015 15:15:46 +0100 Subject: [PATCH] Fixes `debug` operator to default to file and line in case identifier wasn't provided. --- .../CocoaUnits/Driver/Driver+Operators.swift | 4 +-- .../Observables/Implementations/Debug.swift | 27 ++++++++++++++----- RxSwift/Observables/Observable+Debug.swift | 4 +-- 3 files changed, 24 insertions(+), 11 deletions(-) diff --git a/RxCocoa/Common/CocoaUnits/Driver/Driver+Operators.swift b/RxCocoa/Common/CocoaUnits/Driver/Driver+Operators.swift index 7aeab8e9..a7346966 100644 --- a/RxCocoa/Common/CocoaUnits/Driver/Driver+Operators.swift +++ b/RxCocoa/Common/CocoaUnits/Driver/Driver+Operators.swift @@ -147,9 +147,9 @@ extension DriverConvertibleType { - returns: An observable sequence whose events are printed to standard output. */ @warn_unused_result(message="http://git.io/rxs.uo") - public func debug(identifier: String = "\(__FILE__):\(__LINE__)") -> Driver { + public func debug(identifier: String? = nil, file: String = __FILE__, line: Int = __LINE__, function: String = __FUNCTION__) -> Driver { let source = self.asObservable() - .debug(identifier) + .debug(identifier, file: file, line: line, function: function) return Driver(source) } } diff --git a/RxSwift/Observables/Implementations/Debug.swift b/RxSwift/Observables/Implementations/Debug.swift index 47a0b350..400e4f04 100644 --- a/RxSwift/Observables/Implementations/Debug.swift +++ b/RxSwift/Observables/Implementations/Debug.swift @@ -8,6 +8,12 @@ import Foundation +let dateFormat = "yyyy-MM-dd HH:mm:ss.SSS" + +func logEvent(idenfifier: String, dateFormat: NSDateFormatter, content: String) { + print("\(dateFormat.stringFromDate(NSDate())): [\(idenfifier)] -> \(content)") +} + class Debug_ : Sink, ObserverType { typealias Element = O.E typealias Parent = Debug @@ -17,7 +23,10 @@ class Debug_ : Sink, ObserverType { init(parent: Parent, observer: O) { _parent = parent - _timestampFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss.SSS" + _timestampFormatter.dateFormat = dateFormat + + logEvent(_parent._identifier, dateFormat: _timestampFormatter, content: "subscribed") + super.init(observer: observer) } @@ -28,12 +37,12 @@ class Debug_ : Sink, ObserverType { ? String(eventText.characters.prefix(maxEventTextLength / 2)) + "..." + String(eventText.characters.suffix(maxEventTextLength / 2)) : eventText - print("\(_timestampFormatter.stringFromDate(NSDate())): [\(_parent._identifier)] -> Event \(eventNormalized)") + logEvent(_parent._identifier, dateFormat: _timestampFormatter, content: "Event \(eventNormalized)") forwardOn(event) } override func dispose() { - print("\(_timestampFormatter.stringFromDate(NSDate())): [\(_parent._identifier)] dispose") + logEvent(_parent._identifier, dateFormat: _timestampFormatter, content: "disposed") super.dispose() } } @@ -42,14 +51,18 @@ class Debug : Producer { private let _identifier: String private let _source: Observable - - init(source: Observable, identifier: String) { - _identifier = identifier + + init(source: Observable, identifier: String?, file: String, line: Int, function: String) { + if let identifier = identifier { + _identifier = identifier + } + else { + _identifier = "\(file):\(line) (\(function))" + } _source = source } override func run(observer: O) -> Disposable { - print("[\(_identifier)] subscribed") let sink = Debug_(parent: self, observer: observer) sink.disposable = _source.subscribe(sink) return sink diff --git a/RxSwift/Observables/Observable+Debug.swift b/RxSwift/Observables/Observable+Debug.swift index 41df23f8..bda744c8 100644 --- a/RxSwift/Observables/Observable+Debug.swift +++ b/RxSwift/Observables/Observable+Debug.swift @@ -19,8 +19,8 @@ extension ObservableType { - returns: An observable sequence whose events are printed to standard output. */ @warn_unused_result(message="http://git.io/rxs.uo") - public func debug(identifier: String = "\(__FILE__):\(__LINE__)") + public func debug(identifier: String? = nil, file: String = __FILE__, line: Int = __LINE__, function: String = __FUNCTION__) -> Observable { - return Debug(source: self.asObservable(), identifier: identifier) + return Debug(source: self.asObservable(), identifier: identifier, file: file, line: line, function: function) } } \ No newline at end of file