Skip to content

Commit e4dcfa8

Browse files
authored
Remove unnecessary Optionals, IUOs, and the like from Event (#88)
2 parents 8f17bb1 + f3e7a85 commit e4dcfa8

File tree

3 files changed

+56
-31
lines changed

3 files changed

+56
-31
lines changed

Sources/Event.swift

+31-29
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,19 @@
11
import Foundation
22

33
class Event {
4-
var action: String
5-
var url: String
6-
var urlref: String
7-
var data: Dictionary<String, Any>!
8-
var metadata: ParselyMetadata?
9-
var idsite: String
10-
var extra_data: Dictionary<String, Any>?
11-
var session_id: Int?
12-
var session_timestamp: UInt64?
13-
var session_url: String?
14-
var session_referrer: String?
15-
var last_session_timestamp: UInt64?
16-
var parsely_site_uuid: String?
17-
var rand: UInt64!
4+
let action: String
5+
let url: String
6+
let urlref: String
7+
let metadata: ParselyMetadata?
8+
let idsite: String
9+
let extra_data: Dictionary<String, Any>
10+
private(set) var session_id: Int?
11+
private(set) var session_timestamp: UInt64?
12+
private(set) var session_url: String?
13+
private(set) var session_referrer: String?
14+
private(set) var last_session_timestamp: UInt64?
15+
private(set) var parsely_site_uuid: String?
16+
let rand: UInt64
1817

1918
init(_ action: String,
2019
url: String,
@@ -33,14 +32,14 @@ class Event {
3332
self.urlref = urlref ?? ""
3433
self.idsite = idsite
3534
self.metadata = metadata
36-
self.extra_data = extra_data
35+
self.extra_data = extra_data ?? [:]
3736
self.session_id = session_id
3837
self.session_timestamp = session_timestamp
3938
self.session_url = session_url
4039
self.session_referrer = session_referrer
4140
self.last_session_timestamp = last_session_timestamp
41+
// Note that, while this value will likely always be different at runtime, is not truly random.
4242
self.rand = Date().millisecondsSince1970
43-
4443
}
4544

4645
func setSessionInfo(session: Dictionary<String, Any?>) {
@@ -52,9 +51,11 @@ class Event {
5251
}
5352

5453
func setVisitorInfo(visitorInfo: Dictionary<String, Any>?) {
55-
if let visitor = visitorInfo {
56-
self.parsely_site_uuid = (visitor["id"] as! String)
54+
guard let visitor = visitorInfo?["id"] as? String else {
55+
return
5756
}
57+
58+
parsely_site_uuid = visitor
5859
}
5960

6061
func toDict() -> Dictionary<String,Any> {
@@ -65,31 +66,32 @@ class Event {
6566
"idsite": self.idsite,
6667
]
6768

68-
data = extra_data ?? [:]
69+
var data: [String: Any] = extra_data
6970
data["ts"] = self.rand
7071

71-
if parsely_site_uuid != nil {
72-
data["parsely_site_uuid"] = parsely_site_uuid!
72+
if let parsely_site_uuid {
73+
data["parsely_site_uuid"] = parsely_site_uuid
7374
}
7475

7576
params["data"] = data
7677

77-
7878
if let metas = self.metadata {
7979
let metasDict = metas.toDict()
8080
if !metasDict.isEmpty {
8181
params["metadata"] = metasDict
8282
}
8383
}
84-
85-
if self.session_id != nil {
86-
params["sid"] = self.session_id
87-
params["sts"] = self.session_timestamp
88-
params["surl"] = self.session_url
89-
params["sref"] = self.session_referrer
90-
params["slts"] = self.last_session_timestamp
84+
85+
guard let session_id else {
86+
return params
9187
}
9288

89+
params["sid"] = session_id
90+
params["sts"] = session_timestamp
91+
params["surl"] = session_url
92+
params["sref"] = session_referrer
93+
params["slts"] = last_session_timestamp
94+
9395
return params
9496
}
9597

Tests/EventTests.swift

+24-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import Nimble
12
@testable import ParselyAnalytics
23
import XCTest
34

@@ -66,10 +67,32 @@ class EventTests: XCTestCase {
6667
"The rand of a newly-created Event should be a non-ancient timestamp")
6768
XCTAssert(eventUnderTest.metadata! === testMetadata,
6869
"The metadata procided in Event initialization should be stored properly")
69-
let extraDataIsEquivalent: Bool = NSDictionary(dictionary: eventUnderTest.extra_data!).isEqual(to: extraData)
70+
let extraDataIsEquivalent: Bool = NSDictionary(dictionary: eventUnderTest.extra_data).isEqual(to: extraData)
7071
XCTAssert(extraDataIsEquivalent, "The extra_data procided in Event initialization should be stored properly")
7172
}
7273

74+
func testEventDefaultValues() {
75+
let event = Event(
76+
"action",
77+
url: "a_url",
78+
urlref: .none,
79+
metadata: .none,
80+
extra_data: .none
81+
)
82+
83+
XCTAssertEqual(event.action, "action")
84+
XCTAssertEqual(event.url, "a_url") // Note that this String is not a valid URL...
85+
XCTAssertEqual(event.urlref, "")
86+
XCTAssertEqual(event.idsite, "")
87+
XCTAssertNil(event.metadata)
88+
XCTAssertEqual(event.session_id, .none)
89+
XCTAssertEqual(event.session_timestamp, .none)
90+
XCTAssertEqual(event.session_referrer, .none)
91+
XCTAssertEqual(event.session_url, .none)
92+
XCTAssertEqual(event.last_session_timestamp, .none)
93+
expect(event.extra_data).to(beEmpty())
94+
}
95+
7396
func testHeartbeatEvents() {
7497
let event = Heartbeat(
7598
"heartbeat",

Tests/RequestBuilderTests.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,6 @@ class RequestBuilderTests: XCTestCase {
8686
// be in the format
8787
//
8888
// xctest/<Xcode version> iOS/<iOS version> (<architecture>)
89-
expect(RequestBuilder.getUserAgent()).to(match("xctest\\/\\d+\\.\\d+ iOS\\/\\d+\\.\\d+ (.*)"))
89+
expect(RequestBuilder.getUserAgent()).to(match("xctest\\/\\d+\\.\\d+(\\.\\d+)? iOS\\/\\d+\\.\\d+ (.*)"))
9090
}
9191
}

0 commit comments

Comments
 (0)