Class: RuboCop::Cop::Momocop::FactoryBotMissingClassOption
- Inherits:
-
Base
- Object
- Base
- RuboCop::Cop::Momocop::FactoryBotMissingClassOption
- Extended by:
- AutoCorrector
- Includes:
- Momocop::Helpers::FactoryBotHelper
- Defined in:
- lib/rubocop/cop/momocop/factory_bot_missing_class_option.rb
Overview
Ensures that FactoryBot factories explicitly specify a class.
Constant Summary collapse
- MSG =
'Specify a class option explicitly in FactoryBot factory.'
- RESTRICT_ON_SEND =
%i[factory].freeze
Constants included from Momocop::Helpers::FactoryBotHelper
Momocop::Helpers::FactoryBotHelper::RUBOCOP_HELPER_METHODS
Instance Method Summary collapse
Instance Method Details
#on_send(node) ⇒ Object
24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/rubocop/cop/momocop/factory_bot_missing_class_option.rb', line 24 def on_send(node) return unless inside_factory_bot_define?(node) # `factory`メソッドの呼び出しで、ハッシュ引数に`:class`キーが含まれているかを調べる class_option_specified = node.arguments.any? { |arg| arg.hash_type? && arg.pairs.any? { |pair| pair.key.sym_type? && pair.key.children.first == :class } } return if class_option_specified add_offense(node.loc.selector) do |corrector| # Assuming the factory name matches the class name. # You may need a more sophisticated approach for different naming conventions. require 'active_support/core_ext/string/inflections' class_name = node.first_argument.value.to_s.camelize corrector.insert_after(node.first_argument.loc.expression, ", class: '#{class_name}'") end end |