diff --git a/lib/spec/example/example_group_methods.rb b/lib/spec/example/example_group_methods.rb index 468498d73..679550280 100644 --- a/lib/spec/example/example_group_methods.rb +++ b/lib/spec/example/example_group_methods.rb @@ -2,23 +2,23 @@ module Spec module Example module ExampleGroupMethods - include Spec::Example::BeforeAndAfterHooks - - def self.matcher_class - @matcher_class - end - - def self.matcher_class=(matcher_class) - @matcher_class = matcher_class - end + class << self + attr_accessor :matcher_class - def self.description_text(*args) - args.inject("") do |description, arg| - description << " " unless (description == "" || arg.to_s =~ /^(\s|\.|#)/) - description << arg.to_s + def description_text(*args) + args.inject("") do |description, arg| + description << " " unless (description == "" || arg.to_s =~ /^(\s|\.|#)/) + description << arg.to_s + end + end + + def example_group_creation_listeners + @example_group_creation_listeners ||= [] end end + include Spec::Example::BeforeAndAfterHooks + attr_reader :description_options, :spec_path alias :options :description_options @@ -42,8 +42,13 @@ def description_args def inherited(klass) super - Spec::Runner.options.add_example_group klass - Spec::Runner.register_at_exit_hook + register_example_group(klass) + end + + def register_example_group(klass) + ExampleGroupMethods.example_group_creation_listeners.each do |l| + l.register_example_group(klass) + end end # Makes the describe/it syntax available from a class. For example: diff --git a/lib/spec/runner.rb b/lib/spec/runner.rb index d89d035c8..9fdef3097 100644 --- a/lib/spec/runner.rb +++ b/lib/spec/runner.rb @@ -10,6 +10,16 @@ module Spec module Runner + + class ExampleGroupCreationListener + def register_example_group(klass) + Spec::Runner.options.add_example_group klass + Spec::Runner.register_at_exit_hook + end + end + + Spec::Example::ExampleGroupMethods.example_group_creation_listeners << ExampleGroupCreationListener.new + class << self def configuration # :nodoc: @configuration ||= Spec::Example::Configuration.new