From 99c213e83d5c4505bdbeba94061b89cfe6c93a0d Mon Sep 17 00:00:00 2001 From: Decheng Date: Wed, 20 May 2020 17:45:13 +1000 Subject: [PATCH] Create protocol ResourceFolderManager and BetaGroupFolderManager --- .../Files/BetaGroupFileManager.swift | 58 +++++++++++++++++++ .../Files/ResourceFolderManager.swift | 26 +++++++++ 2 files changed, 84 insertions(+) create mode 100644 Sources/AppStoreConnectCLI/Files/BetaGroupFileManager.swift create mode 100644 Sources/AppStoreConnectCLI/Files/ResourceFolderManager.swift diff --git a/Sources/AppStoreConnectCLI/Files/BetaGroupFileManager.swift b/Sources/AppStoreConnectCLI/Files/BetaGroupFileManager.swift new file mode 100644 index 00000000..65a482fc --- /dev/null +++ b/Sources/AppStoreConnectCLI/Files/BetaGroupFileManager.swift @@ -0,0 +1,58 @@ +// Copyright 2020 Itty Bitty Apps Pty Ltd + +import Foundation +import Files +import Yams + +struct BetaGroupFolderManager: ResourceFolderManager { + + let path: String + + func read() throws -> [BetaGroup] { + var localGroups: [BetaGroup] = [] + + for file in try Folder(path: path).files { + if file.extension == "yml" { + let group = Readers + .FileReader(format: .yaml) + .read(filePath: file.path) + + localGroups.append(group) + } + } + + return localGroups + } + + func save(_ betaGroups: [BetaGroup]) throws { + let folder = try Folder(path: "").createSubfolderIfNeeded(at: path) + + try betaGroups.forEach { + let groupFile = try folder.createFile(named: "\($0.formattedFileName).yml") + + try groupFile.write(try YAMLEncoder().encode($0)) + } + } + + func save(groupsWithTesters betaGroupWithTesters: [(BetaGroup, [BetaTester])]) throws { + + let folder = try Folder(path: "").createSubfolderIfNeeded(at: path) + + try folder.files.forEach { try $0.delete() } + + let betaGroups = try betaGroupWithTesters.map { (group: BetaGroup, testers: [BetaTester]) -> BetaGroup in + let testersFile = try folder + .createFile(named: "\(group.formattedFileName)_beta-testers.csv") + + try testersFile.write(testers.renderAsCSV()) + + var group = group + + group.testers = testersFile.path + + return group + } + + try save(betaGroups) + } +} diff --git a/Sources/AppStoreConnectCLI/Files/ResourceFolderManager.swift b/Sources/AppStoreConnectCLI/Files/ResourceFolderManager.swift new file mode 100644 index 00000000..a278c577 --- /dev/null +++ b/Sources/AppStoreConnectCLI/Files/ResourceFolderManager.swift @@ -0,0 +1,26 @@ +// Copyright 2020 Itty Bitty Apps Pty Ltd + +import Foundation + +protocol ResourceFolderManager { + associatedtype T: Codable + + var path: String { get } + + func read() throws -> [T] + + func save(_: [T]) throws +} + +protocol FileNameGettable { + var fileName: String { get } +} + +extension FileNameGettable { + var formattedFileName: String { + self.fileName + .components(separatedBy: .whitespacesAndNewlines) + .joined() + .snakeCased() ?? "file-name" + } +}