Skip to content

Commit e028eca

Browse files
committed
Use [String: Any] instead of NSDictionary in RemoteBlogSettings
1 parent fb452a5 commit e028eca

File tree

2 files changed

+103
-102
lines changed

2 files changed

+103
-102
lines changed

Sources/WordPressKit/Models/RemoteBlogSettings.swift

+101-100
Original file line numberDiff line numberDiff line change
@@ -236,122 +236,123 @@ public class RemoteBlogSettings: NSObject {
236236

237237
/// Parses details from a JSON dictionary, as returned by the WordPress.com REST API.
238238
@objc
239-
public init(jsonDictionary json: NSDictionary) {
240-
let rawSettings = json.object(forKey: CodingKeys.settings.rawValue) as? NSDictionary ?? [:]
241-
242-
name = json.string(forKey: CodingKeys.name.rawValue)
243-
tagline = json.string(forKey: CodingKeys.tagline.rawValue)
244-
privacy = rawSettings.number(forKey: CodingKeys.privacy.rawValue)
245-
languageID = rawSettings.number(forKey: CodingKeys.languageID.rawValue)
246-
iconMediaID = rawSettings.number(forKey: CodingKeys.iconMediaID.rawValue)
247-
gmtOffset = rawSettings.number(forKey: CodingKeys.gmtOffset.rawValue)
248-
timezoneString = rawSettings.string(forKey: CodingKeys.timezoneString.rawValue)
249-
250-
defaultCategoryID = rawSettings.number(forKey: CodingKeys.defaultCategory.rawValue) ?? 1
251-
let defaultPostFormatValue = rawSettings.object(forKey: CodingKeys.defaultPostFormat.rawValue)
239+
public init(jsonDictionary json: [String: Any]) {
240+
let rawSettings = json[CodingKeys.settings.rawValue] as? [String: Any] ?? [:]
241+
242+
name = json[CodingKeys.name.rawValue] as? String
243+
tagline = json[CodingKeys.tagline.rawValue] as? String
244+
privacy = rawSettings[ CodingKeys.privacy.rawValue] as? NSNumber
245+
languageID = rawSettings[ CodingKeys.languageID.rawValue] as? NSNumber
246+
iconMediaID = rawSettings[ CodingKeys.iconMediaID.rawValue] as? NSNumber
247+
gmtOffset = rawSettings[ CodingKeys.gmtOffset.rawValue] as? NSNumber
248+
timezoneString = rawSettings[CodingKeys.timezoneString.rawValue] as? String
249+
250+
defaultCategoryID = rawSettings[ CodingKeys.defaultCategory.rawValue] as? NSNumber ?? 1
251+
let defaultPostFormatValue = rawSettings[CodingKeys.defaultPostFormat.rawValue]
252252
if let defaultPostFormatNumber = defaultPostFormatValue as? NSNumber, defaultPostFormatNumber == 0 ||
253253
defaultPostFormatValue as? String == "0" {
254254
defaultPostFormat = "standard"
255255
} else {
256-
defaultPostFormat = rawSettings.string(forKey: CodingKeys.defaultPostFormat.rawValue)
256+
defaultPostFormat = defaultPostFormatValue as? String
257257
}
258-
dateFormat = rawSettings.string(forKey: CodingKeys.dateFormat.rawValue)
259-
timeFormat = rawSettings.string(forKey: CodingKeys.timeFormat.rawValue)
260-
startOfWeek = rawSettings.string(forKey: CodingKeys.startOfWeek.rawValue)
261-
postsPerPage = rawSettings.number(forKey: CodingKeys.postsPerPage.rawValue)
262-
263-
commentsAllowed = rawSettings.number(forKey: CodingKeys.commentsAllowed.rawValue)
264-
commentsBlocklistKeys = rawSettings.string(forKey: CodingKeys.commentsBlocklistKeys.rawValue)
265-
commentsCloseAutomatically = rawSettings.number(forKey: CodingKeys.commentsCloseAutomatically.rawValue)
266-
commentsCloseAutomaticallyAfterDays = rawSettings.number(forKey: CodingKeys.commentsCloseAutomaticallyAfterDays.rawValue)
267-
commentsFromKnownUsersAllowlisted = rawSettings.number(forKey: CodingKeys.commentsKnownUsersAllowlist.rawValue)
268-
commentsMaximumLinks = rawSettings.number(forKey: CodingKeys.commentsMaxLinks.rawValue)
269-
commentsModerationKeys = rawSettings.string(forKey: CodingKeys.commentsModerationKeys.rawValue)
270-
commentsPagingEnabled = rawSettings.number(forKey: CodingKeys.commentsPagingEnabled.rawValue)
271-
commentsPageSize = rawSettings.number(forKey: CodingKeys.commentsPageSize.rawValue)
272-
commentsRequireManualModeration = rawSettings.number(forKey: CodingKeys.commentsRequireModeration.rawValue)
273-
commentsRequireNameAndEmail = rawSettings.number(forKey: CodingKeys.commentsRequireNameAndEmail.rawValue)
274-
commentsRequireRegistration = rawSettings.number(forKey: CodingKeys.commentsRequireRegistration.rawValue)
275-
commentsSortOrder = rawSettings.string(forKey: CodingKeys.commentsSortOrder.rawValue)
276-
commentsThreadingEnabled = rawSettings.number(forKey: CodingKeys.commentsThreadingEnabled.rawValue)
277-
commentsThreadingDepth = rawSettings.number(forKey: CodingKeys.commentsThreadingDepth.rawValue)
278-
pingbackOutboundEnabled = rawSettings.number(forKey: CodingKeys.pingbackOutbound.rawValue)
279-
pingbackInboundEnabled = rawSettings.number(forKey: CodingKeys.pingbackInbound.rawValue)
280-
281-
relatedPostsAllowed = rawSettings.number(forKey: CodingKeys.relatedPostsAllowed.rawValue)
282-
relatedPostsEnabled = rawSettings.number(forKey: CodingKeys.relatedPostsEnabled.rawValue)
283-
relatedPostsShowHeadline = rawSettings.number(forKey: CodingKeys.relatedPostsShowHeadline.rawValue)
284-
relatedPostsShowThumbnails = rawSettings.number(forKey: CodingKeys.relatedPostsShowThumbnails.rawValue)
285-
286-
ampSupported = rawSettings.number(forKey: CodingKeys.ampSupported.rawValue)
287-
ampEnabled = rawSettings.number(forKey: CodingKeys.ampEnabled.rawValue)
288-
289-
sharingButtonStyle = rawSettings.string(forKey: CodingKeys.sharingButtonStyle.rawValue)
290-
sharingLabel = rawSettings.string(forKey: CodingKeys.sharingLabel.rawValue)
291-
sharingTwitterName = rawSettings.string(forKey: CodingKeys.sharingTwitterName.rawValue)
292-
sharingCommentLikesEnabled = rawSettings.number(forKey: CodingKeys.sharingCommentLikesEnabled.rawValue)
293-
sharingDisabledLikes = rawSettings.number(forKey: CodingKeys.sharingDisabledLikes.rawValue)
294-
sharingDisabledReblogs = rawSettings.number(forKey: CodingKeys.sharingDisabledReblogs.rawValue)
258+
dateFormat = rawSettings[CodingKeys.dateFormat.rawValue] as? String
259+
timeFormat = rawSettings[CodingKeys.timeFormat.rawValue] as? String
260+
startOfWeek = rawSettings[CodingKeys.startOfWeek.rawValue] as? String
261+
postsPerPage = rawSettings[ CodingKeys.postsPerPage.rawValue] as? NSNumber
262+
263+
commentsAllowed = rawSettings[ CodingKeys.commentsAllowed.rawValue] as? NSNumber
264+
commentsBlocklistKeys = rawSettings[CodingKeys.commentsBlocklistKeys.rawValue] as? String
265+
commentsCloseAutomatically = rawSettings[ CodingKeys.commentsCloseAutomatically.rawValue] as? NSNumber
266+
commentsCloseAutomaticallyAfterDays = rawSettings[ CodingKeys.commentsCloseAutomaticallyAfterDays.rawValue] as? NSNumber
267+
commentsFromKnownUsersAllowlisted = rawSettings[ CodingKeys.commentsKnownUsersAllowlist.rawValue] as? NSNumber
268+
commentsMaximumLinks = rawSettings[ CodingKeys.commentsMaxLinks.rawValue] as? NSNumber
269+
commentsModerationKeys = rawSettings[CodingKeys.commentsModerationKeys.rawValue] as? String
270+
commentsPagingEnabled = rawSettings[ CodingKeys.commentsPagingEnabled.rawValue] as? NSNumber
271+
commentsPageSize = rawSettings[ CodingKeys.commentsPageSize.rawValue] as? NSNumber
272+
commentsRequireManualModeration = rawSettings[ CodingKeys.commentsRequireModeration.rawValue] as? NSNumber
273+
commentsRequireNameAndEmail = rawSettings[ CodingKeys.commentsRequireNameAndEmail.rawValue] as? NSNumber
274+
commentsRequireRegistration = rawSettings[ CodingKeys.commentsRequireRegistration.rawValue] as? NSNumber
275+
commentsSortOrder = rawSettings[CodingKeys.commentsSortOrder.rawValue] as? String
276+
commentsThreadingEnabled = rawSettings[ CodingKeys.commentsThreadingEnabled.rawValue] as? NSNumber
277+
commentsThreadingDepth = rawSettings[ CodingKeys.commentsThreadingDepth.rawValue] as? NSNumber
278+
pingbackOutboundEnabled = rawSettings[ CodingKeys.pingbackOutbound.rawValue] as? NSNumber
279+
pingbackInboundEnabled = rawSettings[ CodingKeys.pingbackInbound.rawValue] as? NSNumber
280+
281+
relatedPostsAllowed = rawSettings[ CodingKeys.relatedPostsAllowed.rawValue] as? NSNumber
282+
relatedPostsEnabled = rawSettings[ CodingKeys.relatedPostsEnabled.rawValue] as? NSNumber
283+
relatedPostsShowHeadline = rawSettings[ CodingKeys.relatedPostsShowHeadline.rawValue] as? NSNumber
284+
relatedPostsShowThumbnails = rawSettings[ CodingKeys.relatedPostsShowThumbnails.rawValue] as? NSNumber
285+
286+
ampSupported = rawSettings[ CodingKeys.ampSupported.rawValue] as? NSNumber
287+
ampEnabled = rawSettings[ CodingKeys.ampEnabled.rawValue] as? NSNumber
288+
289+
sharingButtonStyle = rawSettings[CodingKeys.sharingButtonStyle.rawValue] as? String
290+
sharingLabel = rawSettings[CodingKeys.sharingLabel.rawValue] as? String
291+
sharingTwitterName = rawSettings[CodingKeys.sharingTwitterName.rawValue] as? String
292+
sharingCommentLikesEnabled = rawSettings[ CodingKeys.sharingCommentLikesEnabled.rawValue] as? NSNumber
293+
sharingDisabledLikes = rawSettings[ CodingKeys.sharingDisabledLikes.rawValue] as? NSNumber
294+
sharingDisabledReblogs = rawSettings[ CodingKeys.sharingDisabledReblogs.rawValue] as? NSNumber
295295
}
296296

297297
@objc
298-
public var dictionaryRepresentation: NSDictionary {
299-
let parameters = NSMutableDictionary()
298+
public var dictionaryRepresentation: [String: Any] {
299+
var parameters: [String: Any] = [:]
300300

301301
// name and tagline/description use different keys...
302-
name.ifSome { parameters.setValue($0, forKey: "blogname") }
303-
tagline.ifSome { parameters.setValue($0, forKey: "blogdescription") }
304-
305-
privacy.ifSome { parameters.setValue($0, forKey: CodingKeys.privacy.rawValue) }
306-
languageID.ifSome { parameters.setValue($0, forKey: CodingKeys.languageID.rawValue) }
307-
iconMediaID.ifSome { parameters.setValue($0, forKey: CodingKeys.iconMediaID.rawValue) }
308-
gmtOffset.ifSome { parameters.setValue($0, forKey: CodingKeys.gmtOffset.rawValue) }
309-
timezoneString.ifSome { parameters.setValue($0, forKey: CodingKeys.timezoneString.rawValue) }
310-
311-
defaultCategoryID.ifSome { parameters.setValue($0, forKey: CodingKeys.defaultCategory.rawValue) }
312-
defaultPostFormat.ifSome { parameters.setValue($0, forKey: CodingKeys.defaultPostFormat.rawValue) }
313-
dateFormat.ifSome { parameters.setValue($0, forKey: CodingKeys.dateFormat.rawValue) }
314-
timeFormat.ifSome { parameters.setValue($0, forKey: CodingKeys.timeFormat.rawValue) }
315-
startOfWeek.ifSome { parameters.setValue($0, forKey: CodingKeys.startOfWeek.rawValue) }
316-
postsPerPage.ifSome { parameters.setValue($0, forKey: CodingKeys.postsPerPage.rawValue) }
317-
318-
commentsAllowed.ifSome { parameters.setValue($0, forKey: CodingKeys.commentsAllowed.rawValue) }
319-
commentsBlocklistKeys.ifSome { parameters.setValue($0, forKey: CodingKeys.commentsBlocklistKeys.rawValue) }
320-
commentsCloseAutomatically.ifSome { parameters.setValue($0, forKey: CodingKeys.commentsCloseAutomatically.rawValue) }
321-
commentsCloseAutomaticallyAfterDays.ifSome { parameters.setValue($0, forKey: CodingKeys.commentsCloseAutomaticallyAfterDays.rawValue) }
322-
commentsFromKnownUsersAllowlisted.ifSome { parameters.setValue($0, forKey: CodingKeys.commentsKnownUsersAllowlist.rawValue) }
323-
commentsMaximumLinks.ifSome { parameters.setValue($0, forKey: CodingKeys.commentsMaxLinks.rawValue) }
324-
commentsModerationKeys.ifSome { parameters.setValue($0, forKey: CodingKeys.commentsModerationKeys.rawValue) }
325-
commentsPagingEnabled.ifSome { parameters.setValue($0, forKey: CodingKeys.commentsPagingEnabled.rawValue) }
326-
commentsPageSize.ifSome { parameters.setValue($0, forKey: CodingKeys.commentsPageSize.rawValue) }
327-
commentsRequireManualModeration.ifSome { parameters.setValue($0, forKey: CodingKeys.commentsRequireModeration.rawValue) }
328-
commentsRequireNameAndEmail.ifSome { parameters.setValue($0, forKey: CodingKeys.commentsRequireNameAndEmail.rawValue) }
329-
commentsRequireRegistration.ifSome { parameters.setValue($0, forKey: CodingKeys.commentsRequireRegistration.rawValue) }
330-
commentsSortOrder.ifSome { parameters.setValue($0, forKey: CodingKeys.commentsSortOrder.rawValue) }
331-
commentsThreadingEnabled.ifSome { parameters.setValue($0, forKey: CodingKeys.commentsThreadingEnabled.rawValue) }
332-
commentsThreadingDepth.ifSome { parameters.setValue($0, forKey: CodingKeys.commentsThreadingDepth.rawValue) }
333-
334-
pingbackOutboundEnabled.ifSome { parameters.setValue($0, forKey: CodingKeys.pingbackOutbound.rawValue) }
335-
pingbackInboundEnabled.ifSome { parameters.setValue($0, forKey: CodingKeys.pingbackInbound.rawValue) }
302+
parameters["blogname"] = name
303+
parameters["blogname"] = name
304+
parameters["blogdescription"] = tagline
305+
306+
parameters[CodingKeys.privacy.rawValue] = privacy
307+
parameters[CodingKeys.languageID.rawValue] = languageID
308+
parameters[CodingKeys.iconMediaID.rawValue] = iconMediaID
309+
parameters[CodingKeys.gmtOffset.rawValue] = gmtOffset
310+
parameters[CodingKeys.timezoneString.rawValue] = timezoneString
311+
312+
parameters[CodingKeys.defaultCategory.rawValue] = defaultCategoryID
313+
parameters[CodingKeys.defaultPostFormat.rawValue] = defaultPostFormat
314+
parameters[CodingKeys.dateFormat.rawValue] = dateFormat
315+
parameters[CodingKeys.timeFormat.rawValue] = timeFormat
316+
parameters[CodingKeys.startOfWeek.rawValue] = startOfWeek
317+
parameters[CodingKeys.postsPerPage.rawValue] = postsPerPage
318+
319+
parameters[CodingKeys.commentsAllowed.rawValue] = commentsAllowed
320+
parameters[CodingKeys.commentsBlocklistKeys.rawValue] = commentsBlocklistKeys
321+
parameters[CodingKeys.commentsCloseAutomatically.rawValue] = commentsCloseAutomatically
322+
parameters[CodingKeys.commentsCloseAutomaticallyAfterDays.rawValue] = commentsCloseAutomaticallyAfterDays
323+
parameters[CodingKeys.commentsKnownUsersAllowlist.rawValue] = commentsFromKnownUsersAllowlisted
324+
parameters[CodingKeys.commentsMaxLinks.rawValue] = commentsMaximumLinks
325+
parameters[CodingKeys.commentsModerationKeys.rawValue] = commentsModerationKeys
326+
parameters[CodingKeys.commentsPagingEnabled.rawValue] = commentsPagingEnabled
327+
parameters[CodingKeys.commentsPageSize.rawValue] = commentsPageSize
328+
parameters[CodingKeys.commentsRequireModeration.rawValue] = commentsRequireManualModeration
329+
parameters[CodingKeys.commentsRequireNameAndEmail.rawValue] = commentsRequireNameAndEmail
330+
parameters[CodingKeys.commentsRequireRegistration.rawValue] = commentsRequireRegistration
331+
parameters[CodingKeys.commentsSortOrder.rawValue] = commentsSortOrder
332+
parameters[CodingKeys.commentsThreadingEnabled.rawValue] = commentsThreadingEnabled
333+
parameters[CodingKeys.commentsThreadingDepth.rawValue] = commentsThreadingDepth
334+
335+
parameters[CodingKeys.pingbackOutbound.rawValue] = pingbackOutboundEnabled
336+
parameters[CodingKeys.pingbackInbound.rawValue] = pingbackInboundEnabled
336337

337338
// Note: releatedPostsAllowed was not set in the Objective-C implementation.
338339
// There was no comment about it, so I assumed it was simply something that was never noticed.
339-
relatedPostsAllowed.ifSome { parameters.setValue($0, forKey: CodingKeys.relatedPostsAllowed.rawValue) }
340-
relatedPostsEnabled.ifSome { parameters.setValue($0, forKey: CodingKeys.relatedPostsEnabled.rawValue) }
341-
relatedPostsShowHeadline.ifSome { parameters.setValue($0, forKey: CodingKeys.relatedPostsShowHeadline.rawValue) }
342-
relatedPostsShowThumbnails.ifSome { parameters.setValue($0, forKey: CodingKeys.relatedPostsShowThumbnails.rawValue) }
340+
parameters[CodingKeys.relatedPostsAllowed.rawValue] = relatedPostsAllowed
341+
parameters[CodingKeys.relatedPostsEnabled.rawValue] = relatedPostsEnabled
342+
parameters[CodingKeys.relatedPostsShowHeadline.rawValue] = relatedPostsShowHeadline
343+
parameters[CodingKeys.relatedPostsShowThumbnails.rawValue] = relatedPostsShowThumbnails
343344

344345
// Note: ampSupported was not set in the Objective-C implementation.
345346
// There was no comment about it, so I assumed it was simply something that was never noticed.
346-
ampSupported.ifSome { parameters.setValue($0, forKey: CodingKeys.ampSupported.rawValue) }
347-
ampEnabled.ifSome { parameters.setValue($0, forKey: CodingKeys.ampEnabled.rawValue) }
348-
349-
sharingButtonStyle.ifSome { parameters.setValue($0, forKey: CodingKeys.sharingButtonStyle.rawValue) }
350-
sharingLabel.ifSome { parameters.setValue($0, forKey: CodingKeys.sharingLabel.rawValue) }
351-
sharingTwitterName.ifSome { parameters.setValue($0, forKey: CodingKeys.sharingTwitterName.rawValue) }
352-
sharingCommentLikesEnabled.ifSome { parameters.setValue($0, forKey: CodingKeys.sharingCommentLikesEnabled.rawValue) }
353-
sharingDisabledLikes.ifSome { parameters.setValue($0, forKey: CodingKeys.sharingDisabledLikes.rawValue) }
354-
sharingDisabledReblogs.ifSome { parameters.setValue($0, forKey: CodingKeys.sharingDisabledReblogs.rawValue) }
347+
parameters[CodingKeys.ampSupported.rawValue] = ampSupported
348+
parameters[CodingKeys.ampEnabled.rawValue] = ampEnabled
349+
350+
parameters[CodingKeys.sharingButtonStyle.rawValue] = sharingButtonStyle
351+
parameters[CodingKeys.sharingLabel.rawValue] = sharingLabel
352+
parameters[CodingKeys.sharingTwitterName.rawValue] = sharingTwitterName
353+
parameters[CodingKeys.sharingCommentLikesEnabled.rawValue] = sharingCommentLikesEnabled
354+
parameters[CodingKeys.sharingDisabledLikes.rawValue] = sharingDisabledLikes
355+
parameters[CodingKeys.sharingDisabledReblogs.rawValue] = sharingDisabledReblogs
355356

356357
return parameters
357358
}

Tests/WordPressKitTests/Tests/RemoteBlogSettingsTests.swift

+2-2
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ final class RemoteBlogSettingsTests: XCTestCase {
88

99
func testInitWithJSON() throws {
1010
let json = try loadJSONSettings()
11-
let settings = RemoteBlogSettings(jsonDictionary: json as NSDictionary)
11+
let settings = RemoteBlogSettings(jsonDictionary: json)
1212

1313
XCTAssertEqual(settings.name, "My Epic Blog")
1414
XCTAssertEqual(settings.tagline, "Definitely, the best blog out there")
@@ -60,7 +60,7 @@ final class RemoteBlogSettingsTests: XCTestCase {
6060
// Rather than creating an object and checking the resulting NSDictionary,
6161
// let's load one, convert it, then compare the source and converted dictionaries
6262
let json = try loadJSONSettings()
63-
let settings = try XCTUnwrap(RemoteBlogSettings(jsonDictionary: json as NSDictionary))
63+
let settings = try XCTUnwrap(RemoteBlogSettings(jsonDictionary: json))
6464

6565
let dictionary = try XCTUnwrap(settings.dictionaryRepresentation)
6666

0 commit comments

Comments
 (0)