Hi I finally looked into why this is not currently possibly in RSpec 2 (beta 19):
shared_examples_for "Etymology" do describe "The etymology of foo" do it "is followed by #{after_foo}" do # ... end end end describe "foo", focus: true do it_should_behave_like "Etymology" do def self.after_foo "bar" end end end It's because of the current implementation of ExampleGroup.define_shared_group_method, which evaluates the shared example block before the customisation block: shared_group = describe("#{report_label} \#{name}", &shared_block) shared_group.class_eval(&customization_block) if customization_block (This is behaviour I found surprising.) However, with a little more metaprogramming jiggery-pokery, you can have them evaluated in the other order: module RSpec module Core class ExampleGroup # ... def self.define_shared_group_method(new_name, report_label=nil) report_label = "it should behave like" unless report_label module_eval(<<-END_RUBY, __FILE__, __LINE__) def self.#{new_name}(name, &customization_block) shared_block = world.shared_example_groups[name] raise "Could not find shared example group named \#{name.inspect}" unless shared_block compound_block = lambda do |*args| module_eval &customization_block if customization_block module_eval &shared_block end shared_group = describe("#{report_label} \#{name}", &compound_block) shared_group end END_RUBY end # ... end end end Would this be a useful improvement to RSpec 2? Any opinions on the order of the block evaluation for shared examples? Cheers Ash -- http://www.patchspace.co.uk/ http://www.linkedin.com/in/ashleymoran _______________________________________________ rspec-users mailing list rspec-users@rubyforge.org http://rubyforge.org/mailman/listinfo/rspec-users