Skip to content

Commit

Permalink
Revert "Revert eager_load option in Container#finalize! (fix #281)"
Browse files Browse the repository at this point in the history
This reverts commit 7b8ae92.
  • Loading branch information
flash-gordon committed Jan 9, 2025
1 parent ddb8d29 commit b96e64c
Show file tree
Hide file tree
Showing 4 changed files with 62 additions and 1 deletion.
4 changes: 3 additions & 1 deletion lib/dry/system/container.rb
Original file line number Diff line number Diff line change
Expand Up @@ -314,7 +314,7 @@ def finalized?
# @return [self] frozen container
#
# @api public
def finalize!(freeze: true, &)
def finalize!(freeze: true, eager_load: true, &)
return self if finalized?

configured!
Expand All @@ -324,6 +324,8 @@ def finalize!(freeze: true, &)

[providers, auto_registrar, manifest_registrar, importer].each(&:finalize!)

keys.each { resolve(_1) } if eager_load

@__finalized__ = true

self.freeze if freeze
Expand Down
31 changes: 31 additions & 0 deletions spec/integration/container/auto_registration/eager_loading_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# frozen_string_literal: true

RSpec.describe "Eager loading during finalization" do
it "raises error when component cannot be found, due to missing inflection" do
class Test::Container < Dry::System::Container
configure do |config|
config.root = SPEC_ROOT.join("fixtures").realpath

config.component_dirs.add "components" do |dir|
dir.namespaces.add "test", key: nil
end
end
end
expect { Test::Container.finalize! }.to raise_error(Dry::System::ComponentNotLoadableError)
end

it "does not raise error when constant can be found" do
class Test::Container < Dry::System::Container
configure do |config|
config.root = SPEC_ROOT.join("fixtures").realpath

config.component_dirs.add "components" do |dir|
dir.namespaces.add "test", key: nil
end

config.inflector = Dry::Inflector.new { |i| i.acronym("ABC") }
end
end
expect { Test::Container.finalize! }.to_not raise_error
end
end
4 changes: 4 additions & 0 deletions spec/integration/container/auto_registration/memoize_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@ class Test::Container < Dry::System::Container
dir.namespaces.add "test", key: nil
dir.memoize = true
end

config.inflector = Dry::Inflector.new { |i| i.acronym("ABC") }
end
end
end
Expand Down Expand Up @@ -52,6 +54,8 @@ class Test::Container < Dry::System::Container
!component.key.match?(/bar/)
end
end

config.inflector = Dry::Inflector.new { |i| i.acronym("ABC") }
end
end
end
Expand Down
24 changes: 24 additions & 0 deletions spec/unit/container/configuration_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -175,5 +175,29 @@ def hooks_trace
.from([])
.to [:after_configure]
end

it "raises error for undefined constant (due to inflector missing acronym)" do
expect {
container.configure do |config|
config.root = SPEC_ROOT.join("fixtures").realpath
config.component_dirs.add "components" do |dir|
dir.namespaces.add "test", key: nil
end
end
container.finalize!
}.to raise_error(Dry::System::ComponentNotLoadableError)
end

it "does not raises error for undefined constant when eager_load is false" do
expect {
container.configure do |config|
config.root = SPEC_ROOT.join("fixtures").realpath
config.component_dirs.add "components" do |dir|
dir.namespaces.add "test", key: nil
end
end
container.finalize!(eager_load: false)
}.to_not raise_error
end
end
end

0 comments on commit b96e64c

Please sign in to comment.