diff --git a/app/models/site.rb b/app/models/site.rb index 2ee7a8ef..0d15b5f8 100644 --- a/app/models/site.rb +++ b/app/models/site.rb @@ -54,8 +54,7 @@ class Site < ApplicationRecord before_create :clone_skel! # Elimina el directorio al destruir un sitio before_destroy :remove_directories! - # Cambiar el nombre del directorio - before_update :update_name! + before_save :add_private_key_if_missing! # Guardar la configuración si hubo cambios after_save :sync_attributes_with_config! @@ -488,12 +487,6 @@ class Site < ApplicationRecord FileUtils.rm_rf path end - def update_name! - return unless name_changed? - - FileUtils.mv path_was, path - reload_jekyll! - end # Sincroniza algunos atributos del sitio con su configuración y # guarda los cambios diff --git a/app/services/site_service.rb b/app/services/site_service.rb index 5c37cfe3..8c0a6833 100644 --- a/app/services/site_service.rb +++ b/app/services/site_service.rb @@ -88,6 +88,25 @@ SiteService = Struct.new(:site, :usuarie, :params, keyword_init: true) do result.present? end + def rename(name) + return if name == site.name + + moved = false + site.name = name + + Site.transaction do + raise ActiveRecord::Rollback if File.exist?(site.path) + + FileUtils.mv(site.path_was, site.path) + moved = true + ActiveStorage::Blob.where(service_name: site.name_was).update_all(service_name: site.name) + site.save + rescue StandardError + FileUtils.mv(site.path, site.path_was) if moved + raise + end + end + private # Guarda los cambios de la configuración en el repositorio git @@ -222,9 +241,7 @@ SiteService = Struct.new(:site, :usuarie, :params, keyword_init: true) do end end - private - - def with_all_locales(&block) + def with_all_locales site.locales.map do |locale| next unless I18n.available_locales.include? locale