diff --git a/app/models/site.rb b/app/models/site.rb index a00647a8..9b65fe2e 100644 --- a/app/models/site.rb +++ b/app/models/site.rb @@ -7,6 +7,7 @@ class Site < ApplicationRecord include Site::Forms include Site::FindAndReplace include Site::Api + include Site::Themes include Tienda # Cifrar la llave privada que cifra y decifra campos ocultos. Sutty @@ -23,18 +24,13 @@ class Site < ApplicationRecord allow_root_label: true } - validates :design_id, presence: true validates_inclusion_of :status, in: %w[waiting enqueued building] validates_presence_of :title validates :description, length: { in: 50..160 } validate :deploy_local_presence - validate :compatible_layouts, on: :update - - attr_reader :incompatible_layouts friendly_id :name, use: %i[finders] - belongs_to :design belongs_to :licencia has_many :log_entries, dependent: :destroy @@ -49,8 +45,6 @@ class Site < ApplicationRecord # Mantenemos el nombre que les da Jekyll has_many_attached :static_files - # Clonar el directorio de esqueleto antes de crear el sitio - before_create :clone_skel! # Elimina el directorio al destruir un sitio before_destroy :remove_directories! # Carga el sitio Jekyll una vez que se inicializa el modelo o después @@ -425,14 +419,6 @@ class Site < ApplicationRecord self.private_key ||= Lockbox.generate_key end - # Clona el esqueleto de Sutty para crear el sitio nuevo, no pasa nada - # si el sitio ya existe - def clone_skel! - return if File.directory? path - - Rugged::Repository.clone_at ENV['SKEL_SUTTY'], path - end - # Elimina el directorio del sitio def remove_directories! FileUtils.rm_rf path @@ -475,41 +461,4 @@ class Site < ApplicationRecord errors.add(:deploys, I18n.t('activerecord.errors.models.site.attributes.deploys.deploy_local_presence')) end - - # Valida que al cambiar de plantilla no tengamos artículos en layouts - # inexistentes. - def compatible_layouts - return unless design_id_changed? - - new_configuration = configuration.dup - - if design.no_theme? - new_configuration.delete 'theme' - else - new_configuration['theme'] = design.gem - end - - new_site = Jekyll::Site.new(new_configuration) - new_site.read - - # No vale la pena seguir procesando si no hay artículos! - return if new_site.documents.empty? - - new_site.documents.map(&:read!) - - old_layouts = new_site.documents.map do |doc| - doc.data['layout'] - end.uniq.compact - - @incompatible_layouts = old_layouts - new_site.layouts.keys - - return if @incompatible_layouts.empty? - - @incompatible_layouts.map! do |layout| - i18n.dig('layouts', layout) || layout - end - - errors.add(:design_id, - I18n.t('activerecord.errors.models.site.attributes.design_id.layout_incompatible.error')) - end end