Sha256: c5ae177ce02874a60f876e431a83451f6c3d44031ceadca60af7fe0a15004884
Contents?: true
Size: 1.66 KB
Versions: 1
Compression:
Stored size: 1.66 KB
Contents
module Ooz module Base class ModelFactory < Common::BaseFactory class << self 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 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 new(*args, **kargs) 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, **kargs) end end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
ooze-parser-0.1.11 | lib/ooz/base/model_factory.rb |