From 27b449433343d1669afd380f5abf078c5b8c4e84 Mon Sep 17 00:00:00 2001 From: f Date: Sun, 1 Aug 2021 21:53:37 -0300 Subject: [PATCH] Refactorizar DeployZip --- app/models/deploy_zip.rb | 48 ++++++++++++++++++++++++++++------------ 1 file changed, 34 insertions(+), 14 deletions(-) diff --git a/app/models/deploy_zip.rb b/app/models/deploy_zip.rb index ec8973d1..c25352b9 100644 --- a/app/models/deploy_zip.rb +++ b/app/models/deploy_zip.rb @@ -2,22 +2,24 @@ require 'zip' -# Genera un ZIP a partir del sitio ya construido +# Genera un ZIP a partir del sitio ya generado y lo coloca para descarga +# dentro del sitio público. # # TODO: Firmar con minisign class DeployZip < Deploy - store :values, accessors: %i[], coder: JSON + # El hostname es el nombre del archivo. + validates :hostname, format: { with: /\.zip\z/ } # Una vez que el sitio está generado, tomar todos los archivos y - # y generar un zip accesible públicamente. + # y generar un ZIP accesible públicamente. # - # rubocop:disable Metrics/MethodLength + # @return [Boolean] def deploy - FileUtils.rm_f path + remove_destination! time_start Dir.chdir(destination) do - Zip::File.open(path, Zip::File::CREATE) do |z| + Zip::File.open(hostname, Zip::File::CREATE) do |z| Dir.glob('./**/**').each do |f| File.directory?(f) ? z.mkdir(f) : z.add(f, f) end @@ -31,25 +33,43 @@ class DeployZip < Deploy File.exist? path end - # rubocop:enable Metrics/MethodLength - def limit - 1 + # La URL de descarga del archivo. + # + # @return [String] + def url + "#{site.deploy_local.url}/#{hostname}" end + # Devuelve el tamaño del ZIP en bytes + # + # @return [Integer] def size File.size path end + # El archivo ZIP se guarda dentro del sitio local para poder + # descargarlo luego. + # + # @return [String] def destination - File.join(Rails.root, '_deploy', site.hostname) + site.deploy_local.destination end - def file - "#{site.hostname}.zip" + # El "hostname" es la ubicación del archivo. + # + # @return [String] + def default_hostname + "#{site.deploy_local.hostname}.zip" end - def path - File.join(destination, file) + private + + def remove_destination! + FileUtils.rm_f path + end + + def implements_hostname_validation? + true end end