diff --git a/spec/integration/container/auto_registration/component_dir_namespaces/autoloading_loader_spec.rb b/spec/integration/container/auto_registration/component_dir_namespaces/autoloading_loader_spec.rb index 744e7665..6b574c17 100644 --- a/spec/integration/container/auto_registration/component_dir_namespaces/autoloading_loader_spec.rb +++ b/spec/integration/container/auto_registration/component_dir_namespaces/autoloading_loader_spec.rb @@ -4,8 +4,6 @@ require "zeitwerk" RSpec.describe "Component dir namespaces / Autoloading loader" do - include ZeitwerkHelpers - let(:container) { root = @dir dir_config = defined?(component_dir_config) ? component_dir_config : -> * {} @@ -21,9 +19,9 @@ } } - let(:loader) { Zeitwerk::Loader.new } + let(:loader) { ZeitwerkLoaderRegistry.new_loader } - after { teardown_zeitwerk } + after { ZeitwerkLoaderRegistry.clear } context "top-level constant namespace" do let(:component_dir_config) { diff --git a/spec/integration/container/autoloading_spec.rb b/spec/integration/container/autoloading_spec.rb index be8aec59..91054ea5 100644 --- a/spec/integration/container/autoloading_spec.rb +++ b/spec/integration/container/autoloading_spec.rb @@ -5,8 +5,6 @@ require "zeitwerk" RSpec.describe "Autoloading loader" do - include ZeitwerkHelpers - specify "Resolving components using Zeitwerk" do module Test class Container < Dry::System::Container @@ -19,7 +17,7 @@ class Container < Dry::System::Container end end - loader = Zeitwerk::Loader.new + loader = ZeitwerkLoaderRegistry.new_loader loader.push_dir Test::Container.config.root.join("lib").realpath loader.setup @@ -29,6 +27,6 @@ class Container < Dry::System::Container expect(foo).to be_a Test::Foo expect(entity).to be_a Test::Entities::FooEntity - teardown_zeitwerk + ZeitwerkLoaderRegistry.clear end end diff --git a/spec/integration/container/plugins/zeitwerk/eager_loading_spec.rb b/spec/integration/container/plugins/zeitwerk/eager_loading_spec.rb index 9adcf2ac..bc803be2 100644 --- a/spec/integration/container/plugins/zeitwerk/eager_loading_spec.rb +++ b/spec/integration/container/plugins/zeitwerk/eager_loading_spec.rb @@ -3,13 +3,11 @@ # rubocop:disable Style/GlobalVars RSpec.describe "Zeitwerk plugin / Eager loading" do - include ZeitwerkHelpers - before do $eager_loaded = false end - after { teardown_zeitwerk } + after { ZeitwerkLoaderRegistry.clear } it "Eager loads after finalization" do with_tmp_directory do |tmp_dir| diff --git a/spec/integration/container/plugins/zeitwerk/namespaces_spec.rb b/spec/integration/container/plugins/zeitwerk/namespaces_spec.rb index 08a58112..e2fafe04 100644 --- a/spec/integration/container/plugins/zeitwerk/namespaces_spec.rb +++ b/spec/integration/container/plugins/zeitwerk/namespaces_spec.rb @@ -1,9 +1,7 @@ # frozen_string_literal: true RSpec.describe "Zeitwerk plugin / Namespaces" do - include ZeitwerkHelpers - - after { teardown_zeitwerk } + after { ZeitwerkLoaderRegistry.clear } it "loads components from a root namespace with a const namespace" do with_tmp_directory do |tmp_dir| diff --git a/spec/integration/container/plugins/zeitwerk/resolving_components_spec.rb b/spec/integration/container/plugins/zeitwerk/resolving_components_spec.rb index e002f7bd..08899f2a 100644 --- a/spec/integration/container/plugins/zeitwerk/resolving_components_spec.rb +++ b/spec/integration/container/plugins/zeitwerk/resolving_components_spec.rb @@ -1,9 +1,7 @@ # frozen_string_literal: true RSpec.describe "Zeitwerk plugin / Resolving components" do - include ZeitwerkHelpers - - after { teardown_zeitwerk } + after { ZeitwerkLoaderRegistry.clear } specify "Resolving components using Zeitwerk" do with_tmp_directory do |tmp_dir| diff --git a/spec/integration/container/plugins/zeitwerk/user_configured_loader_spec.rb b/spec/integration/container/plugins/zeitwerk/user_configured_loader_spec.rb index 47c3acf7..fb6cf001 100644 --- a/spec/integration/container/plugins/zeitwerk/user_configured_loader_spec.rb +++ b/spec/integration/container/plugins/zeitwerk/user_configured_loader_spec.rb @@ -1,9 +1,7 @@ # frozen_string_literal: true RSpec.describe "Zeitwerk plugin / User-configured loader" do - include ZeitwerkHelpers - - after { teardown_zeitwerk } + after { ZeitwerkLoaderRegistry.clear } it "uses the user-configured loader and pushes component dirs to it" do with_tmp_directory do |tmp_dir| @@ -26,7 +24,7 @@ class Foo;end dir.namespaces.add_root const: "test" end - config.autoloader = Zeitwerk::Loader.new.tap do |loader| + config.autoloader = ZeitwerkLoaderRegistry.new_loader.tap do |loader| loader.tag = "custom_loader" loader.logger = -> str { logs << str } end diff --git a/spec/support/zeitwerk_helpers.rb b/spec/support/zeitwerk_helpers.rb deleted file mode 100644 index fe031139..00000000 --- a/spec/support/zeitwerk_helpers.rb +++ /dev/null @@ -1,16 +0,0 @@ -# frozen_string_literal: true - -if RUBY_ENGINE == "jruby" - require "jruby" - JRuby.objectspace = true -end - -module ZeitwerkHelpers - def teardown_zeitwerk - ObjectSpace.each_object(Zeitwerk::Loader) do |loader| - if loader.dirs.any? { |dir| dir.include?("/spec/") || dir.include?(Dir.tmpdir) } - loader.unregister - end - end - end -end diff --git a/spec/support/zeitwerk_loader_registry.rb b/spec/support/zeitwerk_loader_registry.rb new file mode 100644 index 00000000..3e1c14c8 --- /dev/null +++ b/spec/support/zeitwerk_loader_registry.rb @@ -0,0 +1,23 @@ +# frozen_string_literal: true + +module ZeitwerkLoaderRegistry + class << self + def new_loader + Zeitwerk::Loader.new.tap do |loader| + loaders << loader + end + end + + def clear + loaders.each do |loader| + loader.unregister + end + end + + private + + def loaders + @loaders ||= [] + end + end +end