crear sitios clonando el repositorio skel
This commit is contained in:
parent
4b87501709
commit
1c18064a24
2 changed files with 26 additions and 74 deletions
|
@ -15,8 +15,12 @@ class Site < ApplicationRecord
|
||||||
has_many :invitades, -> { where('roles.rol = ?', 'invitade') },
|
has_many :invitades, -> { where('roles.rol = ?', 'invitade') },
|
||||||
through: :roles, source: :usuarie
|
through: :roles, source: :usuarie
|
||||||
|
|
||||||
# Carga el sitio Jekyll una vez que se inicializa el modelo
|
# Clonar el directorio de esqueleto antes de crear el sitio
|
||||||
|
before_create :clone_skel!
|
||||||
|
# Carga el sitio Jekyll una vez que se inicializa el modelo o después
|
||||||
|
# de crearlo
|
||||||
after_initialize :load_jekyll!
|
after_initialize :load_jekyll!
|
||||||
|
after_create :load_jekyll!
|
||||||
|
|
||||||
attr_accessor :jekyll, :collections
|
attr_accessor :jekyll, :collections
|
||||||
|
|
||||||
|
@ -343,8 +347,18 @@ class Site < ApplicationRecord
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
|
# Clona el esqueleto de Sutty para crear el sitio nuevo, no pasa nada
|
||||||
|
# si el sitio ya existe
|
||||||
|
def clone_skel!
|
||||||
|
return if File.directory? path
|
||||||
|
|
||||||
|
Rugged::Repository.clone_at ENV['SKEL_SUTTY'], path
|
||||||
|
end
|
||||||
|
|
||||||
# Carga el sitio Jekyll
|
# Carga el sitio Jekyll
|
||||||
def load_jekyll!
|
def load_jekyll!
|
||||||
|
return unless name
|
||||||
|
|
||||||
Dir.chdir(path) do
|
Dir.chdir(path) do
|
||||||
@jekyll ||= Site.load_jekyll(Dir.pwd)
|
@jekyll ||= Site.load_jekyll(Dir.pwd)
|
||||||
end
|
end
|
||||||
|
|
|
@ -3,81 +3,19 @@
|
||||||
require 'test_helper'
|
require 'test_helper'
|
||||||
|
|
||||||
class SiteTest < ActiveSupport::TestCase
|
class SiteTest < ActiveSupport::TestCase
|
||||||
setup do
|
test 'se puede crear un sitio' do
|
||||||
@user = Usuaria.find('f@kefir.red')
|
site = create :site
|
||||||
@path = File.join(@user.path, 'cyber-women.com')
|
|
||||||
reset_git_repo(@path)
|
assert site.valid?
|
||||||
@site = @user.sites.select { |s| s.name == 'cyber-women.com' }.first
|
# TODO: Mover a la validación del sitio o hacer algo similar
|
||||||
@site.read
|
assert File.directory?(site.path)
|
||||||
|
assert File.directory?(File.join(site.path, '.git'))
|
||||||
end
|
end
|
||||||
|
|
||||||
test 'El directorio es un sitio jekyll' do
|
test 'se puede leer un sitio' do
|
||||||
assert Site.jekyll?(@path)
|
site = create :site, name: 'sutty.nl'
|
||||||
end
|
|
||||||
|
|
||||||
test 'Un directorio se puede cargar como un sitio Jekyll' do
|
assert site.valid?
|
||||||
jekyll = Site.load_jekyll @path
|
assert !site.posts.empty?
|
||||||
|
|
||||||
assert_equal Jekyll::Site, jekyll.class
|
|
||||||
end
|
|
||||||
|
|
||||||
test 'Los artículos no están ordenados si a alguno le falta orden' do
|
|
||||||
assert_not @site.ordered?
|
|
||||||
assert @site.reorder_collection!
|
|
||||||
assert @site.ordered?
|
|
||||||
end
|
|
||||||
|
|
||||||
test 'No podemos poner órdenes arbitrarios' do
|
|
||||||
total = @site.posts.count
|
|
||||||
new_order = Hash[total.times.map { |i| [i.to_s, rand(total)] }]
|
|
||||||
|
|
||||||
assert_not @site.reorder_collection('posts', new_order)
|
|
||||||
end
|
|
||||||
|
|
||||||
test 'Si les damos un orden alternativo los reordenamos' do
|
|
||||||
total = @site.posts.count
|
|
||||||
order = total.times.map(&:to_s)
|
|
||||||
new_order = Hash[order.zip(order.shuffle)]
|
|
||||||
|
|
||||||
assert @site.reorder_collection('posts', new_order)
|
|
||||||
|
|
||||||
# podemos hacer este test porque reordenar los posts no ordena el
|
|
||||||
# array
|
|
||||||
new_order.each do |k, v|
|
|
||||||
v = v.to_i
|
|
||||||
k = k.to_i
|
|
||||||
assert_equal v, @site.posts[k].order
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
test 'Podemos reordenar solo una parte de los artículos' do
|
|
||||||
total = @site.posts.count
|
|
||||||
order = (total - rand(total - 1)).times.map(&:to_s)
|
|
||||||
new_order = Hash[order.zip(order.shuffle)]
|
|
||||||
|
|
||||||
assert @site.reorder_collection('posts', new_order)
|
|
||||||
|
|
||||||
# podemos hacer este test porque reordenar los posts no ordena el
|
|
||||||
# array
|
|
||||||
new_order.each do |k, v|
|
|
||||||
v = v.to_i
|
|
||||||
k = k.to_i
|
|
||||||
assert_equal v, @site.posts[k].order
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
test 'Un sitio tiene traducciones' do
|
|
||||||
assert_equal %w[ar es en], @site.translations
|
|
||||||
assert @site.i18n?
|
|
||||||
end
|
|
||||||
|
|
||||||
test 'El idioma por defecto es el idioma actual de la plataforma' do
|
|
||||||
assert_equal 'es', @site.default_lang
|
|
||||||
end
|
|
||||||
|
|
||||||
test 'El sitio tiene layouts' do
|
|
||||||
assert_equal %w[anexo archive default feed header.ar header.en
|
|
||||||
header.es header license.ar license.en license.es license pandoc
|
|
||||||
politicas sesion simple style ].sort, @site.layouts
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue