Skip to content
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

RuboCop の Lint/IneffectiveAccessModifier の警告に対応 #4103

Merged
merged 1 commit into from
Feb 1, 2022

Conversation

AudioStakes
Copy link
Contributor

@AudioStakes AudioStakes commented Feb 1, 2022

RuboCop のチェックが通らなくて CI が通らないようになっているため、対応しました。

やったこと

次のメソッド Notification.product_update が public なクラスメソッドとして扱われるようにメソッドの定義場所を移した

def self.product_update(product, receiver)
Notification.create!(
kind: 17,
user: receiver,
sender: product.user,
link: Rails.application.routes.url_helpers.polymorphic_path(product),
message: "#{product.user.login_name}さんの提出物が更新されました",
read: false
)
end

RuboCop を実行したときのログ

修正前

$ bundle exec rubocop -A app/models/notification.rb
Inspecting 1 file
W

Offenses:

app/models/notification.rb:272:3: W: Lint/IneffectiveAccessModifier: private (on line 265) does not make singleton methods private. Use private_class_method or private inside a class << self block instead.
  def self.product_update(product, receiver)
  ^^^

1 file inspected, 1 offense detected

修正後

$ bundle exec rubocop -A app/models/notification.rb
Inspecting 1 file
.

1 file inspected, no offenses detected

考えたこと

RuboCop のチェックが通らなかった Lint/IneffectiveAccessModifier では private なクラスメソッドの定義の仕方について指摘されている。
しかしその対象のメソッド Notification.product_update は、次のコードのとおり外から呼び出されているため、 private として扱いたいという意図はないと考えた。

def self.product_update(product, receiver)
Notification.product_update(product, receiver)
return if receiver.retired?
end

そのため Lint/IneffectiveAccessModifier の警告どおりには修正せず(つまり private としてではなく)public なクラスメソッドとして扱われるようにメソッドの定義場所を移した。

Rubocop を実行したときに次の警告が生じていた

app/models/notification.rb:272:3: W: Lint/IneffectiveAccessModifier: private (on line 265) does not make singleton methods private. Use private_class_method or private inside a class << self block instead.
  def self.product_update(product, receiver)
  ^^^
@AudioStakes AudioStakes marked this pull request as ready for review February 1, 2022 05:13
@AudioStakes AudioStakes self-assigned this Feb 1, 2022
@AudioStakes
Copy link
Contributor Author

@komagata
現在 Rubocop のチェックがパスしないため、CI が通らなくなっています。
早めに対応した方がよいと考え、こちらの PR で対応しました。
お時間のあるときに、見てもらえますと嬉しいですー🙏

Copy link
Member

@komagata komagata left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

修正ありがとうございます〜!!

@komagata komagata merged commit 2b23201 into main Feb 1, 2022
@komagata komagata deleted the bug/rubocop-lint-ineffective-access-modifier branch February 1, 2022 06:59
@github-actions github-actions bot mentioned this pull request Feb 1, 2022
28 tasks
@AudioStakes AudioStakes changed the title Rubocop の Lint/IneffectiveAccessModifier の警告に対応 RuboCop の Lint/IneffectiveAccessModifier の警告に対応 Feb 1, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants