dry-auto_inject
                                
                                 dry-auto_inject copied to clipboard
                                
                                    dry-auto_inject copied to clipboard
                            
                            
                            
                        Raise exception when injecting into modules
To me it happened that I accidentally injected my dependencies into a namespace module instead of into a class, like this:
module Operations
  module Articles
    include Import["repositories.articles"]
    class Create
      # ...
    end
  end
end
When I did that, I got an error originating from that line, but happening somewhere in dry-auto_inject's internals (a NoMethodError for NilClass). This led me to believe that I've somehow incorrectly passed parameters to Import[], and it took me a while to realize what was the error.
The error occurred because the downstream code assumes the #initialize method will be defined, which is not the case for modules. To improve the developer experience, we detect that we're attempting to inject into a module and raise an explicit exception.
I won't go into details right now, but I want to note that this is strategy-dependent. For example, effect-based DI works with modules or whatever. And I believe we can make built-in strategies to work with modules too. However, this would require some hacking.
Hmm, you're right, I haven't considered that. I've also often seen people using modules instead of classes for stateless operations, in which case they might want to use auto-inject.
I'll keep this open in case you still want to merge it until support for modules is added.
 Here is an overview of what got changed by this pull request:
 Here is an overview of what got changed by this pull request:
Issues
======
- Added 3
           
Complexity increasing per file
==============================
- lib/dry/auto_inject/strategies/constructor.rb  2
         
Clones added
============
- spec/dry/auto_inject_spec.rb  3
         
See the complete overview on Codacy