class RuboCop::Cop::ThreadSafety::ClassAndModuleAttributes

Avoid mutating class and module attributes.

They are implemented by class variables, which are not thread-safe.

@example

# bad
class User
  cattr_accessor :current_user
end

Constants

MSG

Public Instance Methods

on_send(node) click to toggle source
# File lib/rubocop/cop/thread_safety/class_and_module_attributes.rb, line 42
def on_send(node)
  return unless mattr?(node) || class_attr?(node) ||
                singleton_attr?(node)

  add_offense(node, message: MSG)
end

Private Instance Methods

defined_in_singleton_class?(node) click to toggle source
# File lib/rubocop/cop/thread_safety/class_and_module_attributes.rb, line 56
def defined_in_singleton_class?(node)
  node.ancestors.each do |ancestor|
    case ancestor.type
    when :def then return false
    when :sclass then return true
    else next
    end
  end

  false
end
singleton_attr?(node) click to toggle source
# File lib/rubocop/cop/thread_safety/class_and_module_attributes.rb, line 51
def singleton_attr?(node)
  (attr?(node) || attr_internal?(node)) &&
    defined_in_singleton_class?(node)
end