Fix Tests Analytics (#17)
All checks were successful
gitea-openium/resgen.swift/pipeline/head This commit looks good

Reviewed-on: #17
Reviewed-by: Thibaut Schmitt <t.schmitt@openium.fr>
Co-authored-by: Loris Perret <l.perret@openium.fr>
Co-committed-by: Loris Perret <l.perret@openium.fr>
This commit is contained in:
2025-07-17 14:11:27 +02:00
committed by Thibaut Schmitt
parent 187980933e
commit 4426091dcb
11 changed files with 475 additions and 446 deletions

View File

@@ -5,11 +5,14 @@
// Created by Loris Perret on 08/12/2023.
//
// CPD-OFF
import CoreVideo
import Foundation
import ToolCore
// Disabled cause it's a pain to handle in generated string
// swiftlint:disable type_body_length
enum AnalyticsGenerator {
@@ -89,48 +92,49 @@ enum AnalyticsGenerator {
) -> String {
"""
// Generated by ResgenSwift.\(Analytics.toolName) \(ResgenSwiftVersion)
\(Self.getImport(targets: targets))
\(Self.getAnalyticsProtocol(targets: targets))
\(Self.getTrackerTypeEnum())
\(Self.getTrackerTypeEnum(targets: targets))
// MARK: - Manager
class AnalyticsManager {
static var shared = AnalyticsManager()
private init() {}
// MARK: - Properties
var managers: [TrackerType: AnalyticsManagerProtocol] = [:]
\(Self.getEnabledContent())
\(Self.getAnalyticsProperties(targets: targets))
\(Self.getPrivateLogFunction())
"""
}
private static func getTrackerTypeEnum() -> String {
private static func getTrackerTypeEnum(targets: [TrackerType]) -> String {
var result: [String] = []
TrackerType.allCases.forEach { type in
targets.forEach { type in
result.append(" case \(type)")
}
return """
// MARK: - Traker Type
enum TrackerType: CaseIterable {
\(result.joined(separator: "\n"))
}
"""
}
private static func getEnabledContent() -> String {
"""
private var isEnabled: Bool {
@@ -140,9 +144,9 @@ enum AnalyticsGenerator {
true
}
}
// MARK: - Methods
// MARK: - Enable Methods
private func setAnalytics(enable: Bool, _ analytics: [TrackerType]) {
managers.forEach { (key, value) in
if analytics.contains(where: { type in
@@ -152,11 +156,11 @@ enum AnalyticsGenerator {
}
}
}
func enableAnalytics(_ analytics: [TrackerType] = TrackerType.allCases) {
setAnalytics(enable: true, analytics)
}
func disableAnalytics(_ analytics: [TrackerType] = TrackerType.allCases) {
setAnalytics(enable: false, analytics)
}
@@ -171,6 +175,7 @@ enum AnalyticsGenerator {
if targets.contains(TrackerType.matomo) {
result.append("import MatomoTracker")
}
if targets.contains(TrackerType.firebase) {
result.append("import FirebaseAnalytics")
}
@@ -180,13 +185,15 @@ enum AnalyticsGenerator {
private static func getPrivateLogFunction() -> String {
"""
private func logScreen(
// MARK: - Private Log Methods
private func logScreen(
name: String,
path: String,
params: [String: Any]?
) {
guard isEnabled else { return }
managers.values.forEach { manager in
manager.logScreen(
name: name,
@@ -203,7 +210,7 @@ enum AnalyticsGenerator {
params: [String: Any]?
) {
guard isEnabled else { return }
managers.values.forEach { manager in
manager.logEvent(
name: name,
@@ -235,6 +242,7 @@ enum AnalyticsGenerator {
)
""")
}
if targets.contains(TrackerType.firebase) {
content.append(" managers[TrackerType.firebase] = FirebaseAnalyticsManager()")
}
@@ -252,22 +260,22 @@ enum AnalyticsGenerator {
// MARK: - Protocol
protocol AnalyticsManagerProtocol {
func logScreen(
name: String,
path: String,
params: [String: Any]?
)
func logEvent(
name: String,
action: String,
category: String,
params: [String: Any]?
)
func setEnable(_ enable: Bool)
}
"""
var result: [String] = [proto]
@@ -280,7 +288,7 @@ enum AnalyticsGenerator {
result.append(FirebaseGenerator.service)
}
return result.joined(separator: "\n")
return result.joined(separator: "\n\n")
}
private static func getProperties(
@@ -319,3 +327,5 @@ enum AnalyticsGenerator {
"""
}
}
// CPD-ON

View File

@@ -13,11 +13,11 @@ enum FirebaseGenerator {
static var service: String {
[
FirebaseGenerator.header,
FirebaseGenerator.logScreen,
FirebaseGenerator.logEvent,
FirebaseGenerator.enable,
FirebaseGenerator.footer
Self.header,
Self.logScreen,
Self.logEvent,
Self.enable,
Self.footer
]
.joined(separator: "\n")
}
@@ -29,6 +29,9 @@ enum FirebaseGenerator {
// MARK: - Firebase
class FirebaseAnalyticsManager: AnalyticsManagerProtocol {
// MARK: - Methods
"""
}
@@ -42,11 +45,11 @@ enum FirebaseGenerator {
var parameters = [
AnalyticsParameterScreenName: name as NSObject
]
if path.isEmpty == false {
parameters["path"] = path + "/iOS" as NSObject
}
if let supplementaryParameters = params {
for (newKey, newValue) in supplementaryParameters {
if parameters.contains(where: { (key: String, value: NSObject) in
@@ -54,11 +57,11 @@ enum FirebaseGenerator {
}) {
continue
}
parameters[newKey] = newValue as? NSObject
}
}
Analytics.logEvent(
AnalyticsEventScreenView,
parameters: parameters
@@ -79,15 +82,15 @@ enum FirebaseGenerator {
var parameters: [String:NSObject] = [
AnalyticsParameterItemName: name.replacingOccurrences(of: " ", with: "_") as NSObject
]
if category.isEmpty == false {
parameters["AnalyticsParameterItemCategory"] = category as NSObject
}
if action.isEmpty == false {
parameters["action"] = action as NSObject
}
if let supplementaryParameters = params {
for (newKey, newValue) in supplementaryParameters {
if parameters.contains(where: { (key: String, value: NSObject) in
@@ -105,9 +108,10 @@ enum FirebaseGenerator {
parameters: parameters
)
}
"""
}
private static var enable: String {
"""
func setEnable(_ enable: Bool) {
@@ -115,11 +119,10 @@ enum FirebaseGenerator {
}
"""
}
private static var footer: String {
"""
}
"""
}
}

View File

@@ -5,18 +5,20 @@
// Created by Loris Perret on 05/12/2023.
//
// CPD-OFF
import Foundation
enum MatomoGenerator {
static var service: String {
[
MatomoGenerator.header,
MatomoGenerator.setup,
MatomoGenerator.logScreen,
MatomoGenerator.logEvent,
MatomoGenerator.enable,
MatomoGenerator.footer
Self.header,
Self.setup,
Self.logScreen,
Self.logEvent,
Self.enable,
Self.footer
]
.joined(separator: "\n")
}
@@ -100,10 +102,10 @@ enum MatomoGenerator {
url: nil
)
}
"""
}
private static var enable: String {
"""
func setEnable(_ enable: Bool) {
@@ -115,7 +117,8 @@ enum MatomoGenerator {
private static var footer: String {
"""
}
"""
}
}
// CPD-ON