# Una clase que permite adjuntar imágenes a artículos class Post::ImageUploader < CarrierWave::Uploader::Base include CarrierWave::MiniMagick attr_accessor :site process :strip process resize_to_limit: [1280, 1280] version :thumb do process :strip process resize_to_fit: [200,200] end def strip manipulate! do |img| img.strip img end end # 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 current_filename = parent_version.try(:filename) || file.try(:filename) @unique_filename ||= if /\A(thumb_)?[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\..*\Z/ =~ current_filename current_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