module PowerStencil::Engine::EntitiesHandling

Public Class Methods

all_types() click to toggle source
# File lib/power_stencil/engine/entities_handling.rb, line 8
def self.all_types
  entities_base_type = UniverseCompiler::Entity::Base

  klasses = ObjectSpace.each_object(Class).select do |klass|
    klass < entities_base_type and not klass.singleton_class?
  end
  types = klasses.map &:entity_type

  types.zip(klasses).to_h.reject do |t, k|
    t.to_s.include? '/'
  end
end

Public Instance Methods

available_entities_hash(force_rescan: false) click to toggle source
# File lib/power_stencil/engine/entities_handling.rb, line 21
def available_entities_hash(force_rescan: false)
  if force_rescan
    available_entity_types force_rescan: true
  end
  @available_entities_hash
end
available_entity_types(force_rescan: false) click to toggle source
# File lib/power_stencil/engine/entities_handling.rb, line 28
def available_entity_types(force_rescan: false)
  if force_rescan
    @available_entities_hash = PowerStencil::Engine::EntitiesHandling.all_types
  else
    @available_entities_hash ||= PowerStencil::Engine::EntitiesHandling.all_types
  end
  @available_entities_hash.keys
end
delete_entity(work_universe, type, name, delete_files: false) click to toggle source
# File lib/power_stencil/engine/entities_handling.rb, line 45
def delete_entity(work_universe, type, name, delete_files: false)
  entity_to_delete = work_universe.get_entity type, name
  get_user_confirmation prompt: "Are you sure you want delete '#{[type, name].join '/'}' ?" do
    work_universe.delete(entity_to_delete).each do |impacted_entity, _|
      impacted_entity.save raise_error: false, force_save: true
    end
    entity_to_delete.delete force_files_deletion: delete_files
    entity_to_delete
  end
end
entities(universe = self.root_universe, criterion: nil, value: nil, &filter_block) click to toggle source
# File lib/power_stencil/engine/entities_handling.rb, line 41
def entities(universe = self.root_universe, criterion: nil, value: nil, &filter_block)
  universe.get_entities criterion: criterion, value: value, &filter_block
end
entity(type, name, universe = self.root_universe) click to toggle source
# File lib/power_stencil/engine/entities_handling.rb, line 37
def entity(type, name, universe = self.root_universe)
  universe.get_entity type, name
end
new_entity(work_universe, type, fields: {}, user: false) click to toggle source
# File lib/power_stencil/engine/entities_handling.rb, line 56
def new_entity(work_universe, type, fields: {}, user: false)
  logger.debug "Trying to create a new entity in '#{work_universe.name}'"
  unless available_entity_types.include? type.to_sym
    raise PowerStencil::Error, "Unknown entity type: '#{type}'"
  end
  fields[:name] = fields[:name].to_s
  res = @available_entities_hash[type.to_sym].new fields: fields, universe: work_universe, user: user
  logger.debug "Created new '#{type}': \n#{fields.to_yaml}"
  work_universe.add res
  if work_universe == PowerStencil.project.engine.root_universe
    res.source_uri = user ? PowerStencil.project.user_entity_path(res) : PowerStencil.project.project_entity_path(res)
  else
    PowerStencil.logger.warn "Creating entity, but you won't be able to save it in compiled mode !"
  end
  res
end