From 6b1089235aeae160b4daa32575712a5264843012 Mon Sep 17 00:00:00 2001 From: Javier Cicchelli Date: Fri, 16 Dec 2022 00:09:50 +0100 Subject: [PATCH] Implemented the DateAdapter and the SizeAdapter adapter for the Browse module. --- .../Browse/Logic/Adapters/DateAdapter.swift | 49 +++++++++++++++++ .../Browse/Logic/Adapters/SizeAdapter.swift | 54 +++++++++++++++++++ 2 files changed, 103 insertions(+) create mode 100644 Modules/Sources/Browse/Logic/Adapters/DateAdapter.swift create mode 100644 Modules/Sources/Browse/Logic/Adapters/SizeAdapter.swift diff --git a/Modules/Sources/Browse/Logic/Adapters/DateAdapter.swift b/Modules/Sources/Browse/Logic/Adapters/DateAdapter.swift new file mode 100644 index 0000000..ba42356 --- /dev/null +++ b/Modules/Sources/Browse/Logic/Adapters/DateAdapter.swift @@ -0,0 +1,49 @@ +// +// DateAdapter.swift +// Browse +// +// Created by Javier Cicchelli on 15/12/2022. +// Copyright © 2022 Röck+Cöde. All rights reserved. +// + +import Foundation + +struct DateAdapter { + + // MARK: Properties + + private let dateFormatter: DateFormatter = .dateTimeFormatter + + // MARK: Functions + + func callAsFunction(value: Date?) -> String { + if let value { + return dateFormatter.string(from: value) + } else { + return .Constants.noValue + } + } + +} + +// MARK: - DateFormatter+Formats + +private extension DateFormatter { + static let dateTimeFormatter = { + let formatter = DateFormatter() + + formatter.dateStyle = .long + formatter.timeStyle = .short + formatter.locale = .current + + return formatter + }() +} + +// MARK: - String+Constants + +private extension String { + enum Constants { + static let noValue = "-" + } +} diff --git a/Modules/Sources/Browse/Logic/Adapters/SizeAdapter.swift b/Modules/Sources/Browse/Logic/Adapters/SizeAdapter.swift new file mode 100644 index 0000000..55fa92f --- /dev/null +++ b/Modules/Sources/Browse/Logic/Adapters/SizeAdapter.swift @@ -0,0 +1,54 @@ +// +// SizeAdapter.swift +// Browse +// +// Created by Javier Cicchelli on 15/12/2022. +// Copyright © 2022 Röck+Cöde. All rights reserved. +// + +import Foundation + +struct SizeAdapter { + + // MARK: Properties + + private let measurementFormatter: MeasurementFormatter = .informationSizeFormatter + + // MARK: Functions + + func callAsFunction(value: Int?) -> String { + guard let value else { return .Constants.noValue } + + var sizeInBytes = Measurement( + value: Double(value), + unit: UnitInformationStorage.bytes + ) + + return measurementFormatter.string( + from: sizeInBytes.converted(to: .megabytes) + ) + } + +} + +// MARK: - DateFormatter+Formats + +private extension MeasurementFormatter { + static let informationSizeFormatter = { + let formatter = MeasurementFormatter() + + formatter.unitStyle = .medium + formatter.numberFormatter.maximumFractionDigits = 2 + formatter.locale = .current + + return formatter + }() +} + +// MARK: - String+Constants + +private extension String { + enum Constants { + static let noValue = "-" + } +}