From a52cbeac0162b6f786f0ee9fc8b34d74cf4abc6e Mon Sep 17 00:00:00 2001 From: Yossef Mendelssohn Date: Fri, 24 Oct 2008 17:01:51 -0500 Subject: Letting before blocks be run from higher levels in nested context Split up Context#initialize to let running be a separate step. Added attr_reader for Context name and block to let the running step have access to them without resorting to instance variables. --- lib/bacon.rb | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) (limited to 'lib/bacon.rb') diff --git a/lib/bacon.rb b/lib/bacon.rb index b34a9f2..26079e3 100644 --- a/lib/bacon.rb +++ b/lib/bacon.rb @@ -109,10 +109,15 @@ module Bacon end class Context + attr_reader :name, :block + def initialize(name, &block) @name = name @before, @after = [], [] - + @block = block + end + + def run return unless name =~ RestrictContext Bacon.handle_specification(name) { instance_eval(&block) } end @@ -251,7 +256,15 @@ end module Kernel private - def describe(*args, &block) Bacon::Context.new(args.join(' '), &block) end + def describe(*args, &block) + befores = instance_variable_get('@before') || [] + context = Bacon::Context.new(args.join(' '), &block) + befores.each do |b| + context.before &b + end + context.run + context + end def shared(name, &block) Bacon::Shared[name] = block end end -- cgit 1.4.1