class Ooz::Base::ModelFactory
Public Class Methods
def_parent_class(parent_class)
click to toggle source
# File lib/ooz/base/model_factory.rb, line 19 def def_parent_class (parent_class) msg = "Expected a valid parent class for you factory, from which the other classes inherit. Given #{parent_class}" valid_class = parent_class && parent_class.is_a?(Class) raise msg unless valid_class overridable_const :parent_class, parent_class overridable_const :base_namespace, parent_class.name end
def_white_classes(*str_classes)
click to toggle source
# File lib/ooz/base/model_factory.rb, line 5 def def_white_classes (*str_classes) str_classes = str_classes.map do |cls| case cls when cls.respond_to?(:name) cls.name when Symbol cls.to_s when String cls end end.compact overridable_const :white_classes, str_classes end
new(*args)
click to toggle source
# File lib/ooz/base/model_factory.rb, line 28 def new(*args) raise "You must use 'def_parent_class' to initialize your Factory class" if !defined?(parent_class) type = args.first&.dig("_type")&.split("::")&.last raise "Your object should have field '_type' defined" if !type if white_classes.include?(type) str_class = "#{base_namespace}::#{type}" raise "This class does not exist: #{str_class}" if !Object.const_defined?(str_class) klass = Object.const_get(str_class) else str_class = "#{base_namespace}::Undefined" klass = Object.const_defined?(str_class)? Object.const_get(str_class) : parent_class end klass.new(*args) end