diaspora/app/controllers/comments_controller.rb
2015-08-09 18:35:11 +02:00

73 lines
2 KiB
Ruby

# Copyright (c) 2010-2011, Diaspora Inc. This file is
# licensed under the Affero General Public License version 3 or later. See
# the COPYRIGHT file.
class CommentsController < ApplicationController
before_action :authenticate_user!, except: :index
respond_to :html, :mobile, :json
rescue_from ActiveRecord::RecordNotFound do
render nothing: true, status: 404
end
def create
@comment = CommentService.new(post_id: params[:post_id], text: params[:text], user: current_user).create_comment
if @comment
respond_create_success
else
render nothing: true, status: 404
end
end
def destroy
service = CommentService.new(comment_id: params[:id], user: current_user)
if service.destroy_comment
respond_destroy_success
else
respond_destroy_error
end
end
def new
respond_to do |format|
format.mobile { render layout: false }
end
end
def index
service = CommentService.new(post_id: params[:post_id], user: current_user)
@post = service.post
@comments = service.comments
respond_with do |format|
format.json { render json: CommentPresenter.as_collection(@comments), status: 200 }
format.mobile { render layout: false }
end
end
private
def respond_create_success
respond_to do |format|
format.json { render json: CommentPresenter.new(@comment), status: 201 }
format.html { render nothing: true, status: 201 }
format.mobile { render partial: "comment", locals: {post: @comment.post, comment: @comment} }
end
end
def respond_destroy_success
respond_to do |format|
format.mobile { redirect_to :back }
format.js { render nothing: true, status: 204 }
format.json { render nothing: true, status: 204 }
end
end
def respond_destroy_error
respond_to do |format|
format.mobile { redirect_to :back }
format.js { render nothing: true, status: 403 }
format.json { render nothing: true, status: 403 }
end
end
end