ported likes logic for the stream over from old branch
This commit is contained in:
parent
bc1ffd317e
commit
cec2d27204
4 changed files with 61 additions and 4 deletions
|
|
@ -9,6 +9,8 @@ class Post < ActiveRecord::Base
|
|||
include Diaspora::Commentable
|
||||
include Diaspora::Shareable
|
||||
|
||||
attr_accessor :user_like
|
||||
|
||||
# NOTE API V1 to be extracted
|
||||
acts_as_api
|
||||
api_accessible :backbone do |t|
|
||||
|
|
@ -27,6 +29,7 @@ class Post < ActiveRecord::Base
|
|||
t.add :object_url
|
||||
t.add :root
|
||||
t.add :o_embed_cache
|
||||
t.add :user_like
|
||||
end
|
||||
|
||||
xml_attr :provider_display_name
|
||||
|
|
|
|||
|
|
@ -49,6 +49,20 @@
|
|||
<%= public === true ? "Public" : "Limited" %>
|
||||
-
|
||||
</span>
|
||||
|
||||
<span class="like_action">
|
||||
<% if(user_like !== null) { %>
|
||||
<a href="/posts/<%= id %>/likes/<%= user_like.id %>" class="unlike" data-method='delete' data-remote='true' rel='nofollow'>
|
||||
Unlike
|
||||
</a>
|
||||
<% } else { %>
|
||||
<a href="/posts/<%= id %>/likes?positive=true" class="like" data-method='post' data-remote='true' rel='nofollow'>
|
||||
Like
|
||||
</a>
|
||||
<% } %>
|
||||
</span>
|
||||
·
|
||||
|
||||
<a href="#" class="focus_comment_textarea">
|
||||
Comment
|
||||
</a>
|
||||
|
|
|
|||
|
|
@ -46,9 +46,11 @@ class Stream::Base
|
|||
Post.scoped
|
||||
end
|
||||
|
||||
# @return [ActiveRecord::Relation<Post>]
|
||||
# @return [Array<Post>]
|
||||
def stream_posts
|
||||
self.posts.for_a_stream(max_time, order, self.user)
|
||||
self.posts.for_a_stream(max_time, order, self.user).tap do |posts|
|
||||
like_posts_for_stream!(posts) #some sql person could probably do this with joins.
|
||||
end
|
||||
end
|
||||
|
||||
# @return [ActiveRecord::Association<Person>] AR association of people within stream's given aspects
|
||||
|
|
@ -63,7 +65,7 @@ class Stream::Base
|
|||
I18n.translate('aspects.selected_contacts.view_all_contacts')
|
||||
end
|
||||
|
||||
# @return [String]
|
||||
# @return [String] def contacts_title 'change me in lib/base_stream.rb!'
|
||||
def contacts_title
|
||||
'change me in lib/base_stream.rb!'
|
||||
end
|
||||
|
|
@ -109,7 +111,21 @@ class Stream::Base
|
|||
@order ||= 'created_at'
|
||||
end
|
||||
|
||||
private
|
||||
protected
|
||||
# @return [void]
|
||||
def like_posts_for_stream!(posts)
|
||||
likes = Like.where(:target_id => posts.map(&:id), :target_type => "Post")
|
||||
|
||||
like_hash = likes.inject({}) do |hash, like|
|
||||
hash[like.target_id] = like
|
||||
hash
|
||||
end
|
||||
|
||||
posts.each do |post|
|
||||
post.user_like = like_hash[post.id]
|
||||
end
|
||||
end
|
||||
|
||||
# @return [Hash]
|
||||
def publisher_opts
|
||||
{}
|
||||
|
|
|
|||
|
|
@ -4,12 +4,36 @@ describe Stream::Base do
|
|||
before do
|
||||
@stream = Stream::Base.new(alice)
|
||||
end
|
||||
|
||||
describe '#contacts_link' do
|
||||
it 'should default to your contacts page' do
|
||||
@stream.contacts_link.should =~ /contacts/
|
||||
end
|
||||
end
|
||||
|
||||
describe '#stream_posts' do
|
||||
it "should returns the posts.for_a_stream" do
|
||||
posts = mock
|
||||
@stream.stub(:posts).and_return(posts)
|
||||
@stream.stub(:like_posts_for_stream!)
|
||||
|
||||
posts.should_receive(:for_a_stream).with(anything, anything, alice).and_return(posts)
|
||||
@stream.stream_posts
|
||||
end
|
||||
|
||||
context "when alice has liked some posts" do
|
||||
before do
|
||||
bob.post(:status_message, :text => "sup", :to => bob.aspects.first.id)
|
||||
@liked_status = bob.posts.last
|
||||
@like = Factory(:like, :target => @liked_status, :author => alice.person)
|
||||
end
|
||||
|
||||
it "marks the posts as liked" do
|
||||
@stream.stream_posts.first.user_like.id.should == @like.id
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe '.can_comment?' do
|
||||
before do
|
||||
@person = Factory(:person)
|
||||
|
|
|
|||
Loading…
Reference in a new issue