-
-
Save colinta/d0a273f8d858a8f61c73 to your computer and use it in GitHub Desktop.
This file contains 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
def viewDidLoad | |
super | |
@enabled_wiretap = self.loginButton.wiretap(:enabled).bind_to( | |
[ | |
self.usernameTextField.wiretap(:text), | |
self.passwordTextField.wiretap(:text), | |
LoginManager.sharedManager.wiretap(:loggingIn), | |
self.wiretap(:loggedIn), | |
].wiretap.combine do |username, password, logging_in, logged_in| | |
username.present? &&password.present? && !logging_in && !logged_in | |
end | |
) | |
@touch_wiretap = self.loginButton.wiretap.on(:touch) do | |
-> { | |
LoginManager.sharedManager.logInWithUsername( | |
self.usernameTextField.text, | |
password: self.passwordTextField.text) | |
}.wiretap.on_error do |error| | |
presentError(error) | |
end.and_then do | |
loggedIn = true | |
end | |
end | |
end | |
self.wiretap(:name) do |new_name| | |
puts "Name changed to #{new_name}" | |
end | |
name_is_valid_signal = [ | |
usernameField.wiretap(:text), | |
passwordField.wiretap(:text), | |
].wiretap # an array of signals fires whenever any element fires | |
# reduced signals transform a list of values into one | |
.reduce do |username, password| | |
return username.length > 0 && password.length > 0 && ! username.include? ' ' | |
end | |
loginButton.wiretap(:enabled).bind_to(name_is_valid_signal) | |
textField.wiretap(:text).bind_to(viewModel.wiretap(:title)) | |
scoreStepper.wiretap(:value).take(viewModel.maxPointUpdates) do |points| | |
viewModel.points = points | |
end | |
uploadButton.wiretap # returns a WiretapView | |
.on(:touch) # which can respond to gesture recognizers | |
.skip(KMaxUploads - 1) | |
.take(1) do | |
nameField.enabled = false | |
scoreStepper.hidden = true | |
uploadButton.hidden = true | |
end | |
[ | |
self.wiretap(:password), | |
self.wiretap(:passwordConfirmation), | |
].wiretap.reduce do |password,password_confirmation| | |
return password == password_confirmation | |
end.and_then do |passwords_match| | |
self.createEnabled = passwords_match | |
end | |
helpLabel.wiretap(:text).bind_to( | |
self.wiretap(:help) | |
# filtered signals only fire when the block returns true | |
.filter { |new_help| !new_help.nil? } | |
.map { |new_help| new_help.upcase } | |
) | |
[ | |
client.fetchUserRepos, # returns a wiretap | |
client.fetchOrgRepos, # returns a wiretap | |
].wiretap.and_then do | |
puts "They're both done!" | |
end | |
client.loginUser # return wiretap | |
.and_then(client.loadCachedMessages) | |
.and_then(client.fetchMessages) | |
.and_then do | |
puts "Fetched all messages" | |
end | |
-> { | |
fetchUserWithUsername('colinta') | |
}.wiretap # returns WiretapProc | |
.queue(Dispatch::Queue.concurrent) # the Proc will be run on this queue | |
.map do |user| | |
NSImage.alloc.initWithContentsOfURL(user.avatarURL) | |
end | |
.deliver_on(Dispatch::Queue.main) # returns a signal that will be called on the main queue | |
.and_then do |image| | |
imageView.image = image | |
end | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment