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