# frozen_string_literal: true # 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 %r{\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/.match?(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