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