Commit f8dd07ca
Changed files (8)
app
controllers
models
services
application
handlers
app/controllers/my/avatars_controller.rb
@@ -6,7 +6,7 @@ module My
end
def update
- UploadAvatar.new.run(@avatar, params)
+ UploadAvatar.new.run(current_user, params)
redirect_to edit_my_avatar_path(current_user), :notice => t(:avatar_uploaded)
end
app/models/creation.rb
@@ -3,7 +3,7 @@ class Creation < ActiveRecord::Base
validates :category_id, presence: true
belongs_to :user, :counter_cache => true
belongs_to :category
- has_many :photos, -> { order :created_at }, :dependent => :destroy
+ has_many :photos, -> { order :created_at }, dependent: :destroy, as: :imageable
has_many :favorites, :dependent => :destroy
has_many :comments, dependent: :destroy
acts_as_taggable
app/models/photo.rb
@@ -1,5 +1,5 @@
class Photo < ActiveRecord::Base
- belongs_to :creation, counter_cache: true, touch: true
+ belongs_to :imageable, polymorphic: true, counter_cache: true, touch: true
def url_for(version_key, asset_host = ENV['ASSET_HOST'])
versions.find { |version| version.for?(version_key) }.url_for(asset_host)
app/services/application/handlers/process_avatar.rb
@@ -0,0 +1,25 @@
+class ProcessAvatar
+ def initialize()
+ end
+
+ def handles?(event)
+ :upload_avatar == event
+ end
+
+ def handle(message)
+ user = User.find(message[:user_id])
+ #avatar = avatar_for(user)
+ end
+
+ private
+
+ def avatar_for(user)
+ if user.avatar.nil?
+ avatar = user.avatar = Avatar.new
+ user.save
+ return avatar
+ else
+ user.avatar
+ end
+ end
+end
app/services/application/upload_avatar.rb
@@ -3,16 +3,16 @@ class UploadAvatar
@message_bus = message_bus
end
- def run(avatar, params)
- @message_bus.publish(:upload_avatar, create_message_from(avatar, params))
+ def run(user, params)
+ @message_bus.publish(:upload_avatar, create_message_from(user, params))
end
private
- def create_message_from(avatar, payload)
+ def create_message_from(user, payload)
image = payload[:avatar][:avatar]
{
- cake_id: avatar.id,
+ user_id: user.id,
file_path: move_to_temporary_storage(image),
original_filename: image.original_filename,
content_type: image.content_type,
db/migrate/20140920032230_make_photos_polymorphic.rb
@@ -0,0 +1,6 @@
+class MakePhotosPolymorphic < ActiveRecord::Migration
+ def change
+ rename_column :photos, :creation_id, :imageable_id
+ add_column :photos, :imageable_type, :string
+ end
+end
db/migrate/20140920033516_migrate_old_photos.rb
@@ -0,0 +1,7 @@
+class MigrateOldPhotos < ActiveRecord::Migration
+ def change
+ Photo.find_each do |photo|
+ photo.update_attribute(:imageable_type, 'Creation')
+ end
+ end
+end
db/schema.rb
@@ -11,7 +11,7 @@
#
# It's strongly recommended that you check this file into your version control system.
-ActiveRecord::Schema.define(version: 20140909030826) do
+ActiveRecord::Schema.define(version: 20140920033516) do
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"
@@ -108,7 +108,7 @@ ActiveRecord::Schema.define(version: 20140909030826) do
end
create_table "photos", force: true do |t|
- t.integer "creation_id"
+ t.integer "imageable_id"
t.string "image"
t.datetime "created_at"
t.datetime "updated_at"
@@ -120,9 +120,10 @@ ActiveRecord::Schema.define(version: 20140909030826) do
t.float "longitude"
t.string "sha256"
t.string "watermark"
+ t.string "imageable_type"
end
- add_index "photos", ["creation_id"], name: "index_photos_on_creation_id", using: :btree
+ add_index "photos", ["imageable_id"], name: "index_photos_on_imageable_id", using: :btree
create_table "taggings", force: true do |t|
t.integer "tag_id"