class Dry::AutoInject::Strategies::Args
@api private
Private Instance Methods
define_initialize(klass)
click to toggle source
# File lib/dry/auto_inject/strategies/args.rb, line 25 def define_initialize(klass) super_parameters = MethodParameters.of(klass, :initialize).each do |ps| # Look upwards past `def foo(*)` methods until we get an explicit list of parameters break ps unless ps.pass_through? end if super_parameters.empty? define_initialize_with_params else define_initialize_with_splat(super_parameters) end end
define_initialize_with_params()
click to toggle source
# File lib/dry/auto_inject/strategies/args.rb, line 38 def define_initialize_with_params initialize_args = dependency_map.names.join(', ') instance_mod.class_eval <<-RUBY, __FILE__, __LINE__ + 1 def initialize(#{initialize_args}) #{dependency_map.names.map { |name| "@#{name} = #{name}" }.join("\n")} super() end RUBY end
define_initialize_with_splat(super_parameters)
click to toggle source
# File lib/dry/auto_inject/strategies/args.rb, line 49 def define_initialize_with_splat(super_parameters) super_pass = if super_parameters.splat? '*args' else "*args.take(#{super_parameters.length})" end instance_mod.class_eval <<-RUBY, __FILE__, __LINE__ + 1 def initialize(*args) #{dependency_map.names.map.with_index { |name, i| "@#{name} = args[#{i}]" }.join("\n")} super(#{super_pass}) end RUBY end
define_new()
click to toggle source
Calls superclass method
# File lib/dry/auto_inject/strategies/args.rb, line 13 def define_new class_mod.class_exec(container, dependency_map) do |container, dependency_map| define_method :new do |*args| deps = dependency_map.to_h.values.map.with_index { |identifier, i| args[i] || container[identifier] } super(*deps, *args[deps.size..-1]) end end end