Class: Ooz::Base::ModelFactory

Inherits:
Common::BaseFactory show all
Defined in:
lib/ooz/base/model_factory.rb

Class Method Summary collapse

Methods inherited from Common::BaseClass

overridable_const, passthrough, passthrough_arr, passthrough_cls

Class Method Details

.def_parent_class(parent_class) ⇒ Object



19
20
21
22
23
24
25
26
# 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) ⇒ Object



5
6
7
8
9
10
11
12
13
14
15
16
17
# 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) ⇒ Object



28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# 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