Skip to content
This repository was archived by the owner on Sep 15, 2025. It is now read-only.

Commit 1de393b

Browse files
committed
Update Dependencies
Merge remote-tracking branch 'origin/develop'
2 parents ff85847 + bae644c commit 1de393b

File tree

4 files changed

+164
-29
lines changed

4 files changed

+164
-29
lines changed

WordPressKit.podspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
Pod::Spec.new do |s|
22
s.name = "WordPressKit"
3-
s.version = "4.1.1"
3+
s.version = "4.1.2-beta.2"
44
s.summary = "WordPressKit offers a clean and simple WordPress.com and WordPress.org API."
55

66
s.description = <<-DESC

WordPressKit/StatsServiceRemoteV2.swift

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -69,10 +69,9 @@ public class StatsServiceRemoteV2: ServiceRemoteWordPressComREST {
6969
let path = self.path(forEndpoint: "sites/\(siteID)/\(pathComponent)/", withVersion: ._1_1)
7070

7171
let staticProperties = ["period": period.stringValue,
72-
"date": periodDataQueryDateFormatter.string(from: endingOn),
73-
"max": limit as AnyObject] as [String: AnyObject]
72+
"date": periodDataQueryDateFormatter.string(from: endingOn)] as [String: AnyObject]
7473

75-
let classProperties = TimeStatsType.queryProperties(with: endingOn, period: period) as [String: AnyObject]
74+
let classProperties = TimeStatsType.queryProperties(with: endingOn, period: period, maxCount: limit) as [String: AnyObject]
7675

7776
let properties = staticProperties.merging(classProperties) { val1, _ in
7877
return val1
@@ -263,13 +262,13 @@ public protocol StatsTimeIntervalData {
263262

264263
init?(date: Date, period: StatsPeriodUnit, jsonDictionary: [String: AnyObject])
265264

266-
static func queryProperties(with date: Date, period: StatsPeriodUnit) -> [String: String]
265+
static func queryProperties(with date: Date, period: StatsPeriodUnit, maxCount: Int) -> [String: String]
267266
}
268267

269268
extension StatsTimeIntervalData {
270269

271-
public static func queryProperties(with date: Date, period: StatsPeriodUnit) -> [String: String] {
272-
return [:]
270+
public static func queryProperties(with date: Date, period: StatsPeriodUnit, maxCount: Int) -> [String: String] {
271+
return ["max": String(maxCount)]
273272
}
274273

275274
// Most of the responses for time data come in a unwieldy format, that requires awkwkard unwrapping

WordPressKit/Time Interval/StatsSummaryTimeIntervalData.swift

Lines changed: 113 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -42,10 +42,10 @@ extension StatsSummaryTimeIntervalData: StatsTimeIntervalData {
4242
return "stats/visits"
4343
}
4444

45-
public static func queryProperties(with date: Date, period: StatsPeriodUnit) -> [String: String] {
46-
return ["quantity": "10",
47-
"stat_fields": "views,visitors,likes,comments",
48-
"unit": period.stringValue]
45+
public static func queryProperties(with date: Date, period: StatsPeriodUnit, maxCount: Int) -> [String : String] {
46+
return ["unit": period.stringValue,
47+
"quantity": String(maxCount),
48+
"stat_fields": "views,visitors,comments"]
4949
}
5050

5151
public init?(date: Date, period: StatsPeriodUnit, jsonDictionary: [String : AnyObject]) {
@@ -70,7 +70,6 @@ extension StatsSummaryTimeIntervalData: StatsTimeIntervalData {
7070
let periodIndex = fieldsArray.firstIndex(of: "period"),
7171
let viewsIndex = fieldsArray.firstIndex(of: "views"),
7272
let visitorsIndex = fieldsArray.firstIndex(of: "visitors"),
73-
let likesIndex = fieldsArray.firstIndex(of: "likes"),
7473
let commentsIndex = fieldsArray.firstIndex(of: "comments")
7574
else {
7675
return nil
@@ -83,7 +82,7 @@ extension StatsSummaryTimeIntervalData: StatsTimeIntervalData {
8382
periodIndex: periodIndex,
8483
viewsIndex: viewsIndex,
8584
visitorsIndex: visitorsIndex,
86-
likesIndex: likesIndex,
85+
likesIndex: nil,
8786
commentsIndex: commentsIndex) }
8887
}
8988
}
@@ -92,23 +91,61 @@ private extension StatsSummaryData {
9291
init?(dataArray: [Any],
9392
period: StatsPeriodUnit,
9493
periodIndex: Int,
95-
viewsIndex: Int,
96-
visitorsIndex: Int,
97-
likesIndex: Int,
98-
commentsIndex: Int) {
94+
viewsIndex: Int?,
95+
visitorsIndex: Int?,
96+
likesIndex: Int?,
97+
commentsIndex: Int?) {
98+
9999
guard
100100
let periodString = dataArray[periodIndex] as? String,
101-
let periodStart = type(of: self).parsedDate(from: periodString, for: period),
102-
let viewsCount = dataArray[viewsIndex] as? Int,
103-
let visitorsCount = dataArray[visitorsIndex] as? Int,
104-
let likesCount = dataArray[likesIndex] as? Int,
105-
let commentsCount = dataArray[commentsIndex] as? Int
106-
else {
101+
let periodStart = type(of: self).parsedDate(from: periodString, for: period) else {
102+
return nil
103+
}
104+
105+
let viewsCount: Int
106+
let visitorsCount: Int
107+
let likesCount: Int
108+
let commentsCount: Int
109+
110+
if let viewsIndex = viewsIndex {
111+
guard let count = dataArray[viewsIndex] as? Int else {
112+
return nil
113+
}
114+
viewsCount = count
115+
} else {
116+
viewsCount = 0
117+
}
118+
119+
if let visitorsIndex = visitorsIndex {
120+
guard let count = dataArray[visitorsIndex] as? Int else {
121+
return nil
122+
}
123+
visitorsCount = count
124+
} else {
125+
visitorsCount = 0
126+
}
127+
128+
if let likesIndex = likesIndex {
129+
guard let count = dataArray[likesIndex] as? Int else {
130+
return nil
131+
}
132+
likesCount = count
133+
} else {
134+
likesCount = 0
135+
}
136+
137+
if let commentsIndex = commentsIndex {
138+
guard let count = dataArray[commentsIndex] as? Int else {
107139
return nil
140+
}
141+
commentsCount = count
142+
} else {
143+
commentsCount = 0
108144
}
109145

110146
self.period = period
111147
self.periodStartDate = periodStart
148+
112149
self.viewsCount = viewsCount
113150
self.visitorsCount = visitorsCount
114151
self.likesCount = likesCount
@@ -147,3 +184,63 @@ private extension StatsSummaryData {
147184
return df
148185
}
149186
}
187+
188+
189+
/// So this is very awkward and neccessiated by our API. Turns out, calculating likes
190+
/// for long periods of times (months/years) on large sites takes _ages_ (up to a minute sometimes).
191+
/// Thankfully, calculating views/visitors/comments takes a much shorter time. (~2s, which is still suuuuuper long, but acceptable.)
192+
/// We don't want to wait a whole minute to display the rest of the data, so we fetch the likes separately.
193+
public struct StatsLikesSummaryTimeIntervalData {
194+
195+
public let period: StatsPeriodUnit
196+
public let periodEndDate: Date
197+
198+
public let summaryData: [StatsSummaryData]
199+
200+
public init(period: StatsPeriodUnit,
201+
periodEndDate: Date,
202+
summaryData: [StatsSummaryData]) {
203+
self.period = period
204+
self.periodEndDate = periodEndDate
205+
self.summaryData = summaryData
206+
}
207+
}
208+
209+
extension StatsLikesSummaryTimeIntervalData: StatsTimeIntervalData {
210+
211+
public static var pathComponent: String {
212+
return "stats/visits"
213+
}
214+
215+
public static func queryProperties(with date: Date, period: StatsPeriodUnit, maxCount: Int) -> [String : String] {
216+
return ["unit": period.stringValue,
217+
"quantity": String(maxCount),
218+
"stat_fields": "likes"]
219+
}
220+
221+
public init?(date: Date, period: StatsPeriodUnit, jsonDictionary: [String : AnyObject]) {
222+
guard
223+
let fieldsArray = jsonDictionary["fields"] as? [String],
224+
let data = jsonDictionary["data"] as? [[Any]]
225+
else {
226+
return nil
227+
}
228+
229+
guard
230+
let periodIndex = fieldsArray.firstIndex(of: "period"),
231+
let likesIndex = fieldsArray.firstIndex(of: "likes") else {
232+
return nil
233+
}
234+
235+
self.period = period
236+
self.periodEndDate = date
237+
self.summaryData = data.compactMap { StatsSummaryData(dataArray: $0,
238+
period: period,
239+
periodIndex: periodIndex,
240+
viewsIndex: nil,
241+
visitorsIndex: nil,
242+
likesIndex: likesIndex,
243+
commentsIndex: nil) }
244+
}
245+
}
246+

WordPressKitTests/StatsRemoteV2Tests.swift

Lines changed: 45 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -381,15 +381,15 @@ class StatsRemoteV2Tests: RemoteTestCase, RESTTestable {
381381

382382
XCTAssertEqual(summary?.summaryData[0].viewsCount, 5140)
383383
XCTAssertEqual(summary?.summaryData[0].visitorsCount, 3560)
384-
XCTAssertEqual(summary?.summaryData[0].likesCount, 70)
384+
XCTAssertEqual(summary?.summaryData[0].likesCount, 0)
385385
XCTAssertEqual(summary?.summaryData[0].commentsCount, 1)
386386

387387
let nineDaysAgo = Calendar.autoupdatingCurrent.date(byAdding: .day, value: -9, to: date)!
388388
XCTAssertEqual(summary?.summaryData[0].periodStartDate, nineDaysAgo)
389389

390390
XCTAssertEqual(summary?.summaryData[9].viewsCount, 3244)
391391
XCTAssertEqual(summary?.summaryData[9].visitorsCount, 2127)
392-
XCTAssertEqual(summary?.summaryData[9].likesCount, 25)
392+
XCTAssertEqual(summary?.summaryData[9].likesCount, 0)
393393
XCTAssertEqual(summary?.summaryData[9].commentsCount, 0)
394394
XCTAssertEqual(summary?.summaryData[9].periodStartDate, date)
395395

@@ -490,7 +490,7 @@ class StatsRemoteV2Tests: RemoteTestCase, RESTTestable {
490490

491491
XCTAssertEqual(summary?.summaryData[0].viewsCount, 32603)
492492
XCTAssertEqual(summary?.summaryData[0].visitorsCount, 23205)
493-
XCTAssertEqual(summary?.summaryData[0].likesCount, 855)
493+
XCTAssertEqual(summary?.summaryData[0].likesCount, 0)
494494
XCTAssertEqual(summary?.summaryData[0].commentsCount, 44)
495495

496496
let dec17 = DateComponents(year: 2018, month: 12, day: 17)
@@ -499,7 +499,7 @@ class StatsRemoteV2Tests: RemoteTestCase, RESTTestable {
499499

500500
XCTAssertEqual(summary?.summaryData[9].viewsCount, 17162)
501501
XCTAssertEqual(summary?.summaryData[9].visitorsCount, 11490)
502-
XCTAssertEqual(summary?.summaryData[9].likesCount, 126)
502+
XCTAssertEqual(summary?.summaryData[9].likesCount, 0)
503503
XCTAssertEqual(summary?.summaryData[9].commentsCount, 0)
504504

505505
XCTAssertEqual(summary?.summaryData[9].periodStartDate, Calendar.autoupdatingCurrent.date(byAdding: .day,
@@ -529,7 +529,7 @@ class StatsRemoteV2Tests: RemoteTestCase, RESTTestable {
529529

530530
XCTAssertEqual(summary?.summaryData[0].viewsCount, 3496)
531531
XCTAssertEqual(summary?.summaryData[0].visitorsCount, 398)
532-
XCTAssertEqual(summary?.summaryData[0].likesCount, 72)
532+
XCTAssertEqual(summary?.summaryData[0].likesCount, 0)
533533
XCTAssertEqual(summary?.summaryData[0].commentsCount, 0)
534534

535535
let may1 = DateComponents(year: 2018, month: 5, day: 1)
@@ -538,7 +538,7 @@ class StatsRemoteV2Tests: RemoteTestCase, RESTTestable {
538538

539539
XCTAssertEqual(summary?.summaryData[9].viewsCount, 2569)
540540
XCTAssertEqual(summary?.summaryData[9].visitorsCount, 334)
541-
XCTAssertEqual(summary?.summaryData[9].likesCount, 116)
541+
XCTAssertEqual(summary?.summaryData[9].likesCount, 0)
542542
XCTAssertEqual(summary?.summaryData[9].commentsCount, 0)
543543

544544
let nineMonthsFromMay1 = Calendar.autoupdatingCurrent.date(byAdding: .month, value: 9, to: may1Date)!
@@ -550,4 +550,43 @@ class StatsRemoteV2Tests: RemoteTestCase, RESTTestable {
550550

551551
waitForExpectations(timeout: timeout, handler: nil)
552552
}
553+
554+
func testLikesForMonth() {
555+
let expect = expectation(description: "It should return likes data for a month")
556+
557+
stubRemoteResponse(siteVisitsDataEndpoint, filename: getVisitsMonthMockFilename, contentType: .ApplicationJSON)
558+
559+
let feb21 = DateComponents(year: 2019, month: 2, day: 21)
560+
let date = Calendar.autoupdatingCurrent.date(from: feb21)!
561+
562+
563+
remote.getData(for: .month, endingOn: date) { (summary: StatsLikesSummaryTimeIntervalData?, error: Error?) in
564+
XCTAssertNil(error)
565+
XCTAssertNotNil(summary)
566+
567+
XCTAssertEqual(summary?.summaryData.count, 10)
568+
569+
XCTAssertEqual(summary?.summaryData[0].viewsCount, 0)
570+
XCTAssertEqual(summary?.summaryData[0].visitorsCount, 0)
571+
XCTAssertEqual(summary?.summaryData[0].likesCount, 72)
572+
XCTAssertEqual(summary?.summaryData[0].commentsCount, 0)
573+
574+
let may1 = DateComponents(year: 2018, month: 5, day: 1)
575+
let may1Date = Calendar.autoupdatingCurrent.date(from: may1)!
576+
XCTAssertEqual(summary?.summaryData[0].periodStartDate, may1Date)
577+
578+
XCTAssertEqual(summary?.summaryData[9].viewsCount, 0)
579+
XCTAssertEqual(summary?.summaryData[9].visitorsCount, 0)
580+
XCTAssertEqual(summary?.summaryData[9].likesCount, 116)
581+
XCTAssertEqual(summary?.summaryData[9].commentsCount, 0)
582+
583+
let nineMonthsFromMay1 = Calendar.autoupdatingCurrent.date(byAdding: .month, value: 9, to: may1Date)!
584+
585+
XCTAssertEqual(summary?.summaryData[9].periodStartDate, nineMonthsFromMay1)
586+
587+
expect.fulfill()
588+
}
589+
590+
waitForExpectations(timeout: timeout, handler: nil)
591+
}
553592
}

0 commit comments

Comments
 (0)