sutty/app/models/site/writer.rb

48 lines
1.1 KiB
Ruby
Raw Normal View History

2019-07-30 21:07:08 +00:00
# frozen_string_literal: true
# Se encarga de guardar los cambios en los archivos y mantenerlos
# actualizados en git
Site::Writer = Struct.new(:site, :file, :content, keyword_init: true) do
2020-06-16 22:21:38 +00:00
# Realiza la escritura del archivo.
#
# **IMPORTANTE:** Usar rutas absolutas siempre y nunca confiar en una
# ruta que venga de la Internet.
#
# TODO: Usar rutas relativas al sitio y sanitizar.
#
# TODO: si el archivo está bloqueado, esperar al desbloqueo. Realizar
# asincrónicamente?
def save
2019-08-13 23:33:57 +00:00
mkdir_p
File.open(file, File::RDWR | File::CREAT, 0o640) do |f|
# Bloquear el archivo para que no sea accedido por otro
# proceso u otre editore
f.flock(File::LOCK_EX)
# Empezar por el principio
f.rewind
# Escribir el contenido
f.write(content)
# Eliminar el resto
f.flush
f.truncate(f.pos)
end.zero?
end
2019-07-30 21:07:08 +00:00
# Devuelve la ruta relativa a la raíz del sitio
def relative_file
Pathname.new(file).relative_path_from(Pathname.new(site.path)).to_s
2019-07-30 21:07:08 +00:00
end
2019-08-13 23:33:57 +00:00
def dirname
File.dirname file
end
def mkdir_p
FileUtils.mkdir_p dirname
end
2019-07-30 21:07:08 +00:00
end