Module: LunaPark::Extensions::Injector::ClassMethods

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

Instance Method Summary collapse

Instance Method Details

#dependenciesObject

List class defined dependencies

Examples:

get dependency

class Foo
   include LunaPark::Extensions::Injector

   dependency(:example) { Bar.new }
 end

 Foo.dependencies # => {:example=>#<Proc:[email protected]:77>}


147
148
149
# File 'lib/luna_park/extensions/injector.rb', line 147

def dependencies
  @dependencies ||= {}
end

#dependency(name, &block) ⇒ Object

Set dependency

Examples:

Set dependency

class Foo
  include LunaPark::Extensions::Injector

  dependency(:example) { Bar.new }
end

Raises:

  • (ArgumentError)


126
127
128
129
130
131
132
133
134
# File 'lib/luna_park/extensions/injector.rb', line 126

def dependency(name, &block)
  raise ArgumentError, 'no block given' unless block_given?

  dependencies[name] = block

  define_method(name) do
    dependencies.call_with_cache(name)
  end
end

#inherited(inheritor) ⇒ Object



111
112
113
114
115
# File 'lib/luna_park/extensions/injector.rb', line 111

def inherited(inheritor)
  dependencies.each_pair do |key, block|
    inheritor.dependency(key, &block)
  end
end