Add parse error
This commit is contained in:
parent
31d20bfe2e
commit
f0d9ac3337
@ -67,6 +67,12 @@ struct Analytics: ParsableCommand {
|
|||||||
Analytics.exit(withError: error)
|
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
|
// Check if needed to regenerate
|
||||||
guard GeneratorChecker.shouldGenerate(force: options.forceGeneration,
|
guard GeneratorChecker.shouldGenerate(force: options.forceGeneration,
|
||||||
inputFilePath: options.inputFile,
|
inputFilePath: options.inputFile,
|
||||||
@ -78,12 +84,3 @@ struct Analytics: ParsableCommand {
|
|||||||
return true
|
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
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
@ -8,14 +8,18 @@
|
|||||||
import Foundation
|
import Foundation
|
||||||
|
|
||||||
enum AnalyticsError: Error {
|
enum AnalyticsError: Error {
|
||||||
|
case noValidTracker(String)
|
||||||
case fileNotExists(String)
|
case fileNotExists(String)
|
||||||
case missingElement(String)
|
case missingElement(String)
|
||||||
case invalidParameter(String)
|
case invalidParameter(String)
|
||||||
|
case parseFailed(String)
|
||||||
case writeFile(String, String)
|
case writeFile(String, String)
|
||||||
|
|
||||||
var description: String {
|
var description: String {
|
||||||
switch self {
|
switch self {
|
||||||
|
case .noValidTracker(let inputTargets):
|
||||||
|
return "error: [\(Analytics.toolName)] '\(inputTargets)' ne contient aucun tracker valid"
|
||||||
|
|
||||||
case .fileNotExists(let filename):
|
case .fileNotExists(let filename):
|
||||||
return "error: [\(Analytics.toolName)] File \(filename) does not exists"
|
return "error: [\(Analytics.toolName)] File \(filename) does not exists"
|
||||||
|
|
||||||
@ -25,6 +29,9 @@ enum AnalyticsError: Error {
|
|||||||
case .invalidParameter(let reason):
|
case .invalidParameter(let reason):
|
||||||
return "error: [\(Analytics.toolName)] Invalid parameter \(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):
|
case .writeFile(let subErrorDescription, let filename):
|
||||||
return "error: [\(Analytics.toolName)] An error occured while writing content to \(filename): \(subErrorDescription)"
|
return "error: [\(Analytics.toolName)] An error occured while writing content to \(filename): \(subErrorDescription)"
|
||||||
}
|
}
|
||||||
|
@ -19,4 +19,11 @@ enum TrackerType: CaseIterable {
|
|||||||
"firebase"
|
"firebase"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static func hasValidTarget(in targets: String) -> Bool {
|
||||||
|
for tracker in Self.allCases where targets.contains(tracker.value) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -22,7 +22,8 @@ class AnalyticsFileParser {
|
|||||||
do {
|
do {
|
||||||
let tagFile = try YAMLDecoder().decode(AnalyticsFile.self, from: data)
|
let tagFile = try YAMLDecoder().decode(AnalyticsFile.self, from: data)
|
||||||
return tagFile
|
return tagFile
|
||||||
} catch let error {
|
} catch {
|
||||||
|
let error = AnalyticsError.parseFailed(error.localizedDescription)
|
||||||
print(error.description)
|
print(error.description)
|
||||||
Analytics.exit(withError: error)
|
Analytics.exit(withError: error)
|
||||||
}
|
}
|
||||||
@ -32,7 +33,7 @@ class AnalyticsFileParser {
|
|||||||
parameters.map { dtoParameter in
|
parameters.map { dtoParameter in
|
||||||
// Type
|
// Type
|
||||||
|
|
||||||
let type = value.type.uppercasedFirst()
|
let type = dtoParameter.type.uppercasedFirst()
|
||||||
|
|
||||||
guard
|
guard
|
||||||
type == "String" ||
|
type == "String" ||
|
||||||
@ -40,7 +41,7 @@ class AnalyticsFileParser {
|
|||||||
type == "Double" ||
|
type == "Double" ||
|
||||||
type == "Bool"
|
type == "Bool"
|
||||||
else {
|
else {
|
||||||
let error = AnalyticsError.invalidParameter("type of \(value.name)")
|
let error = AnalyticsError.invalidParameter("type of \(dtoParameter.name)")
|
||||||
print(error.description)
|
print(error.description)
|
||||||
Analytics.exit(withError: error)
|
Analytics.exit(withError: error)
|
||||||
}
|
}
|
||||||
@ -93,7 +94,7 @@ class AnalyticsFileParser {
|
|||||||
parameters: screen.parameters
|
parameters: screen.parameters
|
||||||
)
|
)
|
||||||
|
|
||||||
if target.contains(Analytics.TargetType.matomo.value) {
|
if target.contains(TrackerType.matomo.value) {
|
||||||
// Path
|
// Path
|
||||||
|
|
||||||
guard let path = screen.path else {
|
guard let path = screen.path else {
|
||||||
@ -120,7 +121,7 @@ class AnalyticsFileParser {
|
|||||||
parameters: event.parameters
|
parameters: event.parameters
|
||||||
)
|
)
|
||||||
|
|
||||||
if target.contains(Analytics.TargetType.matomo.value) {
|
if target.contains(TrackerType.matomo.value) {
|
||||||
// Category
|
// Category
|
||||||
guard let category = event.category else {
|
guard let category = event.category else {
|
||||||
let error = AnalyticsError.missingElement("event category")
|
let error = AnalyticsError.missingElement("event category")
|
||||||
|
@ -51,7 +51,7 @@ final class AnalyticsGeneratorTests: XCTestCase {
|
|||||||
]
|
]
|
||||||
|
|
||||||
// When
|
// When
|
||||||
AnalyticsGenerator.targets = [Analytics.TargetType.firebase]
|
AnalyticsGenerator.targets = [TrackerType.firebase]
|
||||||
let extensionContent = AnalyticsGenerator.getExtensionContent(sections: [sectionOne, sectionTwo, sectionThree],
|
let extensionContent = AnalyticsGenerator.getExtensionContent(sections: [sectionOne, sectionTwo, sectionThree],
|
||||||
tags: ["ios", "iosonly"],
|
tags: ["ios", "iosonly"],
|
||||||
staticVar: false,
|
staticVar: false,
|
||||||
@ -216,7 +216,7 @@ final class AnalyticsGeneratorTests: XCTestCase {
|
|||||||
]
|
]
|
||||||
|
|
||||||
// When
|
// When
|
||||||
AnalyticsGenerator.targets = [Analytics.TargetType.matomo]
|
AnalyticsGenerator.targets = [TrackerType.matomo]
|
||||||
let extensionContent = AnalyticsGenerator.getExtensionContent(sections: [sectionOne, sectionTwo, sectionThree],
|
let extensionContent = AnalyticsGenerator.getExtensionContent(sections: [sectionOne, sectionTwo, sectionThree],
|
||||||
tags: ["ios", "iosonly"],
|
tags: ["ios", "iosonly"],
|
||||||
staticVar: false,
|
staticVar: false,
|
||||||
@ -409,7 +409,7 @@ final class AnalyticsGeneratorTests: XCTestCase {
|
|||||||
]
|
]
|
||||||
|
|
||||||
// When
|
// When
|
||||||
AnalyticsGenerator.targets = [Analytics.TargetType.matomo, Analytics.TargetType.firebase]
|
AnalyticsGenerator.targets = [TrackerType.matomo, TrackerType.firebase]
|
||||||
let extensionContent = AnalyticsGenerator.getExtensionContent(sections: [sectionOne, sectionTwo, sectionThree],
|
let extensionContent = AnalyticsGenerator.getExtensionContent(sections: [sectionOne, sectionTwo, sectionThree],
|
||||||
tags: ["ios", "iosonly"],
|
tags: ["ios", "iosonly"],
|
||||||
staticVar: false,
|
staticVar: false,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user