Skip to content

Instantly share code, notes, and snippets.

@colinta
Last active December 17, 2015 04:08
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save colinta/d0a273f8d858a8f61c73 to your computer and use it in GitHub Desktop.
Save colinta/d0a273f8d858a8f61c73 to your computer and use it in GitHub Desktop.
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