Class: Ooz::Base::ModelFactory
Class Method Summary
collapse
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
|