In my opinion, one of many beautiful constraints of Ruby is the ability to send only one lambda function into a method. Why beautiful? Because it stops us from suffering the madness of interfaces where you have to remember not only where exactly they are used in the method, whether or not the return values are significant, whether or not they change some bit of state, etc., but also now the order of the parameters.
One lambda is hard enough! This isn't javascript, we do have a class system to help us out...!
There are any number of ways to do this, the following is one idea that came to mind. It's got more magic that I usually like, but I split the implementation into a "Basic" module you can use if you just want the observable-ish behavior, and not the sugar (AKA method name pollution).
Cool use of state machines here.