Skip to content

Instantly share code, notes, and snippets.

@loucimj
Last active September 24, 2020 18:10
Show Gist options
  • Save loucimj/2e56e1de438b10c8657f22a9665dc9b4 to your computer and use it in GitHub Desktop.
Save loucimj/2e56e1de438b10c8657f22a9665dc9b4 to your computer and use it in GitHub Desktop.
tracking
import UIKit
var str = "Hello, playground"
class Action {
var id: String = ""
var eventData: Dictionary<String,Any> = [:]
var link: String = ""
}
enum TrackType {
case show
case event
}
protocol TrackableEvent {
var path: String { get set }
var eventData: Dictionary<String,Any> { get set }
var experiments: Dictionary<String,Any> { get set }
var trackType: TrackType { get set }
}
struct MainActionTrackEvent: TrackableEvent {
var path: String = "/mgm/v3/main_action/tap"
var eventData: Dictionary<String,Any>
var experiments: Dictionary<String,Any> = [:]
var trackType: TrackType = .event
init(eventData: Dictionary<String,Any>) {
self.eventData = eventData
self.eventData["from"] = MGMUseCaseController.shared.from
}
}
struct ShareActionTrackEvent: TrackableEvent {
var path: String = "/mgm/v3/share_action/tap"
var eventData: Dictionary<String,Any>
var experiments: Dictionary<String,Any> = [:]
var trackType: TrackType = .event
init(eventData: Dictionary<String,Any>, id: String?) {
self.eventData = eventData
self.eventData["from"] = MGMUseCaseController.shared.from
self.eventData["id"] = id
}
}
struct ShowPromoterTrackEvent: TrackableEvent {
var path: String = "/mgm/v3/promoter"
var eventData: Dictionary<String,Any>
var experiments: Dictionary<String,Any> = [:]
var trackType: TrackType = .show
init(eventData: Dictionary<String,Any>, programId: String?) {
self.eventData = eventData
self.eventData["from"] = MGMUseCaseController.shared.from
}
}
class Tracker {
func track(event: TrackableEvent) {
//melidata
//analytics
print("Tracked en " + event.path)
}
}
class TrackerSpy: Tracker {
var trackableEvent: TrackableEvent?
override func track(event: TrackableEvent) {
self.trackableEvent = event
}
}
class MGMUseCaseController {
static var shared: MGMUseCaseController = MGMUseCaseController()
var from: String?
}
class ViewController: UIViewController {
var from: String?
var tracker: Tracker = Tracker()
override func viewDidLoad() {
super.viewDidLoad()
MGMUseCaseController.shared.from = from
let view = ShareSectionItemView(action: Action())
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
tracker.track(event: ShowPromoterTrackEvent(eventData: [:], programId: "1234"))
}
}
class ShareSectionItemView {
let tracker: Tracker
init(action: Action, tracker: Tracker = Tracker()) {
self.tracker = tracker
}
func didTapView(action: Action) {
tracker.track(event: ShareActionTrackEvent(eventData: action.eventData, id: action.id))
}
}
class ViewControllerTest {
func test_if_tracking_is_ok() -> Bool {
let viewController = ViewController()
let trackerSpy = TrackerSpy()
viewController.tracker = trackerSpy
viewController.viewDidLoad()
viewController.viewDidAppear(false)
if (trackerSpy.trackableEvent?.eventData["program_id"] as? String == "1234") {
return true
}
return false
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment