@@ -2,7 +2,18 @@ module RSpec
   module Core
     # Adds the `describe` method to the top-level namespace.
     module DSL
-      # Generates a subclass of {ExampleGroup}
+      # Generates a method that passes on the message to
+      # generate a subclass of {ExampleGroup}
+      #
+
+      def self.register_example_group_alias(name)
+        define_method(name) do |*args, &example_group_block|
+          RSpec::Core::ExampleGroup.public_send(name, *args, &example_group_block).register
+        end
+      end
+
+      # By default, #describe is available at the top-level
+      # to generate subclasses of {ExampleGroup}
       #
       # ## Examples:
       #
module RSpec
  module Core
    # Adds the `describe` method to the top-level namespace.
    module DSL
      # Generates a subclass of {ExampleGroup}
      #
      # ## Examples:
      #
      #     describe "something" do
      #       it "does something" do
      #         # example code goes here
      #       end
      #     end
      #
      # @see ExampleGroup
      # @see ExampleGroup.describe
      def describe(*args, &example_group_block)
        RSpec::Core::ExampleGroup.describe(*args, &example_group_block).register
      end
    end
  end
end

extend RSpec::Core::DSL
Module.send(:include, RSpec::Core::DSL)


This syntax causes 1.8.6 to blow up. (Its parser can't handle blocks accepting blocks). We're planning on dropping 1.8.6 support in 3.0, and starting on 3.0 as soon as 2.14 ships, so we can just hold off on merging this until we get started on 3.0. If you want to get this in 2.14 you'll have to change stuff so it's 1.8.6 compatible, but that would be a bunch of work that we would undo as soon as 3.0 starts, because we don't want to keep the 1.8.6 hacks in 3.0. Thoughts?