Class: RuboCop::Cop::ViewComponent::NoGlobalState

Inherits:
Base
  • Object
show all
Includes:
Base
Defined in:
lib/rubocop/cop/view_component/no_global_state.rb

Overview

Prevents direct access to global state within ViewComponent classes.

Examples:

# bad
class UserComponent < ViewComponent::Base
  def admin?
    params[:admin]
  end
end

# good
class UserComponent < ViewComponent::Base
  def initialize(admin:)
    @admin = admin
  end

  def admin?
    @admin
  end
end

Constant Summary collapse

MSG =
"Avoid accessing `%<method>s` directly in ViewComponents. " \
"Pass necessary data through the constructor instead."
GLOBAL_STATE_METHODS =
%i[
  params
  request
  session
  cookies
  flash
].freeze
RESTRICT_ON_SEND =
GLOBAL_STATE_METHODS

Instance Method Summary collapse

Methods included from Base

#enclosing_class, #inside_view_component?, #view_component_class?, #view_component_parent?

Instance Method Details

#on_send(node) ⇒ Object



47
48
49
50
51
52
53
54
# File 'lib/rubocop/cop/view_component/no_global_state.rb', line 47

def on_send(node)
  return unless inside_view_component?(node)

  method_name = global_state_access?(node)
  return unless method_name

  add_offense(node, message: format(MSG, method: method_name))
end