Method: BBLib::SimpleInit::ClassMethods#new
- Defined in:
- lib/bblib/core/mixins/simple_init.rb
#new(*args, &block) ⇒ Object
Overriden new method that allows parent classes to dynamically generate instantiations of descendants by using the named init_foundation_method argument.
63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
# File 'lib/bblib/core/mixins/simple_init.rb', line 63 def new(*args, &block) named = BBLib.named_args(*args) if init_foundation && named[init_foundation_method] && ((named[init_foundation_method] != self.send(init_foundation_method)) rescue false) klass = [self, descendants].flatten.find do |k| if init_foundation_compare init_foundation_compare.call(k.send(init_foundation_method), named[init_foundation_method]) else k.send(init_foundation_method).to_s == named[init_foundation_method].to_s end end raise ArgumentError, "Unknown #{init_foundation_method} \"#{named[init_foundation_method]}\"" unless klass klass == self ? super : klass.new(*args, &block) elsif named[init_foundation_method].nil? && init_foundation_default_class != self && init_foundation_default_class < self init_foundation_default_class.new(*args, &block) else super end end |