module PIM::DataModuleObject
Protected Class Methods
create_data_module_class(data_module, parent_module: data_module, class_name: nil, force: false, &block)
click to toggle source
# File pim.rb, line 3645 def self.create_data_module_class data_module, parent_module: data_module, class_name: nil, force: false, &block klass = block.call klass_type = klass.superclass.name.split('::').last klass.send(:set_data_module, data_module) klass.send(:set_class_name, class_name, klass_type, force: force) return klass end
set_data_module(object, data_module)
click to toggle source
# File pim.rb, line 3627 def self.set_data_module object, data_module if object.is_a?(Class) object.class_exec do self.set_data_module(data_module) end elsif object.is_a?(Module) object.module_exec do self.set_data_module(data_module) end elsif object.is_a?(Object) object.instance_exec do self.set_data_module(data_module) end else raise "Cannot set data module on objects of class #{object.class}" end end
Public Instance Methods
data_module()
click to toggle source
# File pim.rb, line 3621 def data_module @data_module || PIM.active_module end
Protected Instance Methods
set_class_name(class_name, class_type, parent_module: data_module, force: false)
click to toggle source
# File pim.rb, line 3663 def set_class_name class_name, class_type, parent_module: data_module, force: false return if class_name.nil? or class_type.nil? class_path = Array(class_name).map { |p| PIM.upcase_first(p) }.unshift(class_type + '__') class_name = class_path.last # Create child modules, if necessary class_path[0..-2].each do |module_name| module_name = PIM.upcase_first(module_name) child_module = parent_module.const_get(module_name) if parent_module.const_defined?(module_name) if child_module.nil? child_module = Module.new parent_module.const_set(module_name, child_module) end parent_module = child_module end if parent_module.const_defined?(class_name) if force PIM.log_warn("Class '#{class_name}' in '#{parent_module}' already exist. Constant will be overwritten due to 'force' flag!") parent_module.send(:remove_const, class_name) else PIM.log_warn("Class '#{class_name}' in '#{parent_module}' already exist. Constant will not be overwritten!") end end parent_module.const_set(class_name, self) unless parent_module.const_defined?(class_name) self.name = class_name if self.respond_to?(:name=) end
set_data_module(data_module)
click to toggle source
# File pim.rb, line 3657 def set_data_module data_module raise "Data module must not be nil" if data_module.nil? raise "Data module is already set" if not @data_module.nil? @data_module = data_module end