Commit 05dd5e75

mo khan <mo@mokhan.ca>
2014-09-20 03:04:12
create command to upload an avatar.
1 parent 3582918
Changed files (2)
app
controllers
services
application
app/controllers/my/avatars_controller.rb
@@ -6,7 +6,7 @@ module My
     end
 
     def update
-      @avatar.attach(params[:avatar][:avatar])
+      UploadAvatar.new.run(@avatar, params)
       redirect_to edit_my_avatar_path(current_user), :notice => t(:avatar_uploaded)
     end
 
app/services/application/upload_avatar.rb
@@ -0,0 +1,33 @@
+class UploadAvatar
+  def initialize(message_bus = Spank::IOC.resolve(:message_bus))
+    @message_bus = message_bus
+  end
+
+  def run(avatar, params)
+    @message_bus.publish(:upload_avatar, create_message_from(avatar, params))
+  end
+
+  private
+
+  def create_message_from(avatar, payload)
+    image = payload[:avatar][:avatar]
+    {
+      cake_id: avatar.id,
+      file_path: move_to_temporary_storage(image),
+      original_filename: image.original_filename,
+      content_type: image.content_type,
+    }
+  end
+
+  def move_to_temporary_storage(image)
+    "#{create_tmp_dir}/#{image.original_filename}".tap do |new_path|
+      FileUtils.mv(image.path, new_path)
+    end
+  end
+
+  def create_tmp_dir
+    Rails.root.join("tmp/uploads/#{SecureRandom.uuid}").tap do |directory|
+      system "mkdir -p #{directory}"
+    end
+  end
+end