41 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Ruby
		
	
	
	
		
		
			
		
	
	
			41 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Ruby
		
	
	
	
|  | namespace :uploader do | ||
|  | 	task :recreate => :environment do | ||
|  | 		mongoid_collections = Mongoid.database.collections.reject{|c| c.name.include?('.')} | ||
|  | 		ARGV.shift | ||
|  | 		if ARGV.present? | ||
|  | 			uploaders = [] | ||
|  | 			ARGV.each{ |arg| | ||
|  | 				task arg.to_sym do ; end | ||
|  | 				uploaders << arg | ||
|  | 			} | ||
|  | 		else | ||
|  | 			uploaders = %w(AvatarUploader ImageUploader) | ||
|  | 		end | ||
|  | 		klasses = mongoid_collections.inject([]) { |klasses, coll| | ||
|  | 			if klasses.blank? | ||
|  | 				klasses = coll.find().map{|c| c['_type']}.uniq.compact | ||
|  | 			else | ||
|  | 				klasses += coll.find().map{|c| c['_type']}.uniq.compact | ||
|  | 			end | ||
|  | 			klasses | ||
|  | 		} | ||
|  | 		to_recreate = klasses.inject([]) { |names, name| | ||
|  | 			klass = name.constantize rescue nil | ||
|  | 			klass.uploaders.each_value{ |value| | ||
|  | 				if uploaders.include?(value.to_s) && !names.include?(name) | ||
|  | 					names << name | ||
|  | 				end | ||
|  | 			} unless klass.nil? | ||
|  | 			names | ||
|  | 		} | ||
|  | 		to_recreate.each { |name| | ||
|  | 			klass = name.constantize | ||
|  | 			klass.all.each{ |object| | ||
|  | 				klass.uploaders.each_key{ |key| | ||
|  | 					object.send(key).recreate_versions! if object[key] rescue nil | ||
|  | 				} | ||
|  | 			} | ||
|  | 		} | ||
|  | 	end | ||
|  | end |