Jak wyrwać się z rubinowego bloku?

Tutaj jestBar#do_things:

class Bar   
  def do_things
    Foo.some_method(x) do |x|
      y = x.do_something
      return y_is_bad if y.bad? # how do i tell it to stop and return do_things? 
      y.do_something_else
    end
    keep_doing_more_things
  end
end

I tu jestFoo#some_method:

class Foo
  def self.some_method(targets, &block)
    targets.each do |target|
      begin
        r = yield(target)
      rescue 
        failed << target
      end
    end
  end
end

Myślałem o użyciu funkcji raise, ale staram się, aby było to generyczne, więc nie chcę umieszczać niczego konkretnegoFoo.

questionAnswers(7)

yourAnswerToTheQuestion