Class: Puppet::Pops::Binder::Producers::AssistedInjectProducer Private
- Defined in:
- lib/puppet/pops/binder/producers.rb
Overview
This class is part of a private API. You should avoid using this class if possible, as it may be removed or be changed in the future.
This type of producer should only be created by the Injector.
Instance Attribute Summary
Attributes inherited from Producer
Instance Method Summary collapse
-
#initialize(injector, clazz) ⇒ AssistedInjectProducer
constructor
private
An Assisted Inject Producer is created when a lookup is made of a type that is not bound.
- #produce(scope, *args) ⇒ Object private
- #producer(scope, *args) ⇒ Object private
Constructor Details
#initialize(injector, clazz) ⇒ AssistedInjectProducer
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
This initializer has a different signature than all others. Do not use in regular logic.
An Assisted Inject Producer is created when a lookup is made of a type that is not bound. It does not support a transformer lambda.
471 472 473 474 475 476 477 |
# File 'lib/puppet/pops/binder/producers.rb', line 471 def initialize(injector, clazz) raise ArgumentError, "class must be given" unless clazz.is_a?(Class) @injector = injector @clazz = clazz @inst = nil end |
Instance Method Details
#produce(scope, *args) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
479 480 481 482 |
# File 'lib/puppet/pops/binder/producers.rb', line 479 def produce(scope, *args) producer(scope, *args) unless @inst @inst end |
#producer(scope, *args) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 |
# File 'lib/puppet/pops/binder/producers.rb', line 485 def producer(scope, *args) @inst = nil # A class :inject method wins over an instance :initialize if it is present, unless a more specific zero args # constructor exists. (i.e do not pick :inject from superclass if class has a zero args constructor). # if @clazz.respond_to?(:inject) inject_method = @clazz.method(:inject) initialize_method = @clazz.instance_method(:initialize) if inject_method.owner <= initialize_method.owner || initialize_method.arity != 0 @inst = @clazz.inject(@injector, scope, nil, *args) end end if @inst.nil? unless args.empty? raise ArgumentError, "Assisted Inject can not pass arguments to no-args constructor when there is no class inject method." end @inst = @clazz.new() end self end |