This is much more readable/understandable than the `map_on` thing you had before.  Thanks!

One suggestion, though: given that the `host` argument is just yielded back to the caller, it seems a bit unnecessary.  The name of this method also suggests that this method does something with it or uses it to determine what messages to yield.

Is there a reason you chose to pass it through?  I'd probably (slightly) favor just putting a `host = blah` line at the call sites and then change this to `each_message`.