Skip to content

Commit b3993a1

Browse files
committed
properly inject dependencies
1 parent 870fdd9 commit b3993a1

File tree

1 file changed

+40
-13
lines changed

1 file changed

+40
-13
lines changed

Sources/LoggerMiddleware/LoggerMiddleware.swift

Lines changed: 40 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -106,14 +106,14 @@ extension LoggerMiddleware {
106106
/// Logs using os_log.
107107
case osLog
108108
/// Appends the messages to a file. The file must exist!
109-
case file(URL, DateFormatter)
109+
case file(FileAppender)
110110
/// A custom handler.
111111
case custom((String) -> Void)
112112

113113
func log(state: String) {
114114
switch self {
115115
case .osLog: LoggerMiddleware.osLog(state)
116-
case let .file(url, dateFormatter): LoggerMiddleware.fileLog(state, to: url, dateFormatter: dateFormatter)
116+
case let .file(fileAppender): fileAppender.write(state)
117117
case let .custom(closure): closure(state)
118118
}
119119
}
@@ -241,14 +241,14 @@ extension LoggerMiddleware {
241241
/// Logs using os_log.
242242
case osLog
243243
/// Appends the messages to a file. The file must exist!
244-
case file(URL, DateFormatter)
244+
case file(FileAppender)
245245
/// A custom handler.
246246
case custom((String) -> Void)
247247

248248
func log(action: String) {
249249
switch self {
250250
case .osLog: LoggerMiddleware.osLog(action)
251-
case let .file(url, dateFormatter): LoggerMiddleware.fileLog(action, to: url, dateFormatter: dateFormatter)
251+
case let .file(fileappender): fileappender.write(action)
252252
case let .custom(closure): closure(action)
253253
}
254254
}
@@ -279,17 +279,44 @@ extension LoggerMiddleware {
279279

280280
extension LoggerMiddleware {
281281

282-
fileprivate static func fileLog(_ message: String, to fileURL: URL, dateFormatter: DateFormatter) {
283-
guard let fileUpdater = try? FileHandle(forUpdating: fileURL),
284-
let data = (dateFormatter.string(from: Date()) + " " + message + "\n")
285-
.data(using: String.Encoding.utf8) else { return }
286-
fileUpdater.seekToEndOfFile()
287-
fileUpdater.write(data)
288-
fileUpdater.closeFile()
289-
}
290-
291282
fileprivate static func osLog(_ message: String) {
292283
os_log(.debug, log: .default, "%{PUBLIC}@", message)
293284
}
294285

295286
}
287+
288+
public struct FileAppender {
289+
private let url: URL
290+
private let date: () -> Date
291+
private let dateFormatter: DateFormatter
292+
private let writer: (URL, Data) -> Void
293+
294+
public init(url: URL, date: @escaping () -> Date, dateFormatter: DateFormatter, writer: @escaping (URL, Data) -> Void) {
295+
self.url = url
296+
self.date = date
297+
self.dateFormatter = dateFormatter
298+
self.writer = writer
299+
}
300+
301+
public func write(_ message: String) {
302+
guard let data = (dateFormatter.string(from: date()) + " " + message + "\n").data(using: String.Encoding.utf8) else { return }
303+
writer(url, data)
304+
}
305+
}
306+
307+
extension FileAppender {
308+
public static func live(url: URL, dateFormatter: DateFormatter = .init(), date: @escaping () -> Date = Date.init, fileHandle: @escaping (URL) throws -> FileHandle = FileHandle.init(forUpdating:)) -> FileAppender {
309+
FileAppender(
310+
url: url,
311+
date: date,
312+
dateFormatter: dateFormatter,
313+
writer: { url, data in
314+
guard let fileUpdater = try? fileHandle(url) else { return }
315+
fileUpdater.seekToEndOfFile()
316+
fileUpdater.write(data)
317+
fileUpdater.closeFile()
318+
}
319+
)
320+
}
321+
}
322+

0 commit comments

Comments
 (0)