Skip to content

Instantly share code, notes, and snippets.

View eofster's full-sized avatar

Alexey Kuznetsov eofster

View GitHub Profile
@eofster
eofster / InteractorSpy.swift
Created December 15, 2015 13:22
GPS tracker interactor spy
class InteractorSpy {
private(set) var didCallExecute = false
}
extension InteractorSpy: Interactor {
func execute() {
didCallExecute = true
}
}
@eofster
eofster / InteractorFactorySpy.swift
Created December 15, 2015 13:22
GPS tracker interactor factory spy
class InteractorFactorySpy {
private(set) var invokedTrackID = -1
private(set) var invokedName = ""
private(set) var trackSummaryInteractor: Interactor!
private(set) var trackNameUpdateInteractor: Interactor!
func stubWithTrackSummaryInteractor(interactor: Interactor) {
trackSummaryInteractor = interactor
}
@eofster
eofster / TrackSummaryViewEventHandlerTests.swift
Created December 15, 2015 13:19
GPS track summary view event handler tests
import XCTest
class TrackSummaryViewEventHandlerTests: XCTestCase {
private(set) var interactorSpy: InteractorSpy!
private(set) var factorySpy: InteractorFactorySpy!
private(set) var eventHandler: TrackSummaryViewEventHandler!
override func setUp() {
super.setUp()
interactorSpy = InteractorSpy()
@eofster
eofster / PresenterFactory.swift
Created December 15, 2015 13:17
GPS tracker presenter factory
protocol PresenterFactory {
func createTrackSummaryPresenterWithOutput(output: TrackSummaryPresenterOutput) -> TrackSummaryPresenter
}
class PresenterFactoryImpl {}
extension PresenterFactoryImpl: PresenterFactory {
func createTrackSummaryPresenterWithOutput(output: TrackSummaryPresenterOutput) -> TrackSummaryPresenter {
return TrackSummaryPresenter(output: output)
}
@eofster
eofster / InteractorFactory.swift
Created December 15, 2015 13:16
GPS tracker interactor factory
protocol InteractorFactory {
func createTrackSummaryInteractor(output: TrackSummaryInteractorOutput) -> Interactor
func createTrackNameUpdateInteractor(trackID: Int, name: String) -> Interactor
}
class InteractorFactoryImpl {
let repository: TrackRepository
init(repository: TrackRepository) {
self.repository = repository
@eofster
eofster / TrackSummaryViewEventHandler.swift
Created December 15, 2015 13:13
GPS track summary view event handler
class TrackSummaryViewEventHandler {
let interactorFactory: InteractorFactory
let presenterFactory: PresenterFactory
init(interactorFactory: InteractorFactory, presenterFactory: PresenterFactory) {
self.interactorFactory = interactorFactory
self.presenterFactory = presenterFactory
}
}
@eofster
eofster / TrackSummaryViewObserver.swift
Created December 15, 2015 13:05
GPS track summary view observer
protocol TrackSummaryViewObserver {
func viewShouldReloadData(view: TrackSummaryView)
func view(view: TrackSummaryView, didChangeTrackName name: String, forTrackWithID trackID: Int)
}
@eofster
eofster / TrackSummaryViewController.swift
Created December 15, 2015 13:03
GPS track summary view controller with event handling
import UIKit
class TrackSummaryViewController: UIViewController {
let observer: TrackSummaryViewObserver
private var trackID: Int!
@IBOutlet private(set) var nameField: UITextField!
@IBOutlet private(set) var dateLabel: UILabel!
@IBOutlet private(set) var distanceLabel: UILabel!
@eofster
eofster / TrackSummaryView.swift
Created December 15, 2015 13:00
GPS track summary view
protocol TrackSummaryView: TrackSummaryPresenterOutput {}
@eofster
eofster / TrackSummaryPresenter.swift
Created December 15, 2015 12:57
GPS track summary presenter with track ID
protocol TrackSummaryPresenterOutput {
func setTrackID(trackID: Int)
func setName(name: String)
func setDate(date: String)
func setDistance(distance: String)
}
class TrackSummaryPresenter {
let output: TrackSummaryPresenterOutput
private let dateFormatter: NSDateFormatter