Addded Diaspora::Likeable module. Corrected the unique index for likes to include author_id; extracted before_save callback needed for tags into Diaspora::Taggable.

This commit is contained in:
danielgrippi 2011-07-09 16:19:34 -07:00 committed by Raphael Sofaer
parent d364f158b8
commit 67882c775e
8 changed files with 27 additions and 19 deletions

View file

@ -14,6 +14,7 @@ class Comment < ActiveRecord::Base
include Diaspora::Socketable
include Diaspora::Taggable
include Diaspora::Likeable
acts_as_taggable_on :tags
extract_tags_from :text
@ -25,8 +26,6 @@ class Comment < ActiveRecord::Base
belongs_to :post, :touch => true
belongs_to :author, :class_name => 'Person'
has_many :likes, :conditions => {:positive => true}, :dependent => :delete_all, :as => :target
validates_presence_of :text, :post
validates_length_of :text, :maximum => 2500
@ -62,10 +61,4 @@ class Comment < ActiveRecord::Base
def parent= parent
self.post = parent
end
# @return [Integer]
def update_likes_counter
self.likes_count = self.likes.count
self.save
end
end

View file

@ -11,7 +11,6 @@ class Like < ActiveRecord::Base
xml_attr :target_type
include Diaspora::Relayable
include Diaspora::Socketable
xml_attr :positive

View file

@ -9,13 +9,13 @@ class Post < ActiveRecord::Base
include Diaspora::Webhooks
include Diaspora::Guid
include Diaspora::Likeable
xml_attr :diaspora_handle
xml_attr :public
xml_attr :created_at
has_many :comments, :dependent => :destroy
has_many :likes, :conditions => {:positive => true}, :dependent => :delete_all, :as => :target
has_many :dislikes, :conditions => {:positive => false}, :class_name => 'Like', :dependent => :delete_all, :as => :target
has_many :aspect_visibilities
has_many :aspects, :through => :aspect_visibilities
@ -52,12 +52,6 @@ class Post < ActiveRecord::Base
new_post
end
# @return [Integer]
def update_likes_counter
self.likes_count = self.likes.count
self.save
end
# @return Returns true if this Post will accept updates (i.e. updates to the caption of a photo).
def mutable?
false

View file

@ -24,7 +24,6 @@ class StatusMessage < Post
serialize :youtube_titles, Hash
before_create :build_tags
after_create :create_mentions
def text(opts = {})

View file

@ -12,7 +12,7 @@ class LikesOnComments < ActiveRecord::Migration
SET target_type = 'Post'
SQL
add_index :likes, [:target_id, :target_type], :unique => true
add_index :likes, [:target_id, :author_id, :target_type], :unique => true
end
def self.down

View file

@ -123,6 +123,7 @@ ActiveRecord::Schema.define(:version => 20110707234802) do
add_index "likes", ["author_id"], :name => "likes_author_id_fk"
add_index "likes", ["guid"], :name => "index_likes_on_guid", :unique => true
add_index "likes", ["target_id", "author_id", "target_type"], :name => "index_likes_on_target_id_and_author_id_and_target_type", :unique => true
add_index "likes", ["target_id"], :name => "index_likes_on_post_id"
create_table "mentions", :force => true do |t|

20
lib/diaspora/likeable.rb Normal file
View file

@ -0,0 +1,20 @@
# Copyright (c) 2010, Diaspora Inc. This file is
# licensed under the Affero General Public License version 3 or later. See
# the COPYRIGHT file.
module Diaspora
module Likeable
def self.included(model)
model.instance_eval do
has_many :likes, :conditions => {:positive => true}, :dependent => :delete_all, :as => :target
has_many :dislikes, :conditions => {:positive => false}, :class_name => 'Like', :dependent => :delete_all, :as => :target
end
end
# @return [Integer]
def update_likes_counter
self.likes_count = self.likes.count
self.save
end
end
end

View file

@ -11,6 +11,8 @@ module Diaspora
cattr_accessor :field_with_tags
end
model.instance_eval do
before_create :build_tags
def extract_tags_from sym
self.field_with_tags = sym
end