# frozen_string_literal: true module ActiveStorage class Service # Sube los archivos a cada repositorio y los agrega al LFS de su # repositorio git. # # @todo: Implementar LFS. No nos gusta mucho la idea porque duplica # el espacio en disco, pero es la única forma que tenemos (hasta que # implementemos IPFS) para poder transferir los archivos junto con el # sitio. class JekyllService < Service::DiskService BLOB_NAME = 'blob' # Para poder guardar el archivo con el nombre original pero poder # recuperarlo durante el download, luego de subirlo le cambiamos el # nombre y creamos un link simbólico a un nombre conocido. def upload(key, io, checksum: nil, **options) super.tap do path = path_for(key) filename = options[:filename].to_s FileUtils.mv path, path.sub(/#{BLOB_NAME}\z/, filename) FileUtils.ln_s filename, path end end # Mantener retrocompatibilidad con cómo gestionamos los archivos # subidos hasta ahora. # # @param :key [String] # @return [String] def folder_for(key) key end # Crea una ruta para la llave con un nombre conocido. def path_for(key) File.join root, folder_for(key), BLOB_NAME end end end end