# frozen_string_literal: true module Admin class NgRulesController < BaseController before_action :set_ng_rule, only: [:edit, :update, :destroy, :duplicate] def index authorize :ng_words, :show? @ng_rules = ::NgRule.order(id: :asc) end def new authorize :ng_words, :show? @ng_rule = ::NgRule.build end def edit authorize :ng_words, :show? end def create authorize :ng_words, :create? begin test_words! rescue flash[:alert] = I18n.t('admin.ng_rules.test_error') redirect_to new_admin_ng_rule_path return end @ng_rule = ::NgRule.build(resource_params) if @ng_rule.save redirect_to admin_ng_rules_path else render :new end end def update authorize :ng_words, :create? begin test_words! rescue flash[:alert] = I18n.t('admin.ng_rules.test_error') redirect_to edit_admin_ng_rule_path(id: @ng_rule.id) return end if @ng_rule.update(resource_params) redirect_to admin_ng_rules_path else render :edit end end def duplicate authorize :ng_words, :create? @ng_rule = @ng_rule.copy! flash[:alert] = I18n.t('admin.ng_rules.copy_error') unless @ng_rule.save redirect_to admin_ng_rules_path end def destroy authorize :ng_words, :create? @ng_rule.destroy redirect_to admin_ng_rules_path end private def set_ng_rule @ng_rule = ::NgRule.find(params[:id]) end def resource_params params.require(:ng_rule).permit(:title, :expires_in, :available, :account_domain, :account_username, :account_display_name, :account_note, :account_field_name, :account_field_value, :account_avatar_state, :account_header_state, :account_include_local, :status_spoiler_text, :status_text, :status_tag, :status_sensitive_state, :status_cw_state, :status_media_state, :status_poll_state, :status_mention_state, :status_reference_state, :status_quote_state, :status_reply_state, :status_media_threshold, :status_poll_threshold, :status_mention_threshold, :status_allow_follower_mention, :reaction_allow_follower, :emoji_reaction_name, :emoji_reaction_origin_domain, :status_reference_threshold, :account_allow_followed_by_local, :record_history_also_local, status_visibility: [], status_searchability: [], reaction_type: []) end def test_words! arr = [ resource_params[:account_domain], resource_params[:account_username], resource_params[:account_display_name], resource_params[:account_note], resource_params[:account_field_name], resource_params[:account_field_value], resource_params[:status_spoiler_text], resource_params[:status_text], resource_params[:status_tag], resource_params[:emoji_reaction_name], resource_params[:emoji_reaction_origin_domain], ].compact_blank.join("\n") Admin::NgRule.extract_test!(arr) if arr.present? end end end