Class: RuboCop::Cop::Sequioacap::ClassName
- Inherits:
-
RuboCop::Cop
- Object
- RuboCop::Cop
- RuboCop::Cop::Sequioacap::ClassName
- Defined in:
- lib/rubocop/cop/sequioacap/class_name.rb
Overview
Cop to prevent cross-model references, which result in a cascade of autoloads. E.g., belongs_to :user, :class_name => User.name
Constant Summary collapse
- MSG =
'Use "Model" instead of Model.name at class scope to avoid cross-model references. ' \ 'They cause a long cascade of autoloading, slowing down app startup and slowing down ' \ 'reloading of zeus after changing a model.'.freeze
Instance Method Summary collapse
-
#on_send(node) ⇒ Object
Is this a has_many, has_one, or belongs_to with a :class_name arg? Make sure the class name is a hardcoded string.
Instance Method Details
#on_send(node) ⇒ Object
Is this a has_many, has_one, or belongs_to with a :class_name arg? Make sure the class name is a hardcoded string. If not, add an offense and return true.
17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
# File 'lib/rubocop/cop/sequioacap/class_name.rb', line 17 def on_send(node) association_statement = node.command?(:has_many) || node.command?(:has_one) || node.command?(:belongs_to) return unless association_statement class_pair = class_name_node(node) if class_pair && !string_class_name?(class_pair) add_offense(class_pair) end end |