# lib/carrierwave/preload_adapter.rb module Carrierwave module PreloadAdapter def mount_preload_uploader(attribute, uploader_class, **options) mount_uploader attribute, uploader_class, options define_method "#{attribute}=" do |data| uploader = PreloadUploader.build_preloaded(data) return super(data) if uploader.blank? @preload_uploaders ||= [] @preload_uploaders << uploader super(uploader.file) end after_save { [*@preload_uploaders].compact.each(&:remove!) } end def mount_preload_uploaders(attribute, uploader_class, **options) mount_uploaders attribute, uploader_class, options define_method "#{attribute}=" do |data| uploaders = data.map { |el| PreloadUploader.build_preloaded(el) }.compact return super(data) if uploaders.blank? @preload_uploaders ||= [] @preload_uploaders += uploaders super(uploaders.map(&:file)) end after_save { [*@preload_uploaders].compact.each(&:remove!) } end end end