whitespaces issues, kzaher comments and pipelines in new lines

This commit is contained in:
Carlos García 2015-05-14 11:22:07 +02:00
parent 8f343c226d
commit 3fbe7d42bb
8 changed files with 135 additions and 108 deletions

View File

@ -10,23 +10,23 @@ import Foundation
import RxSwift
class Dependencies {
static let sharedDependencies = Dependencies() // Singleton
let URLSession = NSURLSession.sharedSession()
let backgroundWorkScheduler: ImmediateScheduler
let mainScheduler: DispatchQueueScheduler
let wireframe: Wireframe
private init() {
wireframe = DefaultWireframe()
let operationQueue = NSOperationQueue()
operationQueue.maxConcurrentOperationCount = 2
operationQueue.qualityOfService = NSQualityOfService.UserInitiated
backgroundWorkScheduler = OperationQueueScheduler(operationQueue: operationQueue)
mainScheduler = MainScheduler.sharedInstance
}
static let sharedDependencies = Dependencies() // Singleton
let URLSession = NSURLSession.sharedSession()
let backgroundWorkScheduler: ImmediateScheduler
let mainScheduler: DispatchQueueScheduler
let wireframe: Wireframe
private init() {
wireframe = DefaultWireframe()
let operationQueue = NSOperationQueue()
operationQueue.maxConcurrentOperationCount = 2
operationQueue.qualityOfService = NSQualityOfService.UserInitiated
backgroundWorkScheduler = OperationQueueScheduler(operationQueue: operationQueue)
mainScheduler = MainScheduler.sharedInstance
}
}

View File

@ -43,16 +43,19 @@ class GitHubAPI {
let URL = NSURL(string: "https://github.com/\(URLEscape(username))")!
let request = NSURLRequest(URL: URL)
return self.URLSession.rx_response(request) >- map { (maybeData, maybeResponse) in
if let response = maybeResponse as? NSHTTPURLResponse {
return response.statusCode == 404
return self.URLSession.rx_response(request)
>- map { (maybeData, maybeResponse) in
if let response = maybeResponse as? NSHTTPURLResponse {
return response.statusCode == 404
}
else {
return false
}
}
else {
return false
>- observeSingleOn(self.dataScheduler)
>- catch { result in
return returnElement(false)
}
} >- observeSingleOn(self.dataScheduler) >- catch { result in
return returnElement(false)
}
}
func signup(username: String, password: String) -> Observable<SignupState> {

View File

@ -40,14 +40,16 @@ class ValidationService {
let loadingValue = (valid: nil as Bool?, message: "Checking availabilty ..." as String?)
return API.usernameAvailable(username) >- map { available in
if available {
return (true, "Username available")
return API.usernameAvailable(username)
>- map { available in
if available {
return (true, "Username available")
}
else {
return (false, "Username already taken")
}
}
else {
return (false, "Username already taken")
}
} >- startWith(loadingValue)
>- startWith(loadingValue)
}
func validatePassword(password: String) -> ValidationResult {
@ -176,33 +178,38 @@ class GitHubSignupViewController : ViewController {
validationErrorLabel: self.repeatedPasswordValidationOutlet
)
signupEnabled >- subscribeNext { [unowned self] valid in
self.signupOutlet.enabled = valid
self.signupOutlet.alpha = valid ? 1.0 : 0.5
} >- disposeBag.addDisposable
signingProcess >- subscribeNext { [unowned self] signingResult in
switch signingResult {
case .SigningUp:
self.signingUpOulet.hidden = false
case .SignedUp(let signed):
self.signingUpOulet.hidden = true
let controller: UIAlertController
if signed {
controller = UIAlertController(title: "GitHub", message: "Mock signed up to GitHub", preferredStyle: .Alert)
}
else {
controller = UIAlertController(title: "GitHub", message: "Mock signed up failed", preferredStyle: .Alert)
}
controller.addAction(UIAlertAction(title: "Cancel", style: .Cancel, handler: nil))
self.presentViewController(controller, animated: true, completion: nil)
default:
self.signingUpOulet.hidden = true
signupEnabled
>- subscribeNext { [unowned self] valid in
self.signupOutlet.enabled = valid
self.signupOutlet.alpha = valid ? 1.0 : 0.5
}
} >- disposeBag.addDisposable
>- disposeBag.addDisposable
signingProcess
>- subscribeNext { [unowned self] signingResult in
switch signingResult {
case .SigningUp:
self.signingUpOulet.hidden = false
case .SignedUp(let signed):
self.signingUpOulet.hidden = true
let controller: UIAlertController
if signed {
controller = UIAlertController(title: "GitHub", message: "Mock signed up to GitHub", preferredStyle: .Alert)
}
else {
controller = UIAlertController(title: "GitHub", message: "Mock signed up failed", preferredStyle: .Alert)
}
controller.addAction(UIAlertAction(title: "Cancel", style: .Cancel, handler: nil))
self.presentViewController(controller, animated: true, completion: nil)
default:
self.signingUpOulet.hidden = true
}
}
>- disposeBag.addDisposable
}
// This is one of the reasons why it's a good idea for disposal to be detached from allocations.

View File

@ -14,11 +14,11 @@ class SearchResultViewModel {
let searchResult: WikipediaSearchResult
var title: Observable<String>
var imageURLs: Observable<[NSURL]>
let API = DefaultWikipediaAPI.sharedAPI
let $: Dependencies = Dependencies.sharedDependencies
var imageURLs: Observable<[NSURL]>
let API = DefaultWikipediaAPI.sharedAPI
let $: Dependencies = Dependencies.sharedDependencies
init(searchResult: WikipediaSearchResult) {
self.searchResult = searchResult

View File

@ -20,27 +20,34 @@ class SearchViewModel: Disposable {
// public methods
init(searchText: Observable<String>,
selectedResult: Observable<SearchResultViewModel>) {
let $: Dependencies = Dependencies.sharedDependencies
let wireframe = Dependencies.sharedDependencies.wireframe
let API = DefaultWikipediaAPI.sharedAPI
self.rows = searchText >- throttle(300, $.mainScheduler) >- distinctUntilChanged >- map { query in
API.getSearchResults(query)
>- startWith([]) // clears results on new search term
>- catch([])
} >- switchLatest >- map { results in
results.map {
SearchResultViewModel(
searchResult: $0
)
selectedResult: Observable<SearchResultViewModel>) {
let $: Dependencies = Dependencies.sharedDependencies
let wireframe = Dependencies.sharedDependencies.wireframe
let API = DefaultWikipediaAPI.sharedAPI
self.rows = searchText
>- throttle(300, $.mainScheduler)
>- distinctUntilChanged
>- map { query in
API.getSearchResults(query)
>- startWith([]) // clears results on new search term
>- catch([])
}
>- switchLatest
>- map { results in
results.map {
SearchResultViewModel(
searchResult: $0
)
}
}
selectedResult >- subscribeNext { searchResult in
wireframe.openURL(searchResult.searchResult.URL)
} >- disposeBag.addDisposable
selectedResult
>- subscribeNext { searchResult in
wireframe.openURL(searchResult.searchResult.URL)
}
>- disposeBag.addDisposable
}
func dispose() {

View File

@ -18,8 +18,8 @@ public class WikipediaSearchCell: UITableViewCell {
@IBOutlet var imagesOutlet: UICollectionView!
var disposeBag: DisposeBag!
let imageService = DefaultImageService.sharedImageService
let imageService = DefaultImageService.sharedImageService
public override func awakeFromNib() {
super.awakeFromNib()
@ -44,7 +44,8 @@ public class WikipediaSearchCell: UITableViewCell {
>- map { $0 as UIImage? }
>- catch(nil)
>- startWith(loadingPlaceholder)
} >- disposeBag.addDisposable
}
>- disposeBag.addDisposable
self.disposeBag = disposeBag
}

View File

@ -40,18 +40,22 @@ class WikipediaSearchViewController: ViewController {
// map table view rows
// {
viewModel.rows >- resultsTableView.rx_subscribeRowsToCellWithIdentifier("WikipediaSearchCell") { (_, _, viewModel, cell: WikipediaSearchCell) in
cell.viewModel = viewModel
} >- disposeBag.addDisposable
viewModel.rows
>- resultsTableView.rx_subscribeRowsToCellWithIdentifier("WikipediaSearchCell") { (_, _, viewModel, cell: WikipediaSearchCell) in
cell.viewModel = viewModel
}
>- disposeBag.addDisposable
// }
// dismiss keyboard on scroll
// {
resultsTableView.rx_contentOffset() >- subscribeNext { _ in
if searchBar.isFirstResponder() {
_ = searchBar.resignFirstResponder()
resultsTableView.rx_contentOffset()
>- subscribeNext { _ in
if searchBar.isFirstResponder() {
_ = searchBar.resignFirstResponder()
}
}
} >- disposeBag.addDisposable
>- disposeBag.addDisposable
disposeBag.addDisposable(viewModel)

View File

@ -26,12 +26,12 @@ func URLEscape(pathSegment: String) -> String {
}
class DefaultWikipediaAPI: WikipediaAPI {
static let sharedAPI = DefaultWikipediaAPI() // Singleton
let $: Dependencies = Dependencies.sharedDependencies
private init() {}
static let sharedAPI = DefaultWikipediaAPI() // Singleton
let $: Dependencies = Dependencies.sharedDependencies
private init() {}
// Example wikipedia response http://en.wikipedia.org/w/api.php?action=opensearch&search=Rx
func getSearchResults(query: String) -> Observable<[WikipediaSearchResult]> {
@ -39,11 +39,14 @@ class DefaultWikipediaAPI: WikipediaAPI {
let urlContent = "http://en.wikipedia.org/w/api.php?action=opensearch&search=\(escapedQuery)"
let url = NSURL(string: urlContent)!
return $.URLSession.rx_JSON(url) >- observeSingleOn($.backgroundWorkScheduler) >- mapOrDie { json in
return castOrFail(json) >== { (json: [AnyObject]) in
return WikipediaSearchResult.parseJSON(json)
return $.URLSession.rx_JSON(url)
>- observeSingleOn($.backgroundWorkScheduler)
>- mapOrDie { json in
return castOrFail(json) >== { (json: [AnyObject]) in
return WikipediaSearchResult.parseJSON(json)
}
}
} >- observeSingleOn($.mainScheduler)
>- observeSingleOn($.mainScheduler)
}
// http://en.wikipedia.org/w/api.php?action=parse&page=rx&format=json
@ -55,10 +58,12 @@ class DefaultWikipediaAPI: WikipediaAPI {
return failWith(apiError("Can't create url"))
}
return $.URLSession.rx_JSON(url!) >- mapOrDie { jsonResult in
return castOrFail(jsonResult) >== { (json: NSDictionary) in
return WikipediaPage.parseJSON(json)
return $.URLSession.rx_JSON(url!)
>- mapOrDie { jsonResult in
return castOrFail(jsonResult) >== { (json: NSDictionary) in
return WikipediaPage.parseJSON(json)
}
}
} >- observeSingleOn($.mainScheduler)
>- observeSingleOn($.mainScheduler)
}
}