# frozen_string_literal: true class Site # Se encarga de guardar los cambios en los archivos y mantenerlos # actualizados en git class Writer attr_reader :site, :file, :content, :usuarie, :message def initialize(site:, file:, content:, usuarie:, message:) @site = site @content = content @file = file @usuarie = usuarie @message = message end # rubocop:disable Metrics/AbcSize def save r = File.open(file, File::RDWR | File::CREAT, 0o640) do |f| # Bloquear el archivo para que no sea accedido por otro # proceso u otra editora 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 r.zero? && site.repository.commit(file: relative_file, usuarie: usuarie, message: message) end # rubocop:enable Metrics/AbcSize # 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 end end end