RSpec は、最上位の名前空間を実行する「describe」メソッドを追加します。ただし、単にクラス/モジュールの外部でメソッドを定義する代わりに、次のようにします。
# code from rspec-core/lib/rspec/core/dsl.rb
module RSpec
module Core
# Adds the `describe` method to the top-level namespace.
module DSL
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)
モジュールやクラスの外側で単に記述を定義するのではなく、この手法を使用する利点は何ですか? (私が知る限り、DSL モジュールは rspec-core の他の場所では使用されていません。)