diff --git a/lib/dry/auto_inject/dependency_map.rb b/lib/dry/auto_inject/dependency_map.rb index b5c9e49..c274d42 100644 --- a/lib/dry/auto_inject/dependency_map.rb +++ b/lib/dry/auto_inject/dependency_map.rb @@ -1,10 +1,9 @@ # frozen_string_literal: true +require 'dry/auto_inject/errors' + module Dry module AutoInject - DuplicateDependencyError = Class.new(StandardError) - DependencyNameInvalid = Class.new(StandardError) - VALID_NAME = /([a-z_][a-zA-Z_0-9]*)$/ class DependencyMap diff --git a/lib/dry/auto_inject/errors.rb b/lib/dry/auto_inject/errors.rb new file mode 100644 index 0000000..6145f88 --- /dev/null +++ b/lib/dry/auto_inject/errors.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true + +module Dry + module AutoInject + Error = Class.new(StandardError) + DuplicateDependencyError = Class.new(Error) + DependencyNameInvalid = Class.new(Error) + end +end diff --git a/lib/dry/auto_inject/strategies/constructor.rb b/lib/dry/auto_inject/strategies/constructor.rb index e2c1b05..b5f5cea 100644 --- a/lib/dry/auto_inject/strategies/constructor.rb +++ b/lib/dry/auto_inject/strategies/constructor.rb @@ -1,6 +1,7 @@ # frozen_string_literal: true require 'dry/auto_inject/dependency_map' +require 'dry/auto_inject/errors' module Dry module AutoInject @@ -23,6 +24,8 @@ def initialize(container, *dependency_names) # @api private def included(klass) + fail Error, "cannot inject dependencies into a module" unless klass.respond_to?(:new) + define_readers define_new diff --git a/spec/dry/auto_inject_spec.rb b/spec/dry/auto_inject_spec.rb index 650521e..abdc3fc 100644 --- a/spec/dry/auto_inject_spec.rb +++ b/spec/dry/auto_inject_spec.rb @@ -28,6 +28,10 @@ def initialize(*args) Class.new(child_class) end + let(:mod) do + Module.new + end + context 'with positioned args' do let(:parent_class) do Class.new do @@ -167,6 +171,14 @@ def initialize(first, *middle, last) end end end + + context 'autoinject in a module' do + it 'raises exception' do + expect { + mod.include Test::AutoInject.args[:one, :two] + }.to raise_error(Dry::AutoInject::Error, /cannot inject/) + end + end end context 'with hash arg' do @@ -312,6 +324,14 @@ def self.included(klass) end end end + + context 'autoinject in a module' do + it 'raises exception' do + expect { + mod.include Test::AutoInject.hash[:one, :two] + }.to raise_error(Dry::AutoInject::Error, /cannot inject/) + end + end end context 'with keyword args' do @@ -558,5 +578,13 @@ def initialize(other) end end end + + context 'autoinject in a module' do + it 'raises exception' do + expect { + mod.include Test::AutoInject.kwargs[:one, :two] + }.to raise_error(Dry::AutoInject::Error, /cannot inject/) + end + end end end