Created
March 21, 2016 15:15
-
-
Save frosty/3b3563b6dfc2b65cfbfa to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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