Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions MIGRATIONS.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,11 @@
This file documents changes in the data model. Please explain any changes to the
data model as well as any custom migrations.

## WordPress 43 (@koke 2015-11-23)

- Added new entity `AccountSettings`
- `Account` has now a new one-to-one relationship mapping to `AccountSettings`

## WordPress 42 (@jleandroperez 2015-11-06)

Changes to the data model:
Expand Down
147 changes: 147 additions & 0 deletions WordPress/Classes/Models/AccountSettings.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,147 @@
import Foundation

struct AccountSettings {
// MARK: - My Profile
let firstName: String // first_name
let lastName: String // last_name
let displayName: String // display_name
let aboutMe: String // description

// MARK: - Account Settings
let username: String // user_login
let email: String // user_email
let primarySiteID: Int // primary_site_ID
let webAddress: String // user_URL
let language: String // language
}

class ManagedAccountSettings: NSManagedObject {
static let entityName = "AccountSettings"

@NSManaged var firstName: String
@NSManaged var lastName: String
@NSManaged var displayName: String
@NSManaged var aboutMe: String

@NSManaged var username: String
@NSManaged var email: String
@NSManaged var primarySiteID: Int
@NSManaged var webAddress: String
@NSManaged var language: String

@NSManaged var account: WPAccount

func updateWith(accountSettings: AccountSettings) {
firstName = accountSettings.firstName
lastName = accountSettings.lastName
displayName = accountSettings.displayName
aboutMe = accountSettings.aboutMe

username = accountSettings.username
email = accountSettings.email
primarySiteID = accountSettings.primarySiteID
webAddress = accountSettings.webAddress
language = accountSettings.language
}

/**
Applies a change to the account settings

To change a setting, you create a change and apply it to the AccountSettings object.
This method will return a new change object to apply if you want to revert the changes (for instance, if they failed to save)

- returns: the change object needed to revert this change
*/
func applyChange(change: AccountSettingsChange) -> AccountSettingsChange {
let reverse = reverseChange(change)

switch change {
case .FirstName(let value):
self.firstName = value
case .LastName(let value):
self.lastName = value
case .DisplayName(let value):
self.displayName = value
case .AboutMe(let value):
self.aboutMe = value
case .Email(let value):
self.email = value
case .PrimarySite(let value):
self.primarySiteID = value
case .WebAddress(let value):
self.webAddress = value
case .Language(let value):
self.language = value
}

return reverse
}

private func reverseChange(change: AccountSettingsChange) -> AccountSettingsChange {
switch change {
case .FirstName(_):
return .FirstName(self.firstName)
case .LastName(_):
return .LastName(self.lastName)
case .DisplayName(_):
return .DisplayName(self.displayName)
case .AboutMe(_):
return .AboutMe(self.aboutMe)
case .Email(_):
return .Email(self.email)
case .PrimarySite(_):
return .PrimarySite(self.primarySiteID)
case .WebAddress(_):
return .WebAddress(self.webAddress)
case .Language(_):
return .Language(self.language)
}
}
}

extension AccountSettings {
init(managed: ManagedAccountSettings) {
firstName = managed.firstName
lastName = managed.lastName
displayName = managed.displayName
aboutMe = managed.aboutMe

username = managed.username
email = managed.email
primarySiteID = managed.primarySiteID
webAddress = managed.webAddress
language = managed.language
}
}

enum AccountSettingsChange {
case FirstName(String)
case LastName(String)
case DisplayName(String)
case AboutMe(String)
case Email(String)
case PrimarySite(Int)
case WebAddress(String)
case Language(String)

var stringValue: String {
switch self {
case .FirstName(let value):
return value
case .LastName(let value):
return value
case .DisplayName(let value):
return value
case .AboutMe(let value):
return value
case .Email(let value):
return value
case .PrimarySite(let value):
return String(value)
case .WebAddress(let value):
return value
case .Language(let value):
return value
}
}
}
2 changes: 1 addition & 1 deletion WordPress/Classes/WordPress.xcdatamodeld/.xccurrentversion
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,6 @@
<plist version="1.0">
<dict>
<key>_XCCurrentVersionName</key>
<string>WordPress 42.xcdatamodel</string>
<string>WordPress 43.xcdatamodel</string>
</dict>
</plist>
Loading