Skip to content

Instantly share code, notes, and snippets.

@frosty
Created March 21, 2016 15:15
Show Gist options
  • Select an option

  • Save frosty/3b3563b6dfc2b65cfbfa to your computer and use it in GitHub Desktop.

Select an option

Save frosty/3b3563b6dfc2b65cfbfa to your computer and use it in GitHub Desktop.
diff --git a/WordPress/Classes/Services/PlanService.swift b/WordPress/Classes/Services/PlanService.swift
index 7b7d31c..0ee6982 100644
--- a/WordPress/Classes/Services/PlanService.swift
+++ b/WordPress/Classes/Services/PlanService.swift
@@ -1,12 +1,18 @@
import Foundation
+typealias PlanFeatures = [PlanID: [PlanFeature]]
+
struct PlanService {
let store: StoreFacade
let remote: PlansRemote
- init(remote: PlansRemote, storeFacade: StoreFacade = StoreKitFacade()) {
+ private static var planFeatures = PlanFeatures()
+ private let featuresRemote: PlanFeaturesRemote
+
+ init(remote: PlansRemote, featuresRemote: PlanFeaturesRemote, storeFacade: StoreFacade = StoreKitFacade()) {
self.store = storeFacade
self.remote = remote
+ self.featuresRemote = featuresRemote
}
func plansWithPricesForBlog(siteID: Int, success: SitePricedPlans -> Void, failure: ErrorType -> Void) {
@@ -25,15 +31,13 @@ struct PlanService {
extension PlanService {
init(blog: Blog) {
let remote = PlansRemote(api: blog.restApi())
- self.init(remote: remote)
+ let featuresRemote = PlanFeaturesRemote(api: blog.restApi())
+
+ self.init(remote: remote, featuresRemote: featuresRemote)
}
}
-typealias PlanFeatures = [PlanID: [PlanFeature]]
-
-struct PlanFeaturesService {
- private static var planFeatures = PlanFeatures()
-
+extension PlanService {
/// - returns: All features that are part of the specified plan
static func featuresForPlan(plan: Plan) -> [PlanFeature] {
return planFeatures[plan.id] ?? []
@@ -43,12 +47,10 @@ struct PlanFeaturesService {
static func featureForPlan(plan: Plan, withSlug slug: String) -> PlanFeature? {
return featuresForPlan(plan).filter({ $0.slug == slug }).first
}
-
- private let remote = PlanFeaturesRemote(api: WordPressComApi.anonymousApi())
-
+
func updateAllPlanFeatures(success: () -> Void, failure: ErrorType -> Void) {
- remote.getPlanFeatures({ planFeatures in
- PlanFeaturesService.planFeatures = planFeatures
+ featuresRemote.getPlanFeatures({ planFeatures in
+ PlanService.planFeatures = planFeatures
success()
}, failure: failure)
}
diff --git a/WordPress/Classes/ViewRelated/Plans/PlanComparisonViewController.swift b/WordPress/Classes/ViewRelated/Plans/PlanComparisonViewController.swift
index 1065ccd..d8b2c07 100644
--- a/WordPress/Classes/ViewRelated/Plans/PlanComparisonViewController.swift
+++ b/WordPress/Classes/ViewRelated/Plans/PlanComparisonViewController.swift
@@ -9,7 +9,7 @@ class PlanComparisonViewController: UIViewController {
@IBOutlet weak var scrollView: UIScrollView!
@IBOutlet weak var planStackView: UIStackView!
- let featureService = PlanFeaturesService()
+ var service: PlanService? = nil
var activePlan: Plan?
@@ -44,12 +44,13 @@ class PlanComparisonViewController: UIViewController {
return button
}()
- class func controllerWithInitialPlan(plan: Plan, activePlan: Plan? = nil) -> PlanComparisonViewController {
+ class func controllerWithInitialPlan(plan: Plan, activePlan: Plan? = nil, planService: PlanService) -> PlanComparisonViewController {
let storyboard = UIStoryboard(name: "Plans", bundle: NSBundle.mainBundle())
let controller = storyboard.instantiateViewControllerWithIdentifier(NSStringFromClass(self)) as! PlanComparisonViewController
controller.activePlan = activePlan
controller.currentPlan = plan
+ controller.service = planService
return controller
}
@@ -74,7 +75,7 @@ class PlanComparisonViewController: UIViewController {
viewControllers.forEach { action($0) }
}
- featureService.updateAllPlanFeatures({
+ service?.updateAllPlanFeatures({
setViewModelForViewControllers { controller in
controller.viewModel = PlanDetailViewController.PlanFeatureViewModel.Ready(controller.plan)
}
diff --git a/WordPress/Classes/ViewRelated/Plans/PlanDetailViewController.swift b/WordPress/Classes/ViewRelated/Plans/PlanDetailViewController.swift
index b3cc2b0..8b44e96 100644
--- a/WordPress/Classes/ViewRelated/Plans/PlanDetailViewController.swift
+++ b/WordPress/Classes/ViewRelated/Plans/PlanDetailViewController.swift
@@ -214,7 +214,7 @@ class PlanDetailViewController: UIViewController {
}
return ImmuTable(sections: groups.map { group in
- let features = group.slugs.map { PlanFeaturesService.featureForPlan(plan, withSlug: $0) }
+ let features = group.slugs.map { PlanService.featureForPlan(plan, withSlug: $0) }
return ImmuTableSection(headerText: group.title, rows: features.map({ TextRow(title: $0!.title, value: $0!.description) }), footerText: nil)
})
diff --git a/WordPress/Classes/ViewRelated/Plans/PlanListViewController.swift b/WordPress/Classes/ViewRelated/Plans/PlanListViewController.swift
index 2203838..6de22fe 100644
--- a/WordPress/Classes/ViewRelated/Plans/PlanListViewController.swift
+++ b/WordPress/Classes/ViewRelated/Plans/PlanListViewController.swift
@@ -91,7 +91,7 @@ enum PlanListViewModel {
}
}
- func tableViewModelWithPresenter(presenter: ImmuTablePresenter) -> ImmuTable {
+ func tableViewModelWithPresenter(presenter: ImmuTablePresenter, planService: PlanService) -> ImmuTable {
switch self {
case .Loading, .Error(_):
return ImmuTable.Empty
@@ -105,7 +105,7 @@ enum PlanListViewModel {
price: price,
description: plan.description,
icon: icon,
- action: presenter.present(self.controllerForPlanDetails(plan, activePlan: activePlan))
+ action: presenter.present(self.controllerForPlanDetails(plan, activePlan: activePlan, planService: planService))
)
})
return ImmuTable(sections: [
@@ -116,9 +116,9 @@ enum PlanListViewModel {
}
}
- func controllerForPlanDetails(plan: Plan, activePlan: Plan) -> ImmuTableRowControllerGenerator {
+ func controllerForPlanDetails(plan: Plan, activePlan: Plan, planService: PlanService) -> ImmuTableRowControllerGenerator {
return { row in
- let planVC = PlanComparisonViewController.controllerWithInitialPlan(plan, activePlan: activePlan)
+ let planVC = PlanComparisonViewController.controllerWithInitialPlan(plan, activePlan: activePlan, planService: planService)
let navigationVC = RotationAwareNavigationViewController(rootViewController: planVC)
navigationVC.modalPresentationStyle = .FormSheet
return navigationVC
@@ -132,7 +132,7 @@ final class PlanListViewController: UITableViewController, ImmuTablePresenter {
}()
private var viewModel: PlanListViewModel = .Loading {
didSet {
- handler.viewModel = viewModel.tableViewModelWithPresenter(self)
+ handler.viewModel = viewModel.tableViewModelWithPresenter(self, planService: service)
updateNoResults()
}
}
@@ -188,7 +188,7 @@ final class PlanListViewController: UITableViewController, ImmuTablePresenter {
WPStyleGuide.resetReadableMarginsForTableView(tableView)
WPStyleGuide.configureColorsForView(view, andTableView: tableView)
ImmuTable.registerRows([PlanListRow.self], tableView: tableView)
- handler.viewModel = viewModel.tableViewModelWithPresenter(self)
+ handler.viewModel = viewModel.tableViewModelWithPresenter(self, planService: service)
updateNoResults()
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment