From 6e226f5a32d74d848da7c79041a197d259ddc2ac Mon Sep 17 00:00:00 2001
From: Matt Jankowski <matt@jankowski.online>
Date: Sun, 30 Apr 2023 00:46:39 -0400
Subject: [PATCH] Fix Rails/ActionOrder cop (#24692)

---
 .rubocop_todo.yml                             | 26 -------------------
 .../admin/announcements_controller.rb         |  8 +++---
 app/controllers/admin/roles_controller.rb     |  8 +++---
 app/controllers/admin/rules_controller.rb     |  8 +++---
 .../admin/warning_presets_controller.rb       |  8 +++---
 app/controllers/admin/webhooks_controller.rb  | 16 ++++++------
 .../api/v1/admin/domain_allows_controller.rb  | 20 +++++++-------
 .../api/v1/admin/domain_blocks_controller.rb  | 20 +++++++-------
 .../admin/email_domain_blocks_controller.rb   | 18 ++++++-------
 .../api/v1/admin/ip_blocks_controller.rb      | 14 +++++-----
 app/controllers/api/v1/filters_controller.rb  |  8 +++---
 app/controllers/api/v1/media_controller.rb    |  8 +++---
 .../api/v1/push/subscriptions_controller.rb   |  8 +++---
 .../api/v2/filters/keywords_controller.rb     |  8 +++---
 .../api/v2/filters/statuses_controller.rb     |  8 +++---
 app/controllers/api/v2/filters_controller.rb  |  8 +++---
 .../auth/registrations_controller.rb          |  8 +++---
 app/controllers/filters_controller.rb         |  4 +--
 .../settings/applications_controller.rb       |  4 +--
 .../webauthn_credentials_controller.rb        |  3 +--
 20 files changed, 93 insertions(+), 120 deletions(-)

diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml
index 172f44bad1..7a85031453 100644
--- a/.rubocop_todo.yml
+++ b/.rubocop_todo.yml
@@ -1148,32 +1148,6 @@ RSpec/VerifiedDoubles:
     - 'spec/workers/feed_insert_worker_spec.rb'
     - 'spec/workers/regeneration_worker_spec.rb'
 
-# This cop supports safe autocorrection (--autocorrect).
-# Configuration parameters: ExpectedOrder, Include.
-# ExpectedOrder: index, show, new, edit, create, update, destroy
-# Include: app/controllers/**/*.rb
-Rails/ActionOrder:
-  Exclude:
-    - 'app/controllers/admin/announcements_controller.rb'
-    - 'app/controllers/admin/roles_controller.rb'
-    - 'app/controllers/admin/rules_controller.rb'
-    - 'app/controllers/admin/warning_presets_controller.rb'
-    - 'app/controllers/admin/webhooks_controller.rb'
-    - 'app/controllers/api/v1/admin/domain_allows_controller.rb'
-    - 'app/controllers/api/v1/admin/domain_blocks_controller.rb'
-    - 'app/controllers/api/v1/admin/email_domain_blocks_controller.rb'
-    - 'app/controllers/api/v1/admin/ip_blocks_controller.rb'
-    - 'app/controllers/api/v1/filters_controller.rb'
-    - 'app/controllers/api/v1/media_controller.rb'
-    - 'app/controllers/api/v1/push/subscriptions_controller.rb'
-    - 'app/controllers/api/v2/filters/keywords_controller.rb'
-    - 'app/controllers/api/v2/filters/statuses_controller.rb'
-    - 'app/controllers/api/v2/filters_controller.rb'
-    - 'app/controllers/auth/registrations_controller.rb'
-    - 'app/controllers/filters_controller.rb'
-    - 'app/controllers/settings/applications_controller.rb'
-    - 'app/controllers/settings/two_factor_authentication/webauthn_credentials_controller.rb'
-
 # This cop supports safe autocorrection (--autocorrect).
 # Configuration parameters: Include.
 # Include: app/models/**/*.rb
diff --git a/app/controllers/admin/announcements_controller.rb b/app/controllers/admin/announcements_controller.rb
index 351b9a9910..8f9708183a 100644
--- a/app/controllers/admin/announcements_controller.rb
+++ b/app/controllers/admin/announcements_controller.rb
@@ -14,6 +14,10 @@ class Admin::AnnouncementsController < Admin::BaseController
     @announcement = Announcement.new
   end
 
+  def edit
+    authorize :announcement, :update?
+  end
+
   def create
     authorize :announcement, :create?
 
@@ -28,10 +32,6 @@ class Admin::AnnouncementsController < Admin::BaseController
     end
   end
 
-  def edit
-    authorize :announcement, :update?
-  end
-
   def update
     authorize :announcement, :update?
 
diff --git a/app/controllers/admin/roles_controller.rb b/app/controllers/admin/roles_controller.rb
index d76aa745bd..bcfc11159c 100644
--- a/app/controllers/admin/roles_controller.rb
+++ b/app/controllers/admin/roles_controller.rb
@@ -16,6 +16,10 @@ module Admin
       @role = UserRole.new
     end
 
+    def edit
+      authorize @role, :update?
+    end
+
     def create
       authorize :user_role, :create?
 
@@ -30,10 +34,6 @@ module Admin
       end
     end
 
-    def edit
-      authorize @role, :update?
-    end
-
     def update
       authorize @role, :update?
 
diff --git a/app/controllers/admin/rules_controller.rb b/app/controllers/admin/rules_controller.rb
index f3bed3ad8e..d31aec6ea8 100644
--- a/app/controllers/admin/rules_controller.rb
+++ b/app/controllers/admin/rules_controller.rb
@@ -11,6 +11,10 @@ module Admin
       @rule  = Rule.new
     end
 
+    def edit
+      authorize @rule, :update?
+    end
+
     def create
       authorize :rule, :create?
 
@@ -24,10 +28,6 @@ module Admin
       end
     end
 
-    def edit
-      authorize @rule, :update?
-    end
-
     def update
       authorize @rule, :update?
 
diff --git a/app/controllers/admin/warning_presets_controller.rb b/app/controllers/admin/warning_presets_controller.rb
index b376f8d9b1..efbf65b119 100644
--- a/app/controllers/admin/warning_presets_controller.rb
+++ b/app/controllers/admin/warning_presets_controller.rb
@@ -11,6 +11,10 @@ module Admin
       @warning_preset  = AccountWarningPreset.new
     end
 
+    def edit
+      authorize @warning_preset, :update?
+    end
+
     def create
       authorize :account_warning_preset, :create?
 
@@ -24,10 +28,6 @@ module Admin
       end
     end
 
-    def edit
-      authorize @warning_preset, :update?
-    end
-
     def update
       authorize @warning_preset, :update?
 
diff --git a/app/controllers/admin/webhooks_controller.rb b/app/controllers/admin/webhooks_controller.rb
index d6fb1a4eaf..1ed3fd18ab 100644
--- a/app/controllers/admin/webhooks_controller.rb
+++ b/app/controllers/admin/webhooks_controller.rb
@@ -10,12 +10,20 @@ module Admin
       @webhooks = Webhook.page(params[:page])
     end
 
+    def show
+      authorize @webhook, :show?
+    end
+
     def new
       authorize :webhook, :create?
 
       @webhook = Webhook.new
     end
 
+    def edit
+      authorize @webhook, :update?
+    end
+
     def create
       authorize :webhook, :create?
 
@@ -28,14 +36,6 @@ module Admin
       end
     end
 
-    def show
-      authorize @webhook, :show?
-    end
-
-    def edit
-      authorize @webhook, :update?
-    end
-
     def update
       authorize @webhook, :update?
 
diff --git a/app/controllers/api/v1/admin/domain_allows_controller.rb b/app/controllers/api/v1/admin/domain_allows_controller.rb
index 0658199f0f..61e1d481c7 100644
--- a/app/controllers/api/v1/admin/domain_allows_controller.rb
+++ b/app/controllers/api/v1/admin/domain_allows_controller.rb
@@ -16,6 +16,16 @@ class Api::V1::Admin::DomainAllowsController < Api::BaseController
 
   PAGINATION_PARAMS = %i(limit).freeze
 
+  def index
+    authorize :domain_allow, :index?
+    render json: @domain_allows, each_serializer: REST::Admin::DomainAllowSerializer
+  end
+
+  def show
+    authorize @domain_allow, :show?
+    render json: @domain_allow, serializer: REST::Admin::DomainAllowSerializer
+  end
+
   def create
     authorize :domain_allow, :create?
 
@@ -29,16 +39,6 @@ class Api::V1::Admin::DomainAllowsController < Api::BaseController
     render json: @domain_allow, serializer: REST::Admin::DomainAllowSerializer
   end
 
-  def index
-    authorize :domain_allow, :index?
-    render json: @domain_allows, each_serializer: REST::Admin::DomainAllowSerializer
-  end
-
-  def show
-    authorize @domain_allow, :show?
-    render json: @domain_allow, serializer: REST::Admin::DomainAllowSerializer
-  end
-
   def destroy
     authorize @domain_allow, :destroy?
     UnallowDomainService.new.call(@domain_allow)
diff --git a/app/controllers/api/v1/admin/domain_blocks_controller.rb b/app/controllers/api/v1/admin/domain_blocks_controller.rb
index 8b77e9717d..2538c7c7c2 100644
--- a/app/controllers/api/v1/admin/domain_blocks_controller.rb
+++ b/app/controllers/api/v1/admin/domain_blocks_controller.rb
@@ -16,6 +16,16 @@ class Api::V1::Admin::DomainBlocksController < Api::BaseController
 
   PAGINATION_PARAMS = %i(limit).freeze
 
+  def index
+    authorize :domain_block, :index?
+    render json: @domain_blocks, each_serializer: REST::Admin::DomainBlockSerializer
+  end
+
+  def show
+    authorize @domain_block, :show?
+    render json: @domain_block, serializer: REST::Admin::DomainBlockSerializer
+  end
+
   def create
     authorize :domain_block, :create?
 
@@ -28,16 +38,6 @@ class Api::V1::Admin::DomainBlocksController < Api::BaseController
     render json: @domain_block, serializer: REST::Admin::DomainBlockSerializer
   end
 
-  def index
-    authorize :domain_block, :index?
-    render json: @domain_blocks, each_serializer: REST::Admin::DomainBlockSerializer
-  end
-
-  def show
-    authorize @domain_block, :show?
-    render json: @domain_block, serializer: REST::Admin::DomainBlockSerializer
-  end
-
   def update
     authorize @domain_block, :update?
     @domain_block.update!(domain_block_params)
diff --git a/app/controllers/api/v1/admin/email_domain_blocks_controller.rb b/app/controllers/api/v1/admin/email_domain_blocks_controller.rb
index e53d0b1573..850eda6224 100644
--- a/app/controllers/api/v1/admin/email_domain_blocks_controller.rb
+++ b/app/controllers/api/v1/admin/email_domain_blocks_controller.rb
@@ -18,15 +18,6 @@ class Api::V1::Admin::EmailDomainBlocksController < Api::BaseController
     limit
   ).freeze
 
-  def create
-    authorize :email_domain_block, :create?
-
-    @email_domain_block = EmailDomainBlock.create!(resource_params)
-    log_action :create, @email_domain_block
-
-    render json: @email_domain_block, serializer: REST::Admin::EmailDomainBlockSerializer
-  end
-
   def index
     authorize :email_domain_block, :index?
     render json: @email_domain_blocks, each_serializer: REST::Admin::EmailDomainBlockSerializer
@@ -37,6 +28,15 @@ class Api::V1::Admin::EmailDomainBlocksController < Api::BaseController
     render json: @email_domain_block, serializer: REST::Admin::EmailDomainBlockSerializer
   end
 
+  def create
+    authorize :email_domain_block, :create?
+
+    @email_domain_block = EmailDomainBlock.create!(resource_params)
+    log_action :create, @email_domain_block
+
+    render json: @email_domain_block, serializer: REST::Admin::EmailDomainBlockSerializer
+  end
+
   def destroy
     authorize @email_domain_block, :destroy?
     @email_domain_block.destroy!
diff --git a/app/controllers/api/v1/admin/ip_blocks_controller.rb b/app/controllers/api/v1/admin/ip_blocks_controller.rb
index 201ab6b1ff..61c1912344 100644
--- a/app/controllers/api/v1/admin/ip_blocks_controller.rb
+++ b/app/controllers/api/v1/admin/ip_blocks_controller.rb
@@ -18,13 +18,6 @@ class Api::V1::Admin::IpBlocksController < Api::BaseController
     limit
   ).freeze
 
-  def create
-    authorize :ip_block, :create?
-    @ip_block = IpBlock.create!(resource_params)
-    log_action :create, @ip_block
-    render json: @ip_block, serializer: REST::Admin::IpBlockSerializer
-  end
-
   def index
     authorize :ip_block, :index?
     render json: @ip_blocks, each_serializer: REST::Admin::IpBlockSerializer
@@ -35,6 +28,13 @@ class Api::V1::Admin::IpBlocksController < Api::BaseController
     render json: @ip_block, serializer: REST::Admin::IpBlockSerializer
   end
 
+  def create
+    authorize :ip_block, :create?
+    @ip_block = IpBlock.create!(resource_params)
+    log_action :create, @ip_block
+    render json: @ip_block, serializer: REST::Admin::IpBlockSerializer
+  end
+
   def update
     authorize @ip_block, :update?
     @ip_block.update(resource_params)
diff --git a/app/controllers/api/v1/filters_controller.rb b/app/controllers/api/v1/filters_controller.rb
index 772791b255..ed98acce30 100644
--- a/app/controllers/api/v1/filters_controller.rb
+++ b/app/controllers/api/v1/filters_controller.rb
@@ -11,6 +11,10 @@ class Api::V1::FiltersController < Api::BaseController
     render json: @filters, each_serializer: REST::V1::FilterSerializer
   end
 
+  def show
+    render json: @filter, serializer: REST::V1::FilterSerializer
+  end
+
   def create
     ApplicationRecord.transaction do
       filter_category = current_account.custom_filters.create!(filter_params)
@@ -20,10 +24,6 @@ class Api::V1::FiltersController < Api::BaseController
     render json: @filter, serializer: REST::V1::FilterSerializer
   end
 
-  def show
-    render json: @filter, serializer: REST::V1::FilterSerializer
-  end
-
   def update
     ApplicationRecord.transaction do
       @filter.update!(keyword_params)
diff --git a/app/controllers/api/v1/media_controller.rb b/app/controllers/api/v1/media_controller.rb
index f9c935bf3e..7485438dbf 100644
--- a/app/controllers/api/v1/media_controller.rb
+++ b/app/controllers/api/v1/media_controller.rb
@@ -6,6 +6,10 @@ class Api::V1::MediaController < Api::BaseController
   before_action :set_media_attachment, except: [:create]
   before_action :check_processing, except: [:create]
 
+  def show
+    render json: @media_attachment, serializer: REST::MediaAttachmentSerializer, status: status_code_for_media_attachment
+  end
+
   def create
     @media_attachment = current_account.media_attachments.create!(media_attachment_params)
     render json: @media_attachment, serializer: REST::MediaAttachmentSerializer
@@ -15,10 +19,6 @@ class Api::V1::MediaController < Api::BaseController
     render json: processing_error, status: 500
   end
 
-  def show
-    render json: @media_attachment, serializer: REST::MediaAttachmentSerializer, status: status_code_for_media_attachment
-  end
-
   def update
     @media_attachment.update!(updateable_media_attachment_params)
     render json: @media_attachment, serializer: REST::MediaAttachmentSerializer, status: status_code_for_media_attachment
diff --git a/app/controllers/api/v1/push/subscriptions_controller.rb b/app/controllers/api/v1/push/subscriptions_controller.rb
index 7148d63a4e..3634acf956 100644
--- a/app/controllers/api/v1/push/subscriptions_controller.rb
+++ b/app/controllers/api/v1/push/subscriptions_controller.rb
@@ -6,6 +6,10 @@ class Api::V1::Push::SubscriptionsController < Api::BaseController
   before_action :set_push_subscription
   before_action :check_push_subscription, only: [:show, :update]
 
+  def show
+    render json: @push_subscription, serializer: REST::WebPushSubscriptionSerializer
+  end
+
   def create
     @push_subscription&.destroy!
 
@@ -21,10 +25,6 @@ class Api::V1::Push::SubscriptionsController < Api::BaseController
     render json: @push_subscription, serializer: REST::WebPushSubscriptionSerializer
   end
 
-  def show
-    render json: @push_subscription, serializer: REST::WebPushSubscriptionSerializer
-  end
-
   def update
     @push_subscription.update!(data: data_params)
     render json: @push_subscription, serializer: REST::WebPushSubscriptionSerializer
diff --git a/app/controllers/api/v2/filters/keywords_controller.rb b/app/controllers/api/v2/filters/keywords_controller.rb
index c63e1d986b..fe1a991944 100644
--- a/app/controllers/api/v2/filters/keywords_controller.rb
+++ b/app/controllers/api/v2/filters/keywords_controller.rb
@@ -12,13 +12,13 @@ class Api::V2::Filters::KeywordsController < Api::BaseController
     render json: @keywords, each_serializer: REST::FilterKeywordSerializer
   end
 
-  def create
-    @keyword = current_account.custom_filters.find(params[:filter_id]).keywords.create!(resource_params)
-
+  def show
     render json: @keyword, serializer: REST::FilterKeywordSerializer
   end
 
-  def show
+  def create
+    @keyword = current_account.custom_filters.find(params[:filter_id]).keywords.create!(resource_params)
+
     render json: @keyword, serializer: REST::FilterKeywordSerializer
   end
 
diff --git a/app/controllers/api/v2/filters/statuses_controller.rb b/app/controllers/api/v2/filters/statuses_controller.rb
index 755c14cffa..2e95497a66 100644
--- a/app/controllers/api/v2/filters/statuses_controller.rb
+++ b/app/controllers/api/v2/filters/statuses_controller.rb
@@ -12,13 +12,13 @@ class Api::V2::Filters::StatusesController < Api::BaseController
     render json: @status_filters, each_serializer: REST::FilterStatusSerializer
   end
 
-  def create
-    @status_filter = current_account.custom_filters.find(params[:filter_id]).statuses.create!(resource_params)
-
+  def show
     render json: @status_filter, serializer: REST::FilterStatusSerializer
   end
 
-  def show
+  def create
+    @status_filter = current_account.custom_filters.find(params[:filter_id]).statuses.create!(resource_params)
+
     render json: @status_filter, serializer: REST::FilterStatusSerializer
   end
 
diff --git a/app/controllers/api/v2/filters_controller.rb b/app/controllers/api/v2/filters_controller.rb
index 8ff3076cfb..2fcdeeae45 100644
--- a/app/controllers/api/v2/filters_controller.rb
+++ b/app/controllers/api/v2/filters_controller.rb
@@ -11,13 +11,13 @@ class Api::V2::FiltersController < Api::BaseController
     render json: @filters, each_serializer: REST::FilterSerializer, rules_requested: true
   end
 
-  def create
-    @filter = current_account.custom_filters.create!(resource_params)
-
+  def show
     render json: @filter, serializer: REST::FilterSerializer, rules_requested: true
   end
 
-  def show
+  def create
+    @filter = current_account.custom_filters.create!(resource_params)
+
     render json: @filter, serializer: REST::FilterSerializer, rules_requested: true
   end
 
diff --git a/app/controllers/auth/registrations_controller.rb b/app/controllers/auth/registrations_controller.rb
index f9d30c1ebd..b948cd1544 100644
--- a/app/controllers/auth/registrations_controller.rb
+++ b/app/controllers/auth/registrations_controller.rb
@@ -24,16 +24,16 @@ class Auth::RegistrationsController < Devise::RegistrationsController
     super(&:build_invite_request)
   end
 
-  def destroy
-    not_found
-  end
-
   def update
     super do |resource|
       resource.clear_other_sessions(current_session.session_id) if resource.saved_change_to_encrypted_password?
     end
   end
 
+  def destroy
+    not_found
+  end
+
   protected
 
   def update_resource(resource, params)
diff --git a/app/controllers/filters_controller.rb b/app/controllers/filters_controller.rb
index 1881dd5a0b..bbe177ead1 100644
--- a/app/controllers/filters_controller.rb
+++ b/app/controllers/filters_controller.rb
@@ -17,6 +17,8 @@ class FiltersController < ApplicationController
     @filter.keywords.build
   end
 
+  def edit; end
+
   def create
     @filter = current_account.custom_filters.build(resource_params)
 
@@ -27,8 +29,6 @@ class FiltersController < ApplicationController
     end
   end
 
-  def edit; end
-
   def update
     if @filter.update(resource_params)
       redirect_to filters_path
diff --git a/app/controllers/settings/applications_controller.rb b/app/controllers/settings/applications_controller.rb
index e6e137c2bc..d4b7205681 100644
--- a/app/controllers/settings/applications_controller.rb
+++ b/app/controllers/settings/applications_controller.rb
@@ -8,6 +8,8 @@ class Settings::ApplicationsController < Settings::BaseController
     @applications = current_user.applications.order(id: :desc).page(params[:page])
   end
 
+  def show; end
+
   def new
     @application = Doorkeeper::Application.new(
       redirect_uri: Doorkeeper.configuration.native_redirect_uri,
@@ -15,8 +17,6 @@ class Settings::ApplicationsController < Settings::BaseController
     )
   end
 
-  def show; end
-
   def create
     @application = current_user.applications.build(application_params)
 
diff --git a/app/controllers/settings/two_factor_authentication/webauthn_credentials_controller.rb b/app/controllers/settings/two_factor_authentication/webauthn_credentials_controller.rb
index d1ee7dc195..4007f13470 100644
--- a/app/controllers/settings/two_factor_authentication/webauthn_credentials_controller.rb
+++ b/app/controllers/settings/two_factor_authentication/webauthn_credentials_controller.rb
@@ -8,9 +8,8 @@ module Settings
       before_action :require_otp_enabled
       before_action :require_webauthn_enabled, only: [:index, :destroy]
 
-      def new; end
-
       def index; end
+      def new; end
 
       def options
         current_user.update(webauthn_id: WebAuthn.generate_user_id) unless current_user.webauthn_id
-- 
GitLab