lib/nina/assembler.rb in nina-0.1.2 vs lib/nina/assembler.rb in nina-0.1.4

- old
+ new

@@ -1,49 +1,28 @@ # frozen_string_literal: true module Nina # Generates module that adds support for objects creation class Assembler - # Adds ability to delegeate methods via method_missing - module MethodMissingDelegation - def method_missing(name, *attrs, &block) - return super unless methods.detect { |m| m == :__predecessor } - - public_send(__predecessor).public_send(name, *attrs, &block) - end - - def respond_to_missing?(method_name, _include_private = false) - return super unless methods.detect { |m| m == :__predecessor } - - public_send(__predecessor).respond_to?(method_name) - end - end - - def self.def_accessor(accessor, on:, to:, delegate: false) - on.define_singleton_method(:__predecessor) { accessor } - on.define_singleton_method(accessor) { to } - on.extend(MethodMissingDelegation) if delegate - end - def initialize(abstract_factory) @abstract_factory = abstract_factory end def inject(build_order, initialization = {}, callbacks: nil, delegate: false) build_order.each.with_index(-1).inject(nil) do |prev, (name, idx)| object = create_object(name, initialization) - self.class.def_accessor(build_order[idx], on: object, to: prev, delegate: delegate) if prev - callbacks.to_h.fetch(name, []).each { |c| c.call(object) } if callbacks + Nina.def_accessor(build_order[idx], on: object, to: prev, delegate: delegate) if prev + callbacks[name].each { |c| c.call(object) } if callbacks&.key?(name) object end end private def create_object(name, initialization = {}) - return @abstract_factory.send("#{name}_factory").create if initialization[name].nil? + return @abstract_factory.factories[name].create if initialization[name].nil? args, kwargs, block = initialization[name] - @abstract_factory.send("#{name}_factory").create(*args, **kwargs, &block) + @abstract_factory.factories[name].create(*args, **kwargs, &block) end end end