diff --git a/Sources/ResgenSwift/Analytics/Analytics.swift b/Sources/ResgenSwift/Analytics/Analytics.swift index 68999fd..2e51484 100644 --- a/Sources/ResgenSwift/Analytics/Analytics.swift +++ b/Sources/ResgenSwift/Analytics/Analytics.swift @@ -66,7 +66,13 @@ struct Analytics: ParsableCommand { print(error.description) Analytics.exit(withError: error) } - + + guard TrackerType.hasValidTarget(in: options.target) else { + let error = AnalyticsError.noValidTracker(options.target) + print(error.description) + Analytics.exit(withError: error) + } + // Check if needed to regenerate guard GeneratorChecker.shouldGenerate(force: options.forceGeneration, inputFilePath: options.inputFile, @@ -78,12 +84,3 @@ struct Analytics: ParsableCommand { return true } } - - // MARK: - Requirements - - private func checkRequirements() -> Bool { - // Check les requirements et gestion des erreurs - // Il faut que toutes les erreurs générées par Analytics soit des AnalyticsError - true - } -} diff --git a/Sources/ResgenSwift/Analytics/AnalyticsError.swift b/Sources/ResgenSwift/Analytics/AnalyticsError.swift index 9674522..b32198d 100644 --- a/Sources/ResgenSwift/Analytics/AnalyticsError.swift +++ b/Sources/ResgenSwift/Analytics/AnalyticsError.swift @@ -8,16 +8,20 @@ import Foundation enum AnalyticsError: Error { + case noValidTracker(String) case fileNotExists(String) case missingElement(String) case invalidParameter(String) - + case parseFailed(String) case writeFile(String, String) var description: String { switch self { + case .noValidTracker(let inputTargets): + return "error: [\(Analytics.toolName)] '\(inputTargets)' ne contient aucun tracker valid" + case .fileNotExists(let filename): - return "error: [\(Analytics.toolName)] File \(filename) does not exists " + return "error: [\(Analytics.toolName)] File \(filename) does not exists" case .missingElement(let element): return "error: [\(Analytics.toolName)] Missing \(element) for Matomo" @@ -25,6 +29,9 @@ enum AnalyticsError: Error { case .invalidParameter(let reason): return "error: [\(Analytics.toolName)] Invalid parameter \(reason)" + case .parseFailed(let baseError): + return "error: [\(Analytics.toolName)] Parse input file failed: \(baseError)" + case .writeFile(let subErrorDescription, let filename): return "error: [\(Analytics.toolName)] An error occured while writing content to \(filename): \(subErrorDescription)" } diff --git a/Sources/ResgenSwift/Analytics/Model/TargetType.swift b/Sources/ResgenSwift/Analytics/Model/TargetType.swift index c9b5649..412d5c3 100644 --- a/Sources/ResgenSwift/Analytics/Model/TargetType.swift +++ b/Sources/ResgenSwift/Analytics/Model/TargetType.swift @@ -19,4 +19,11 @@ enum TrackerType: CaseIterable { "firebase" } } + + static func hasValidTarget(in targets: String) -> Bool { + for tracker in Self.allCases where targets.contains(tracker.value) { + return true + } + return false + } } diff --git a/Sources/ResgenSwift/Analytics/Parser/AnalyticsFileParser.swift b/Sources/ResgenSwift/Analytics/Parser/AnalyticsFileParser.swift index f4e18ce..1137f8e 100644 --- a/Sources/ResgenSwift/Analytics/Parser/AnalyticsFileParser.swift +++ b/Sources/ResgenSwift/Analytics/Parser/AnalyticsFileParser.swift @@ -22,7 +22,8 @@ class AnalyticsFileParser { do { let tagFile = try YAMLDecoder().decode(AnalyticsFile.self, from: data) return tagFile - } catch let error { + } catch { + let error = AnalyticsError.parseFailed(error.localizedDescription) print(error.description) Analytics.exit(withError: error) } @@ -32,15 +33,15 @@ class AnalyticsFileParser { parameters.map { dtoParameter in // Type - let type = value.type.uppercasedFirst() - + let type = dtoParameter.type.uppercasedFirst() + guard type == "String" || type == "Int" || type == "Double" || type == "Bool" else { - let error = AnalyticsError.invalidParameter("type of \(value.name)") + let error = AnalyticsError.invalidParameter("type of \(dtoParameter.name)") print(error.description) Analytics.exit(withError: error) } @@ -93,7 +94,7 @@ class AnalyticsFileParser { parameters: screen.parameters ) - if target.contains(Analytics.TargetType.matomo.value) { + if target.contains(TrackerType.matomo.value) { // Path guard let path = screen.path else { @@ -120,7 +121,7 @@ class AnalyticsFileParser { parameters: event.parameters ) - if target.contains(Analytics.TargetType.matomo.value) { + if target.contains(TrackerType.matomo.value) { // Category guard let category = event.category else { let error = AnalyticsError.missingElement("event category") diff --git a/Tests/ResgenSwiftTests/Analytics/AnalyticsGeneratorTests.swift b/Tests/ResgenSwiftTests/Analytics/AnalyticsGeneratorTests.swift index 88f9883..7abe69f 100644 --- a/Tests/ResgenSwiftTests/Analytics/AnalyticsGeneratorTests.swift +++ b/Tests/ResgenSwiftTests/Analytics/AnalyticsGeneratorTests.swift @@ -51,7 +51,7 @@ final class AnalyticsGeneratorTests: XCTestCase { ] // When - AnalyticsGenerator.targets = [Analytics.TargetType.firebase] + AnalyticsGenerator.targets = [TrackerType.firebase] let extensionContent = AnalyticsGenerator.getExtensionContent(sections: [sectionOne, sectionTwo, sectionThree], tags: ["ios", "iosonly"], staticVar: false, @@ -216,7 +216,7 @@ final class AnalyticsGeneratorTests: XCTestCase { ] // When - AnalyticsGenerator.targets = [Analytics.TargetType.matomo] + AnalyticsGenerator.targets = [TrackerType.matomo] let extensionContent = AnalyticsGenerator.getExtensionContent(sections: [sectionOne, sectionTwo, sectionThree], tags: ["ios", "iosonly"], staticVar: false, @@ -409,7 +409,7 @@ final class AnalyticsGeneratorTests: XCTestCase { ] // When - AnalyticsGenerator.targets = [Analytics.TargetType.matomo, Analytics.TargetType.firebase] + AnalyticsGenerator.targets = [TrackerType.matomo, TrackerType.firebase] let extensionContent = AnalyticsGenerator.getExtensionContent(sections: [sectionOne, sectionTwo, sectionThree], tags: ["ios", "iosonly"], staticVar: false,