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