vincular a versión con www

This commit is contained in:
f 2019-10-01 16:41:33 -03:00
parent 7a8191b854
commit 0bbedd2e26
No known key found for this signature in database
GPG key ID: 2AE5A13E321F953D
10 changed files with 144 additions and 38 deletions

View file

@ -23,9 +23,7 @@ class SitesController < ApplicationController
def new
@site = Site.new
authorize @site
@site.deploys.build type: 'DeployLocal'
@site.deploys.build type: 'DeployZip'
SiteService.new(site: @site).build_deploys
end
def create
@ -41,14 +39,8 @@ class SitesController < ApplicationController
def edit
@site = find_site
# TODO: esto está acá para ayudar en la migración de
if @site.deploys.empty?
@site.deploys.build(type: 'DeployLocal')
@site.deploys.build type: 'DeployZip'
end
authorize @site
SiteService.new(site: @site).build_deploys
end
def update

35
app/models/deploy_www.rb Normal file
View file

@ -0,0 +1,35 @@
# frozen_string_literal: true
# Vincula la versión del sitio con www a la versión sin
class DeployWww < Deploy
store :values, accessors: %i[], coder: JSON
before_destroy :remove_destination!
def deploy
File.symlink?(destination) ||
File.symlink(site.hostname, destination).zero?
end
def limit
1
end
def size
File.size destination
end
def destination
File.join(Rails.root, '_deploy', fqdn)
end
def fqdn
"www.#{site.hostname}"
end
private
def remove_destination!
File.rm_f destination
end
end

View file

@ -5,6 +5,10 @@
class Site < ApplicationRecord
include FriendlyId
# TODO: Hacer que los diferentes tipos de deploy se auto registren
# @see app/services/site_service.rb
DEPLOYS = %i[local www zip].freeze
validates :name, uniqueness: true, hostname: true
validates :design_id, presence: true
validate :deploy_local_presence

View file

@ -35,6 +35,15 @@ SiteService = Struct.new(:site, :usuarie, :params, keyword_init: true) do
site
end
def build_deploys
Site::DEPLOYS.map { |deploy| "Deploy#{deploy.capitalize}" }
.each do |deploy|
next if site.deploys.find_by type: deploy
site.deploys.build type: deploy
end
end
private
# Guarda los cambios de la configuración en el repositorio git

View file

@ -0,0 +1,17 @@
-# Formulario para alojar una copia a www
.row
.col
= deploy.hidden_field :id
= deploy.hidden_field :type
%h3
-#
El checkbox invierte la lógica de destrucción porque queremos
crear el deploy si está activado y destruirlo si está
desactivado.
= deploy.check_box :_destroy,
{ checked: deploy.object.persisted? },
'0', '1'
= deploy.label :_destroy, t('.title')
= sanitize_markdown t('.help', fqdn: deploy.object.fqdn),
tags: %w[p strong em a]

View file

@ -51,6 +51,10 @@ en:
title: Build the site
success: Success!
error: Error
deploy_www:
title: Link to www
success: Success!
error: Error
deploy_zip:
title: Build ZIP file
success: Available for download
@ -209,6 +213,16 @@ en:
We're working out the details for allowing your own site
domains, you can help us!
ejemplo: 'example'
deploy_www:
title: 'Add www to the address'
help: |
When you enable this option, your site will also be available
under <https://%{fqdn}/>.
The www prefix to web addresses has been a way of refering to
computers that are available on the World Wide Web. But since
the Web has become the hegemonic way of accessing the Internet,
it has become less used. Even so, people still uses them.
deploy_zip:
title: 'Generate a ZIP file'
help: |

View file

@ -53,6 +53,10 @@ es:
title: Generar el sitio
success: ¡Éxito!
error: Hubo un error
deploy_www:
title: Vincular a versión con www
success: ¡Éxito!
error: Hubo un error
deploy_zip:
title: Generar archivo ZIP
success: Disponible para descargar
@ -212,6 +216,18 @@ es:
Estamos desarrollando la posibilidad de agregar tus propios
dominios, ¡ayudanos!
ejemplo: 'ejemplo'
deploy_www:
title: 'Agregar www a la dirección'
help: |
Cuando habilitas esta opción, tu sitio también estará disponible
como <https://%{fqdn}/>.
El prefijo www para las direcciones web ha sido una forma de
referirse a las computadoras que están disponibles en la _World
Wide Web_ (WWW, Red de alcance mundial). Pero desde que la Web
se ha vuelto la forma hegemónica de acceder a Internet, el
prefijo se usa cada vez menos. Aun así, algunas personas lo
usan.
deploy_zip:
title: 'Generar un archivo ZIP'
help: |

View file

@ -1,20 +1,24 @@
# frozen_string_literal: true
require 'test_helper'
class DeployZipTest < ActiveSupport::TestCase
class DeployLocalTest < ActiveSupport::TestCase
test 'se puede deployear' do
deploy_local = create :deploy_local
site = create :site
local = create :deploy_local, site: site
deploy = create :deploy_zip, site: site
assert deploy_local.deploy
assert File.directory?(deploy_local.destination)
assert File.exist?(File.join(deploy_local.destination, 'index.html'))
assert_equal 3, deploy_local.build_stats.count
# Primero tenemos que generar el sitio
local.deploy
assert deploy_local.build_stats.map(&:bytes).compact.inject(:+).positive?
assert deploy_local.build_stats.map(&:seconds).compact.inject(:+).positive?
escaped_path = Shellwords.escape(deploy.path)
assert deploy_local.destroy
assert_not File.directory?(deploy_local.destination)
assert deploy.deploy
assert File.file?(deploy.path)
assert_equal 'application/zip',
`file --mime-type "#{escaped_path}"`.split(' ').last
assert_equal 1, deploy.build_stats.count
assert deploy.build_stats.map(&:bytes).inject(:+).positive?
assert deploy.build_stats.map(&:seconds).inject(:+).positive?
local.destroy
end
end

View file

@ -0,0 +1,19 @@
# frozen_string_literal: true
require 'test_helper'
class DeployWwwTest < ActiveSupport::TestCase
test 'se puede deployear' do
site = create :site
local = create :deploy_local, site: site
deploy = create :deploy_www, site: site
# Primero tenemos que generar el sitio
local.deploy
assert deploy.deploy
assert File.symlink?(deploy.destination)
local.destroy
end
end

View file

@ -1,24 +1,20 @@
# frozen_string_literal: true
class DeployLocalTest < ActiveSupport::TestCase
require 'test_helper'
class DeployZipTest < ActiveSupport::TestCase
test 'se puede deployear' do
site = create :site
local = create :deploy_local, site: site
deploy = create :deploy_zip, site: site
deploy_local = create :deploy_local
# Primero tenemos que generar el sitio
local.deploy
assert deploy_local.deploy
assert File.directory?(deploy_local.destination)
assert File.exist?(File.join(deploy_local.destination, 'index.html'))
assert_equal 3, deploy_local.build_stats.count
escaped_path = Shellwords.escape(deploy.path)
assert deploy_local.build_stats.map(&:bytes).compact.inject(:+).positive?
assert deploy_local.build_stats.map(&:seconds).compact.inject(:+).positive?
assert deploy.deploy
assert File.file?(deploy.path)
assert_equal 'application/zip',
`file --mime-type "#{escaped_path}"`.split(' ').last
assert_equal 1, deploy.build_stats.count
assert deploy.build_stats.map(&:bytes).inject(:+).positive?
assert deploy.build_stats.map(&:seconds).inject(:+).positive?
local.destroy
assert deploy_local.destroy
assert_not File.directory?(deploy_local.destination)
end
end