Module: RuboCop::Cop::ViewComponent::Base

Included in:
ComponentSuffix, NoGlobalState, PreferComposition, PreferPrivateMethods, PreferSlots
Defined in:
lib/rubocop/cop/view_component/base.rb

Overview

Shared helper methods for ViewComponent cops

Instance Method Summary collapse

Instance Method Details

#enclosing_class(node) ⇒ Object

Find the enclosing class node



31
32
33
# File 'lib/rubocop/cop/view_component/base.rb', line 31

def enclosing_class(node)
  node.each_ancestor(:class).first
end

#inside_view_component?(node) ⇒ Boolean

Check if node is within a ViewComponent class

Returns:

  • (Boolean)


36
37
38
39
40
41
# File 'lib/rubocop/cop/view_component/base.rb', line 36

def inside_view_component?(node)
  klass = enclosing_class(node)
  return false unless klass

  view_component_class?(klass)
end

#view_component_class?(node) ⇒ Boolean

Check if a class node inherits from ViewComponent::Base or ApplicationComponent

Returns:

  • (Boolean)


9
10
11
12
13
14
15
16
# File 'lib/rubocop/cop/view_component/base.rb', line 9

def view_component_class?(node)
  return false unless node&.class_type?

  parent_class = node.parent_class
  return false unless parent_class

  view_component_parent?(parent_class)
end

#view_component_parent?(node) ⇒ Boolean

Check if node represents ViewComponent::Base, ApplicationComponent, or a configured additional parent class

Returns:

  • (Boolean)


20
21
22
23
24
25
26
27
28
# File 'lib/rubocop/cop/view_component/base.rb', line 20

def view_component_parent?(node)
  return false unless node.const_type?

  source = node.source
  return true if source == "ViewComponent::Base" || source == "ApplicationComponent"

  additional = config.for_all_cops["ViewComponentParentClasses"] || []
  additional.include?(source)
end