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
							 |