From 39eb584a97ebca66c83e591d29e52fd4c6d9c7ad Mon Sep 17 00:00:00 2001 From: f Date: Mon, 10 May 2021 13:14:02 -0300 Subject: [PATCH] no compilar varias veces desde el compilador MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit esto evita que se espamee el botón de publicar --- app/jobs/deploy_job.rb | 2 +- app/models/site.rb | 13 ++++++++++++- test/controllers/sites_controller_test.rb | 7 +++++++ 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/app/jobs/deploy_job.rb b/app/jobs/deploy_job.rb index e5e051c7..f1ceca9e 100644 --- a/app/jobs/deploy_job.rb +++ b/app/jobs/deploy_job.rb @@ -10,7 +10,7 @@ class DeployJob < ApplicationJob @site = Site.find(site) # Si ya hay una tarea corriendo, aplazar esta - if @site.status == 'building' + if @site.building? DeployJob.perform_in(60, site, notify) return end diff --git a/app/models/site.rb b/app/models/site.rb index 7a8b4b4b..7aeb8a9b 100644 --- a/app/models/site.rb +++ b/app/models/site.rb @@ -315,14 +315,25 @@ class Site < ApplicationRecord # Poner en la cola de compilación def enqueue! - !enqueued? && update_attribute(:status, 'enqueued') + waiting? && update(status: 'enqueued') end # Está en la cola de compilación? + # + # TODO: definir todos estos métodos dinámicamente, aunque todavía no + # tenemos una máquina de estados propiamente dicha. def enqueued? status == 'enqueued' end + def waiting? + status == 'waiting' + end + + def building? + status == 'building' + end + # Cargar el sitio Jekyll # # TODO: En lugar de leer todo junto de una vez, extraer la carga de diff --git a/test/controllers/sites_controller_test.rb b/test/controllers/sites_controller_test.rb index 5f67092a..a7e2f68b 100644 --- a/test/controllers/sites_controller_test.rb +++ b/test/controllers/sites_controller_test.rb @@ -102,6 +102,13 @@ class SitesControllerTest < ActionDispatch::IntegrationTest 'index.html')) end + test 'no se pueden encolar varias veces seguidas' do + assert_enqueued_jobs 2 do + post site_enqueue_url(@site), headers: @authorization + post site_enqueue_url(@site), headers: @authorization + end + end + test 'se pueden actualizar' do name = SecureRandom.hex design = Design.all.where.not(id: @site.design_id).sample