lib/tasks/paperclip.rake in paperclip-2.3.6 vs lib/tasks/paperclip.rake in paperclip-2.3.7

- old
+ new

@@ -1,9 +1,8 @@ def obtain_class class_name = ENV['CLASS'] || ENV['class'] raise "Must specify CLASS" unless class_name - @klass = Object.const_get(class_name) end def obtain_attachments name = ENV['ATTACHMENT'] || ENV['attachment'] raise "Class #{@klass.name} has no attachments specified" unless @klass.respond_to?(:attachment_definitions) @@ -12,68 +11,60 @@ else @klass.attachment_definitions.keys end end -def for_all_attachments - klass = obtain_class - names = obtain_attachments - ids = klass.connection.select_values(klass.send(:construct_finder_sql, :select => 'id')) - - ids.each do |id| - instance = klass.find(id) - names.each do |name| - result = if instance.send("#{ name }?") - yield(instance, name) - else - true - end - print result ? "." : "x"; $stdout.flush - end - end - puts " Done." -end - namespace :paperclip do desc "Refreshes both metadata and thumbnails." task :refresh => ["paperclip:refresh:metadata", "paperclip:refresh:thumbnails"] namespace :refresh do desc "Regenerates thumbnails for a given CLASS (and optional ATTACHMENT)." task :thumbnails => :environment do errors = [] - for_all_attachments do |instance, name| - result = instance.send(name).reprocess! - errors << [instance.id, instance.errors] unless instance.errors.blank? - result + names = obtain_attachments + klass = obtain_class + names.each do |name| + Paperclip.each_instance_with_attachment(klass, name) do |instance| + result = instance.send(name).reprocess! + errors << [instance.id, instance.errors] unless instance.errors.blank? + end end errors.each{|e| puts "#{e.first}: #{e.last.full_messages.inspect}" } end desc "Regenerates content_type/size metadata for a given CLASS (and optional ATTACHMENT)." task :metadata => :environment do - for_all_attachments do |instance, name| - if file = instance.send(name).to_file - instance.send("#{name}_file_name=", instance.send("#{name}_file_name").strip) - instance.send("#{name}_content_type=", file.content_type.strip) - instance.send("#{name}_file_size=", file.size) if instance.respond_to?("#{name}_file_size") - instance.save(false) - else - true + names = obtain_attachments + klass = obtain_class + names.each do |name| + Paperclip.each_instance_with_attachment(klass, name) do |instance| + if file = instance.send(name).to_file + instance.send("#{name}_file_name=", instance.send("#{name}_file_name").strip) + instance.send("#{name}_content_type=", file.content_type.strip) + instance.send("#{name}_file_size=", file.size) if instance.respond_to?("#{name}_file_size") + instance.save(false) + else + true + end end end end end desc "Cleans out invalid attachments. Useful after you've added new validations." task :clean => :environment do - for_all_attachments do |instance, name| - instance.send(name).send(:validate) - if instance.send(name).valid? - true - else - instance.send("#{name}=", nil) - instance.save + names = obtain_attachments + klass = obtain_class + names.each do |name| + Paperclip.each_instance_with_attachment(klass, name) do |instance| + instance.send(name).send(:validate) + if instance.send(name).valid? + true + else + instance.send("#{name}=", nil) + instance.save + end end end end end