From ffeaf6201f13af91e723757445a661dde2fd4968 Mon Sep 17 00:00:00 2001 From: pyromaniac Date: Sun, 29 Jan 2012 20:16:16 +0700 Subject: [PATCH 1/2] Now the both values are stored, but i.e. `controller` method, created anonymouus controller in corresponding example group, redefines only :described_class, but later we try to get `described_class` it examples to instantiate anonymous controller and got :describes value. Described class chould be taken first. --- lib/rspec/core/metadata.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/rspec/core/metadata.rb b/lib/rspec/core/metadata.rb index fcb40a8e58..a57d0ceeeb 100644 --- a/lib/rspec/core/metadata.rb +++ b/lib/rspec/core/metadata.rb @@ -102,8 +102,8 @@ module GroupMetadataHash def described_class container_stack.each do |g| - return g[:describes] if g.has_key?(:describes) return g[:described_class] if g.has_key?(:described_class) + return g[:describes] if g.has_key?(:describes) end container_stack.reverse.each do |g| From a4c33a514120f42dbf57ea5bf75b0ecf9f007c7a Mon Sep 17 00:00:00 2001 From: pyromaniac Date: Sun, 29 Jan 2012 22:07:10 +0700 Subject: [PATCH 2/2] Added spec for patched case --- spec/rspec/core/example_group_spec.rb | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/spec/rspec/core/example_group_spec.rb b/spec/rspec/core/example_group_spec.rb index 6b54cbb8e7..cb7760be41 100644 --- a/spec/rspec/core/example_group_spec.rb +++ b/spec/rspec/core/example_group_spec.rb @@ -293,6 +293,22 @@ def metadata_hash(*args) group.run.should be_true end end + + context "and metadata redefinition after `described_class` call" do + it "is the redefined level constant" do + group = ExampleGroup.describe(String) do + described_class + metadata[:example_group][:described_class] = Object + describe :symbol do + example "described_class is Object" do + described_class.should eq(Object) + end + end + end + + group.run.should be_true + end + end end context "in a nested group" do