Module: LunaPark::Extensions::Injector::InstanceMethods

Included in:
LunaPark::Extensions::Injector
Defined in:
lib/luna_park/extensions/injector.rb

Instance Method Summary collapse

Instance Method Details

#dependenciesObject

List instance defined dependencies, in default it defined in class methods.

class SetActive
  dependency(:repo) { Repo.new(CONFIG[:db_connect]) }
  dependency(:messenger) { Messenger }
end

use_case = SetActive.new(user_id: 1)

# All dependencies
use_case.dependencies             # => {
                                  #   :repo=>#<Proc:[email protected]:33>,
                                  #   :messenger=>#<Proc:[email protected]:34>
                                  # }

# Single dependency
use_case.dependencies[:messenger] # => #<Proc:[email protected]:34>

# Dependency value
use_case.messenger                # => Messenger


175
176
177
# File 'lib/luna_park/extensions/injector.rb', line 175

def dependencies
  @dependencies ||= Dependencies.wrap(self.class.dependencies)
end

#dependencies=(value) ⇒ Object

Setter - highly recommended for use in specs so you don’t forget to override all dependencies.

use_case.dependencies = {
  repo: -> { Fake::Repo.new }
}
use_case.messenger # => Dependency `messenger` is undefined (LunaPark::Errors::DependencyUndefined)
use_case.call      # => Dependency `messenger` is undefined (LunaPark::Errors::DependencyUndefined)

# Redefine single dependency still possible
use_case.dependencies[:messenger] = -> { Messenger }


191
192
193
# File 'lib/luna_park/extensions/injector.rb', line 191

def dependencies=(value)
  @dependencies = Dependencies.wrap(value)
end

#inject(value) ⇒ Object

Set dependencies, returns ‘self` to allow chaining Don’t forget to override all dependencies.

use_case
  .inject({ repo: -> { Fake::Repo.new }})
  .call


203
204
205
206
# File 'lib/luna_park/extensions/injector.rb', line 203

def inject(value)
  self.dependencies = value
  self
end