2018-01-29 22:19:10 +00:00
|
|
|
# Un sitio es un directorio dentro del directorio de sitios de cada
|
|
|
|
# Usuaria
|
|
|
|
class Site
|
|
|
|
|
|
|
|
attr_accessor :jekyll
|
2018-02-02 22:20:31 +00:00
|
|
|
attr_reader :path
|
2018-01-29 22:19:10 +00:00
|
|
|
|
2018-02-02 22:20:31 +00:00
|
|
|
def initialize(jekyll:, path: nil)
|
2018-01-29 22:19:10 +00:00
|
|
|
@jekyll = jekyll
|
2018-02-02 22:20:31 +00:00
|
|
|
@path = path || @jekyll.config['source']
|
2018-01-29 22:19:10 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
# Obtener el nombre del sitio
|
|
|
|
def name
|
|
|
|
@name ||= @jekyll.config['source'].split('/').last
|
|
|
|
end
|
|
|
|
|
|
|
|
# El id es el sitio sin puntos, para no confundir al routeador de
|
|
|
|
# rails
|
|
|
|
def id
|
|
|
|
@id ||= name.tr('.', '-')
|
|
|
|
end
|
|
|
|
alias :to_s :id
|
|
|
|
|
|
|
|
# Los posts de este sitio
|
|
|
|
def posts
|
|
|
|
return @posts if @posts
|
|
|
|
|
2018-02-02 22:20:31 +00:00
|
|
|
if @jekyll.posts.docs.empty?
|
|
|
|
@jekyll.read
|
|
|
|
# Queremos saber cuantas veces releemos los articulos
|
|
|
|
Rails.logger.info 'Leyendo articulos'
|
|
|
|
end
|
2018-01-29 22:19:10 +00:00
|
|
|
|
|
|
|
# Los convertimos a una clase intermedia capaz de acceder a sus
|
|
|
|
# datos y modificarlos
|
|
|
|
@posts = @jekyll.posts.docs.map do |post|
|
2018-02-02 22:20:31 +00:00
|
|
|
Post.new(site: self, post: post)
|
2018-01-29 22:19:10 +00:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
# El directorio donde se almacenan los sitios
|
|
|
|
def self.site_path
|
|
|
|
File.join(Rails.root, '_sites')
|
|
|
|
end
|
|
|
|
|
|
|
|
# El directorio de los sitios de una usuaria
|
|
|
|
#
|
|
|
|
# Los sitios se organizan por usuaria, entonces los sitios que
|
|
|
|
# administra pueden encontrarse directamente en su directorio.
|
|
|
|
#
|
|
|
|
# Si comparten gestión con otras usuarias, se hacen links simbólicos
|
|
|
|
# entre sí.
|
|
|
|
def self.site_path_for(usuaria)
|
|
|
|
File.join(Site.site_path, usuaria.username)
|
|
|
|
end
|
|
|
|
|
|
|
|
# Comprueba que el directorio parezca ser de jekyll
|
|
|
|
def self.jekyll?(dir)
|
|
|
|
File.directory?(dir) && File.exist?(File.join(dir, '_config.yml'))
|
|
|
|
end
|
|
|
|
|
|
|
|
# Obtener todos los directorios de sitios asociados a esta usuaria
|
|
|
|
def self.all_for(usuaria)
|
|
|
|
@sites ||= Pathname.new(Site.site_path_for(usuaria))
|
|
|
|
.children.map(&:expand_path).map(&:to_s).map do |j|
|
|
|
|
|
|
|
|
next unless Site.jekyll? j
|
|
|
|
|
|
|
|
Dir.chdir(j) do
|
|
|
|
config = ::Jekyll.configuration('source' => Dir.pwd)
|
|
|
|
|
|
|
|
# No necesitamos cargar plugins en este momento
|
|
|
|
%w[plugins gems].each do |unneeded|
|
|
|
|
config[unneeded] = [] if config.key? unneeded
|
|
|
|
end
|
|
|
|
|
2018-02-02 22:20:31 +00:00
|
|
|
Site.new(jekyll: ::Jekyll::Site.new(config), path: j)
|
2018-01-29 22:19:10 +00:00
|
|
|
end
|
|
|
|
end.compact
|
|
|
|
end
|
|
|
|
end
|