no compilar varias veces desde el compilador

esto evita que se espamee el botón de publicar
This commit is contained in:
f 2021-05-10 13:14:02 -03:00
parent 10580d2b4f
commit 39eb584a97
3 changed files with 20 additions and 2 deletions

View file

@ -10,7 +10,7 @@ class DeployJob < ApplicationJob
@site = Site.find(site) @site = Site.find(site)
# Si ya hay una tarea corriendo, aplazar esta # Si ya hay una tarea corriendo, aplazar esta
if @site.status == 'building' if @site.building?
DeployJob.perform_in(60, site, notify) DeployJob.perform_in(60, site, notify)
return return
end end

View file

@ -315,14 +315,25 @@ class Site < ApplicationRecord
# Poner en la cola de compilación # Poner en la cola de compilación
def enqueue! def enqueue!
!enqueued? && update_attribute(:status, 'enqueued') waiting? && update(status: 'enqueued')
end end
# Está en la cola de compilación? # 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? def enqueued?
status == 'enqueued' status == 'enqueued'
end end
def waiting?
status == 'waiting'
end
def building?
status == 'building'
end
# Cargar el sitio Jekyll # Cargar el sitio Jekyll
# #
# TODO: En lugar de leer todo junto de una vez, extraer la carga de # TODO: En lugar de leer todo junto de una vez, extraer la carga de

View file

@ -102,6 +102,13 @@ class SitesControllerTest < ActionDispatch::IntegrationTest
'index.html')) 'index.html'))
end 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 test 'se pueden actualizar' do
name = SecureRandom.hex name = SecureRandom.hex
design = Design.all.where.not(id: @site.design_id).sample design = Design.all.where.not(id: @site.design_id).sample