diff --git a/app/models/site/build_stats.rb b/app/models/site/build_stats.rb index 6eebcc84..071b1eab 100644 --- a/app/models/site/build_stats.rb +++ b/app/models/site/build_stats.rb @@ -40,6 +40,72 @@ class Site def not_published_yet? build_stats.jekyll.where(status: true).count.zero? end + + # Cambios posibles luego de la última publicación exitosa: + # + # * Artículos modificados + # * Configuración modificada + # * Métodos de publicación añadidos + # + # @return [Boolean] + def awaiting_publication? + waiting? && (post_pending? || deploy_pending? || configuration_pending?) + end + + # Se modificaron artículos después de publicar el sitio por última + # vez + # + # @return [Boolean] + def post_pending? + last_indexed_post_time > last_publication_time + end + + # Se modificó el sitio después de publicarlo por última vez + # + # @return [Boolean] + def deploy_pending? + last_deploy_time > last_publication_time + end + + # Se modificó la configuración del sitio + # + # @return [Boolean] + def configuration_pending? + last_configuration_time > last_publication_time + end + + private + + # Encuentra la fecha del último artículo modificado. Si no hay + # ninguno, devuelve la fecha de modificación del sitio. + # + # @return [Time] + def last_indexed_post_time + indexed_posts.order(updated_at: :desc).select(:updated_at).first&.updated_at || updated_at + end + + # Encuentra la fecha de última modificación de los métodos de + # publicación. + # + # @return [Time] + def last_deploy_time + deploys.order(created_at: :desc).select(:created_at).first&.created_at || updated_at + end + + # Encuentra la fecha de última publicación exitosa, si no hay + # ninguno, devuelve la fecha de modificación del sitio. + # + # @return [Time] + def last_publication_time + build_stats.jekyll.where(status: true).order(created_at: :desc).select(:created_at).first&.created_at || updated_at + end + + # Fecha de última modificación de la configuración + # + # @return [Time] + def last_configuration_time + File.mtime(config.path) + end end end end diff --git a/app/views/posts/index.haml b/app/views/posts/index.haml index 7f9658af..3f3ec6a8 100644 --- a/app/views/posts/index.haml +++ b/app/views/posts/index.haml @@ -2,8 +2,7 @@ %aside.menu.col-md-3 = render 'sites/header', site: @site - - cache_if @usuarie, [@site, I18n.locale] do - = render 'sites/status', site: @site + = render 'sites/status', site: @site = render 'sites/build', site: @site, class: 'btn-block' diff --git a/app/views/sites/_status.haml b/app/views/sites/_status.haml index 4cf480df..6a610e73 100644 --- a/app/views/sites/_status.haml +++ b/app/views/sites/_status.haml @@ -1,7 +1,9 @@ - link = nil - if site.not_published_yet? - message = t('.not_published_yet') -- if site.building? +- elsif site.awaiting_publication? + - message = t('.awaiting_publication') +- elsif site.building? - if site.average_publication_time_calculable? - average_building_time = site.average_publication_time - elsif !site.similar_sites? diff --git a/config/locales/en.yml b/config/locales/en.yml index 27c52f48..8329419b 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -367,6 +367,7 @@ en: building: "Your site is building, refresh this page in ." not_published_yet: "Your site is being published for the first time, please wait up to 1 minute..." available: "Your site is available! Click here to find all the different ways to visit it." + awaiting_publication: "There are unpublished changes. Click the button below and wait a moment to find them on your site." index: title: 'My Sites' pull: 'Upgrade' diff --git a/config/locales/es.yml b/config/locales/es.yml index e3339156..c415d2e0 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -372,6 +372,7 @@ es: building: "Tu sitio se está publicando, recargá esta página en ." not_published_yet: "Tu sitio se está publicando por primera vez, por favor espera hasta un minuto..." available: "¡Tu sitio está disponible! Cliqueá aquí para encontrar todas las formas en que podés visitarlo." + awaiting_publication: "Hay cambios sin publicar, cliqueá el botón debajo y espera un momento para encontrarlos en tu sitio." index: title: 'Mis sitios' pull: 'Actualizar'