# Una clase que permite adjuntar imágenes a artículos class Post::ImageUploader < CarrierWave::Uploader::Base attr_accessor :site # Necesitamos pasar el sitio para poder acceder a los archivos locales def initialize(site, wtf = nil) super @site = site end # Solo aceptamos imágenes def content_type_whitelist /\Aimage\// end # Devuelve la ubicación del directorio dentro de Jekyll, para eso, # tenemos que tener acceso al sitio que estamos editando def store_dir File.join site.path, 'public', 'images' end # Almacenar en el 'tmp' local def cache_dir File.join Rails.root, 'tmp', 'images' end # XXX los nombres de los archivos siempre son únicos, no chequeamos si # están repetidos. def filename @unique_filename ||= if /\A[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\..*\Z/ =~ file.try(:filename) file.try(:filename) else [SecureRandom.uuid, '.', file.extension].join end end # Obtener la URL dentro del proyecto de Jekyll def url CGI.unescape(super).remove site.path end end