Nest likes and comments routes in the post route

This commit is contained in:
Raphael Sofaer 2011-07-10 21:39:38 -07:00
parent 875eaffd42
commit 2fb0fce1a8
9 changed files with 25 additions and 25 deletions

View file

@ -9,7 +9,7 @@ class LikesController < ApplicationController
respond_to :html, :mobile, :json respond_to :html, :mobile, :json
def create def create
target = current_user.find_visible_post_by_id params[:status_message_id] target = current_user.find_visible_post_by_id params[:post_id]
positive = (params[:positive] == 'true') ? true : false positive = (params[:positive] == 'true') ? true : false
if target if target
@like = current_user.build_like(:positive => positive, :post => target) @like = current_user.build_like(:positive => positive, :post => target)
@ -32,7 +32,7 @@ class LikesController < ApplicationController
end end
def destroy def destroy
if @like = Like.where(:id => params[:id], :author_id => current_user.person.id, :post_id => params[:status_message_id]).first if @like = Like.where(:id => params[:id], :author_id => current_user.person.id, :post_id => params[:post_id]).first
current_user.retract(@like) current_user.retract(@like)
else else
respond_to do |format| respond_to do |format|
@ -43,7 +43,7 @@ class LikesController < ApplicationController
end end
def index def index
if target = current_user.find_visible_post_by_id(params[:status_message_id]) if target = current_user.find_visible_post_by_id(params[:post_id])
@likes = target.likes.includes(:author => :profile) @likes = target.likes.includes(:author => :profile)
render :layout => false render :layout => false
else else

View file

@ -10,9 +10,9 @@ module LikesHelper
def like_action(post, current_user=current_user) def like_action(post, current_user=current_user)
if current_user.liked?(post) if current_user.liked?(post)
link_to t('shared.stream_element.unlike'), status_message_like_path(post, current_user.like_for(post)), :method => :delete, :class => 'unlike', :remote => true link_to t('shared.stream_element.unlike'), post_like_path(post, current_user.like_for(post)), :method => :delete, :class => 'unlike', :remote => true
else else
link_to t('shared.stream_element.like'), status_message_likes_path(post, :positive => 'true'), :method => :post, :class => 'like', :remote => true link_to t('shared.stream_element.like'), post_likes_path(post, :positive => 'true'), :method => :post, :class => 'like', :remote => true
end end
end end
end end

View file

@ -5,7 +5,7 @@
%li.comment.posted{:data=>{:guid => comment.id}, :class => ("hidden" if(defined? hidden))} %li.comment.posted{:data=>{:guid => comment.id}, :class => ("hidden" if(defined? hidden))}
- if current_user && (current_user.owns?(comment) || current_user.owns?(post)) - if current_user && (current_user.owns?(comment) || current_user.owns?(post))
.right.controls .right.controls
= link_to image_tag('deletelabel.png'), comment_path(comment), :confirm => t('are_you_sure'), :method => :delete, :remote => true, :class => "delete comment_delete", :title => t('delete') = link_to image_tag('deletelabel.png'), post_comment_path(comment.post_id, comment), :confirm => t('are_you_sure'), :method => :delete, :remote => true, :class => "delete comment_delete", :title => t('delete')
= person_image_link(comment.author) = person_image_link(comment.author)
.content .content
%span.from %span.from

View file

@ -2,12 +2,11 @@
-# licensed under the Affero General Public License version 3 or later. See -# licensed under the Affero General Public License version 3 or later. See
-# the COPYRIGHT file. -# the COPYRIGHT file.
= form_tag( comments_path, :id => "new_comment_on_#{post_id}", :class => 'new_comment', :remote => true) do = form_tag( post_comments_path(post_id), :id => "new_comment_on_#{post_id}", :class => 'new_comment', :remote => true) do
= person_image_tag(current_user) = person_image_tag(current_user)
%p %p
= label_tag "comment_text_on_#{post_id}", t('.comment') = label_tag "comment_text_on_#{post_id}", t('.comment')
= text_area_tag :text, nil, :rows => 2, :class => "comment_box",:id => "comment_text_on_#{post_id}" = text_area_tag :text, nil, :rows => 2, :class => "comment_box",:id => "comment_text_on_#{post_id}"
= hidden_field_tag :post_id, post_id, :id => "post_id_on_#{post_id}"
.submit_button .submit_button
= submit_tag t('.comment'), :id => "comment_submit_#{post_id}", :class => "comment_submit button creation", :disable_with => t('.commenting') = submit_tag t('.comment'), :id => "comment_submit_#{post_id}", :class => "comment_submit button creation", :disable_with => t('.commenting')

View file

@ -2,7 +2,7 @@
-# licensed under the Affero General Public License version 3 or later. See -# licensed under the Affero General Public License version 3 or later. See
-# the COPYRIGHT file. -# the COPYRIGHT file.
= form_tag( comments_path, :id => "new_comment_on_#{post_id}", :class => 'new_comment') do = form_tag( post_comments_path(post_id), :id => "new_comment_on_#{post_id}", :class => 'new_comment') do
= hidden_field_tag :post_id, post_id, :id => "post_id_on_#{post_id}" = hidden_field_tag :post_id, post_id, :id => "post_id_on_#{post_id}"
= text_area_tag :text, nil, :rows => 2, :class => "comment_box",:id => "comment_text_on_#{post_id}" = text_area_tag :text, nil, :rows => 2, :class => "comment_box",:id => "comment_text_on_#{post_id}"

View file

@ -6,7 +6,7 @@
.likes_container .likes_container
.likes .likes
= image_tag('icons/heart.svg') = image_tag('icons/heart.svg')
= link_to t('likes.likes.people_like_this', :count => likes_count), status_message_likes_path(post_id), :class => "expand_likes" = link_to t('likes.likes.people_like_this', :count => likes_count), post_likes_path(post_id), :class => "expand_likes"
%span.hidden.likes_list %span.hidden.likes_list
/= render 'likes/likes', :likes => likes /= render 'likes/likes', :likes => likes

View file

@ -12,11 +12,12 @@ Diaspora::Application.routes.draw do
end end
resources :status_messages, :only => [:new, :create] do resources :status_messages, :only => [:new, :create] do
resources :likes, :only => [:create, :destroy, :index]
end end
resources :comments, :only => [:create, :destroy] resources :posts, :only => [:show, :destroy] do
resources :posts, :only => [:show, :destroy] resources :likes, :only => [:create, :destroy, :index]
resources :comments, :only => [:create, :destroy]
end
get 'bookmarklet' => 'status_messages#bookmarklet' get 'bookmarklet' => 'status_messages#bookmarklet'
get 'p/:id' => 'publics#post', :as => 'public_post' get 'p/:id' => 'publics#post', :as => 'public_post'

View file

@ -80,13 +80,13 @@ describe CommentsController do
it 'lets the user delete his comment' do it 'lets the user delete his comment' do
alice.should_receive(:retract).with(@comment) alice.should_receive(:retract).with(@comment)
delete :destroy, :format => "js", :id => @comment.id delete :destroy, :format => "js", :post_id => 1, :id => @comment.id
response.status.should == 204 response.status.should == 204
end end
it "lets the user destroy other people's comments" do it "lets the user destroy other people's comments" do
alice.should_receive(:retract).with(@comment2) alice.should_receive(:retract).with(@comment2)
delete :destroy, :format => "js", :id => @comment2.id delete :destroy, :format => "js", :post_id => 1, :id => @comment2.id
response.status.should == 204 response.status.should == 204
end end
end end
@ -101,18 +101,18 @@ describe CommentsController do
it 'let the user delete his comment' do it 'let the user delete his comment' do
alice.should_receive(:retract).with(@comment) alice.should_receive(:retract).with(@comment)
delete :destroy, :format => "js", :id => @comment.id delete :destroy, :format => "js", :post_id => 1, :id => @comment.id
response.status.should == 204 response.status.should == 204
end end
it 'does not let the user destroy comments he does not own' do it 'does not let the user destroy comments he does not own' do
alice.should_not_receive(:retract).with(@comment2) alice.should_not_receive(:retract).with(@comment2)
delete :destroy, :format => "js", :id => @comment3.id delete :destroy, :format => "js", :post_id => 1, :id => @comment3.id
response.status.should == 403 response.status.should == 403
end end
end end
it 'renders nothing and 404 on a nonexistent comment' do it 'renders nothing and 404 on a nonexistent comment' do
delete :destroy, :id => 343415 delete :destroy, :post_id => 1, :id => 343415
response.status.should == 404 response.status.should == 404
response.body.strip.should be_empty response.body.strip.should be_empty
end end

View file

@ -18,11 +18,11 @@ describe LikesController do
describe '#create' do describe '#create' do
let(:like_hash) { let(:like_hash) {
{:positive => 1, {:positive => 1,
:status_message_id => "#{@post.id}"} :post_id => "#{@post.id}"}
} }
let(:dislike_hash) { let(:dislike_hash) {
{:positive => 0, {:positive => 0,
:status_message_id => "#{@post.id}"} :post_id => "#{@post.id}"}
} }
context "on my own post" do context "on my own post" do
@ -77,19 +77,19 @@ describe LikesController do
end end
it 'returns a 404 for a post not visible to the user' do it 'returns a 404 for a post not visible to the user' do
sign_in eve sign_in eve
get :index, :status_message_id => @message.id get :index, :post_id => @message.id
end end
it 'returns an array of likes for a post' do it 'returns an array of likes for a post' do
like = bob.build_like(:positive => true, :post => @message) like = bob.build_like(:positive => true, :post => @message)
like.save! like.save!
get :index, :status_message_id => @message.id get :index, :post_id => @message.id
assigns[:likes].map(&:id).should == @message.likes.map(&:id) assigns[:likes].map(&:id).should == @message.likes.map(&:id)
end end
it 'returns an empty array for a post with no likes' do it 'returns an empty array for a post with no likes' do
get :index, :status_message_id => @message.id get :index, :post_id => @message.id
assigns[:likes].should == [] assigns[:likes].should == []
end end
end end
@ -103,7 +103,7 @@ describe LikesController do
it 'lets a user destroy their like' do it 'lets a user destroy their like' do
expect { expect {
delete :destroy, :format => "js", :status_message_id => @like.post_id, :id => @like.id delete :destroy, :format => "js", :post_id => @like.post_id, :id => @like.id
}.should change(Like, :count).by(-1) }.should change(Like, :count).by(-1)
response.status.should == 200 response.status.should == 200
end end
@ -113,7 +113,7 @@ describe LikesController do
like2.save like2.save
expect { expect {
delete :destroy, :format => "js", :status_message_id => like2.post_id, :id => like2.id delete :destroy, :format => "js", :post_id => like2.post_id, :id => like2.id
}.should_not change(Like, :count) }.should_not change(Like, :count)
response.status.should == 403 response.status.should == 403