diff --git a/SampleFiles/Tags/Generated/Analytics+GenAllScript.swift b/SampleFiles/Tags/Generated/Analytics+GenAllScript.swift index 23b104a..95f5601 100644 --- a/SampleFiles/Tags/Generated/Analytics+GenAllScript.swift +++ b/SampleFiles/Tags/Generated/Analytics+GenAllScript.swift @@ -1,7 +1,7 @@ // Generated by ResgenSwift.Analytics 1.2 import MatomoTracker -import Firebase +import FirebaseAnalytics // MARK: - Protocol @@ -181,7 +181,7 @@ class AnalyticsManager { name: "s1 def two", action: "test", category: "test", - params: [] + params: [:] ) } diff --git a/Sources/ResgenSwift/Analytics/Analytics.swift b/Sources/ResgenSwift/Analytics/Analytics.swift index dd9a61c..ef42c9c 100644 --- a/Sources/ResgenSwift/Analytics/Analytics.swift +++ b/Sources/ResgenSwift/Analytics/Analytics.swift @@ -35,6 +35,9 @@ struct Analytics: ParsableCommand { print("[\(Self.toolName)] Will use inputFile \(options.inputFile) to generate analytics for target: \(options.target)") print("[\(Self.toolName)] Will generate analytics") + // Check requirements + guard checkRequirements() else { return } + // Parse input file let sections = AnalyticsFileParser.parse(options.inputFile, target: options.target) @@ -48,6 +51,29 @@ struct Analytics: ParsableCommand { print("[\(Self.toolName)] Analytics generated") } + + // MARK: - Requirements + + private func checkRequirements() -> Bool { + let fileManager = FileManager() + + // Input file + guard fileManager.fileExists(atPath: options.inputFile) else { + let error = AnalyticsError.fileNotExists(options.inputFile) + print(error.description) + Analytics.exit(withError: error) + } + + // Check if needed to regenerate + guard GeneratorChecker.shouldGenerate(force: options.forceGeneration, + inputFilePath: options.inputFile, + extensionFilePath: options.extensionFilePath) else { + print("[\(Self.toolName)] Analytics are already up to date :) ") + return false + } + + return true + } } extension Analytics { diff --git a/Sources/ResgenSwift/Analytics/AnalyticsError.swift b/Sources/ResgenSwift/Analytics/AnalyticsError.swift new file mode 100644 index 0000000..9674522 --- /dev/null +++ b/Sources/ResgenSwift/Analytics/AnalyticsError.swift @@ -0,0 +1,32 @@ +// +// AnalyticsError.swift +// +// +// Created by Loris Perret on 11/12/2023. +// + +import Foundation + +enum AnalyticsError: Error { + case fileNotExists(String) + case missingElement(String) + case invalidParameter(String) + + case writeFile(String, String) + + var description: String { + switch self { + case .fileNotExists(let filename): + return "error: [\(Analytics.toolName)] File \(filename) does not exists " + + case .missingElement(let element): + return "error: [\(Analytics.toolName)] Missing \(element) for Matomo" + + case .invalidParameter(let reason): + return "error: [\(Analytics.toolName)] Invalid parameter \(reason)" + + 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/Generator/AnalyticsGenerator.swift b/Sources/ResgenSwift/Analytics/Generator/AnalyticsGenerator.swift index 93fc1e8..cd7adb3 100644 --- a/Sources/ResgenSwift/Analytics/Generator/AnalyticsGenerator.swift +++ b/Sources/ResgenSwift/Analytics/Generator/AnalyticsGenerator.swift @@ -33,9 +33,9 @@ class AnalyticsGenerator { do { try extensionFileContent.write(to: extensionFilePathURL, atomically: false, encoding: .utf8) } catch (let error) { - let error = StringiumError.writeFile(extensionFilePath, error.localizedDescription) + let error = AnalyticsError.writeFile(extensionFilePath, error.localizedDescription) print(error.description) - Stringium.exit(withError: error) + Analytics.exit(withError: error) } } diff --git a/Sources/ResgenSwift/Analytics/Parser/AnalyticsFileParser.swift b/Sources/ResgenSwift/Analytics/Parser/AnalyticsFileParser.swift index 7b57d17..0ad912e 100644 --- a/Sources/ResgenSwift/Analytics/Parser/AnalyticsFileParser.swift +++ b/Sources/ResgenSwift/Analytics/Parser/AnalyticsFileParser.swift @@ -14,15 +14,15 @@ class AnalyticsFileParser { private static func parseYaml() -> AnalyticsFile { guard let data = FileManager().contents(atPath: inputFile) else { - let error = GenerateError.fileNotExists(inputFile) - Generate.exit(withError: error) + let error = AnalyticsError.fileNotExists(inputFile) + Analytics.exit(withError: error) } do { let tagFile = try YAMLDecoder().decode(AnalyticsFile.self, from: data) return tagFile } catch let error { - Generate.exit(withError: error) + Analytics.exit(withError: error) } } @@ -40,8 +40,8 @@ class AnalyticsFileParser { type == "Double" || type == "Bool" else { - let error = GenerateError.invalidParameter("type of \(value.name)") - Generate.exit(withError: error) + let error = AnalyticsError.invalidParameter("type of \(value.name)") + Analytics.exit(withError: error) } let parameter: AnalyticsParameter = AnalyticsParameter(name: value.name, type: type) @@ -95,8 +95,8 @@ class AnalyticsFileParser { // Path guard let path = screen.path else { - let error = GenerateError.missingElement("screen path") - Generate.exit(withError: error) + let error = AnalyticsError.missingElement("screen path") + Analytics.exit(withError: error) } definition.path = path @@ -125,8 +125,8 @@ class AnalyticsFileParser { // Category guard let category = event.category else { - let error = GenerateError.missingElement("event category") - Generate.exit(withError: error) + let error = AnalyticsError.missingElement("event category") + Analytics.exit(withError: error) } definition.category = category @@ -134,8 +134,8 @@ class AnalyticsFileParser { // Action guard let action = event.action else { - let error = GenerateError.missingElement("event action") - Generate.exit(withError: error) + let error = AnalyticsError.missingElement("event action") + Analytics.exit(withError: error) } definition.action = action diff --git a/Sources/ResgenSwift/Generate/GenerateError.swift b/Sources/ResgenSwift/Generate/GenerateError.swift index e6bab8c..2ebc045 100644 --- a/Sources/ResgenSwift/Generate/GenerateError.swift +++ b/Sources/ResgenSwift/Generate/GenerateError.swift @@ -13,11 +13,6 @@ enum GenerateError: Error { case commandError([String], String) case writeFile(String, String) - // Analytics - - case missingElement(String) - case invalidParameter(String) - var description: String { switch self { case .fileNotExists(let filename): @@ -34,12 +29,6 @@ enum GenerateError: Error { case .writeFile(let filename, let info): return "error: [\(Generate.toolName)] An error occured while writing file in \(filename): \(info)" - - case .missingElement(let element): - return "error: [\(Generate.toolName)] Missing \(element) for Matomo" - - case .invalidParameter(let reason): - return "error: [\(Generate.toolName)] Invalid parameter \(reason)" } } }