docbrown/app/controllers/response_templates_controller.rb
Michael Kohl b06e9901d5
Add ApplicationRecord#errors_as_sentence (#8265)
* Add ApplicationRecord#errors_as_sentence

* Refactor existing uses

* Use errors as sentence more consistently
2020-06-04 16:02:41 +02:00

96 lines
3.2 KiB
Ruby

class ResponseTemplatesController < ApplicationController
after_action :verify_authorized
before_action :authenticate_user!, :ensure_json_request, only: %i[index]
rescue_from ArgumentError, with: :error_unprocessable_entity
MOD_TYPES = %w[mod_comment tag_adjustment].freeze
ADMIN_TYPES = %w[email_reply abuse_report_email_reply].freeze
def index
raise ArgumentError, "Missing param type_of" if params[:type_of].blank?
user_id = params[:type_of] == "personal_comment" ? current_user.id : nil
@response_templates = ResponseTemplate.where(type_of: params[:type_of], user_id: user_id)
if MOD_TYPES.include?(params[:type_of])
authorize @response_templates, :moderator_index?
elsif ADMIN_TYPES.include?(params[:type_of])
authorize @response_templates, :admin_index?
else
authorize @response_templates, :index?
end
respond_to do |format|
format.json { render :index }
end
end
def create
authorize ResponseTemplate
response_template.user_id = current_user.id
response_template.content_type = "body_markdown"
response_template.type_of = "personal_comment"
if response_template.save
flash[:settings_notice] = "Your response template \"#{response_template.title}\" was created."
redirect_to user_settings_path(tab: "response-templates", id: response_template.id)
else
flash[:error] = "Response template error: #{response_template.errors_as_sentence}"
attributes = permitted_attributes(ResponseTemplate)
redirect_to user_settings_path(
tab: "response-templates",
id: response_template.id,
previous_title: attributes[:title],
previous_content: attributes[:content],
)
end
end
def destroy
authorize response_template
if response_template.destroy
flash[:settings_notice] = "Your response template \"#{response_template.title}\" was deleted."
else
flash[:error] = response_template.errors_as_sentence # this will probably never fail
end
redirect_to user_settings_path(tab: "response-templates")
end
def update
authorize response_template
attributes = permitted_attributes(ResponseTemplate)
if response_template.update(attributes)
flash[:settings_notice] = "Your response template \"#{response_template.title}\" was updated."
redirect_to user_settings_path(tab: "response-templates", id: response_template.id)
else
flash[:error] = "Response template error: #{response_template.errors_as_sentence}"
redirect_to user_settings_path(
tab: "response-templates",
id: response_template.id,
previous_title: attributes[:title],
previous_content: attributes[:content],
)
end
end
private
def response_template
@response_template ||= if params[:id].present?
ResponseTemplate.find(params[:id])
else
ResponseTemplate.new(permitted_attributes(ResponseTemplate))
end
end
def ensure_json_request
routing_error unless request.format == :json
end
def error_unprocessable_entity(message)
render json: { error: message, status: 422 }, status: :unprocessable_entity
end
end