diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/bacon.rb | 25 |
1 files changed, 18 insertions, 7 deletions
diff --git a/lib/bacon.rb b/lib/bacon.rb index 0547249..fcb3bbe 100644 --- a/lib/bacon.rb +++ b/lib/bacon.rb @@ -139,14 +139,25 @@ module Bacon Bacon.handle_requirement description do begin Counter[:depth] += 1 - @before.each { |block| instance_eval(&block) } - prev_req = Counter[:requirements] - instance_eval(&spec) - if Counter[:requirements] == prev_req - raise Error.new(:missing, - "empty specification: #{@name} #{description}") + rescued = false + begin + @before.each { |block| instance_eval(&block) } + prev_req = Counter[:requirements] + instance_eval(&spec) + rescue Object => e + rescued = true + raise e + ensure + if Counter[:requirements] == prev_req + raise Error.new(:missing, + "empty specification: #{@name} #{description}") + end + begin + @after.each { |block| instance_eval(&block) } + rescue Object => e + raise e unless rescued + end end - @after.each { |block| instance_eval(&block) } rescue Object => e ErrorLog << "#{e.class}: #{e.message}\n" e.backtrace.find_all { |line| line !~ /bin\/bacon|\/bacon\.rb:\d+/ }. |