From 0ca94e54437bef65d38148c9e243f8871b10273f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javi=20Mart=C3=ADn?= Date: Fri, 31 Oct 2025 13:10:20 +0100 Subject: [PATCH] Add and apply Rails/FindByOrAssignmentMemoization rule This rule was added in rubocop-rails 2.33. At first, I wasn't very fond of this rule. It made the code less readable even if it improved performace in some cases. Then I realized that in the `Admin::MachineLearning::SettingComponent` we were using `find_by` when we should be using `find_by!` instead, and we detected that thanks to this rule. So, only for that reason, I'm adding this rule, but I'm fine if we remove it. --- .rubocop.yml | 3 +++ app/components/admin/machine_learning/setting_component.rb | 2 +- app/controllers/dashboard/successful_supports_controller.rb | 4 +++- app/models/verification/management/email.rb | 4 +++- 4 files changed, 10 insertions(+), 3 deletions(-) diff --git a/.rubocop.yml b/.rubocop.yml index e6c5dc937..0894528da 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -441,6 +441,9 @@ Rails/FindBy: Exclude: - "config/initializers/ahoy.rb" +Rails/FindByOrAssignmentMemoization: + Enabled: true + Rails/FindEach: Enabled: true diff --git a/app/components/admin/machine_learning/setting_component.rb b/app/components/admin/machine_learning/setting_component.rb index e6da31334..ee218d5ee 100644 --- a/app/components/admin/machine_learning/setting_component.rb +++ b/app/components/admin/machine_learning/setting_component.rb @@ -8,7 +8,7 @@ class Admin::MachineLearning::SettingComponent < ApplicationComponent private def setting - @setting ||= Setting.find_by(key: "machine_learning.#{kind}") + @setting ||= Setting.find_by!(key: "machine_learning.#{kind}") end def ml_info diff --git a/app/controllers/dashboard/successful_supports_controller.rb b/app/controllers/dashboard/successful_supports_controller.rb index e79213e79..d42e48771 100644 --- a/app/controllers/dashboard/successful_supports_controller.rb +++ b/app/controllers/dashboard/successful_supports_controller.rb @@ -27,7 +27,9 @@ class Dashboard::SuccessfulSupportsController < Dashboard::BaseController end def successful_proposal - @successful_proposal ||= Proposal.find_by(id: Setting["proposals.successful_proposal_id"]) + return @successful_proposal if defined?(@successful_proposal) + + @successful_proposal = Proposal.find_by(id: Setting["proposals.successful_proposal_id"]) end def days_diff diff --git a/app/models/verification/management/email.rb b/app/models/verification/management/email.rb index cb1c1bc82..311ff1a6d 100644 --- a/app/models/verification/management/email.rb +++ b/app/models/verification/management/email.rb @@ -11,7 +11,9 @@ class Verification::Management::Email delegate :username, to: :user, allow_nil: true def user - @user ||= User.find_by(email: email) + return @user if defined?(@user) + + @user = User.find_by(email: email) end def user?