-
Notifications
You must be signed in to change notification settings - Fork 1.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[API] Commenting through a token #1513
Changes from 7 commits
7579f8d
829fae9
a095e8d
0ff8697
195bc07
787134c
a5834f1
d2846ac
917c90e
48ecaae
f80878b
61bca00
e513cdd
1a9c61e
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,16 @@ | ||
class CommentError < ArgumentError | ||
end | ||
|
||
def create_comment(node, user, body) | ||
@comment = node.add_comment(uid: user.uid, body: body) | ||
if user && @comment.save | ||
@comment.notify user | ||
return @comment | ||
else | ||
raise CommentError.new() | ||
end | ||
end | ||
|
||
class CommentController < ApplicationController | ||
respond_to :html, :xml, :json | ||
before_filter :require_user, only: %i[create update delete] | ||
|
@@ -12,9 +25,11 @@ def index | |
# create node comments | ||
def create | ||
@node = Node.find params[:id] | ||
@comment = @node.add_comment(uid: current_user.uid, body: params[:body]) | ||
if current_user && @comment.save | ||
@comment.notify(current_user) | ||
@body = params[:body] | ||
@user = current_user | ||
|
||
begin | ||
@comment = create_comment(@node, @user, @body) | ||
respond_with do |format| | ||
if params[:type] && params[:type] == 'question' | ||
@answer_id = 0 | ||
|
@@ -30,12 +45,51 @@ def create | |
end | ||
end | ||
end | ||
else | ||
rescue CommentError | ||
flash[:error] = 'The comment could not be saved.' | ||
render text: 'failure' | ||
end | ||
end | ||
|
||
def create_by_token | ||
@node = Node.find params[:id] | ||
@user = Users.find_by_username params[:username] | ||
@body = pararms[:body] | ||
@token = request.headers["token"] | ||
|
||
if @user && @user.token == @token | ||
begin | ||
@comment = create_comment(@node, @user, @body) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Maybe add a comment here telling where to find this method? I think for newcomers the Rails organization can be a bit arcane and although it adds a line, this could be really helpful for some. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Sure, will do. |
||
msg = { | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I guess this just has a /lot/ of repeated code here -- the only unique line in 52-59 vs 61-68 vs 71-78 is I'm trying to find a guide to best-practices in Rails controller error handling, to help DRY out this code. But I'm not finding much that's not based on model validation error handling... There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I get your point. I used the |
||
status: :created, | ||
message: "Created" | ||
} | ||
respond_to do |format| | ||
format.xml { render xml: msg.to_xml } | ||
format.json { render json: msg.to_json } | ||
end | ||
rescue CommentError | ||
msg = { | ||
status: :bad_request, | ||
message: "Bad Request" | ||
} | ||
respond_to do |format| | ||
format.xml { render xml: msg.to_xml } | ||
format.json { render json: msg.to_json } | ||
end | ||
end | ||
else | ||
msg = { | ||
status: :unauthorized, | ||
message: "Unauthorized" | ||
} | ||
respond_to do |format| | ||
format.xml { render xml: msg.to_xml } | ||
format.json { render json: msg.to_json } | ||
end | ||
end | ||
end | ||
|
||
# create answer comments | ||
def answer_create | ||
@answer_id = params[:aid] | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This type of logic should go in helpers. Keep the controller code as thin as possible. Only keep action related methods
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Okay, If @jywarren approves the function, I would move it to the corresponding helper class.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Maybe look at how we've done error responses in other parts of the code, and compare also with best practices from modern Rails guides?