Module: RuboCop::Cop::Metrics::Utils::IteratingBlock

Included in:
AbcSizeCalculator
Defined in:
lib/rubocop/cop/metrics/utils/iterating_block.rb

Overview

Used to identify iterating blocks like `.map{}` and `.map(&:…)`

Constant Summary collapse

KNOWN_ITERATING_METHODS =
(Set.new(enumerable) + enumerator + array + hash).freeze

Instance Method Summary collapse

Instance Method Details

#block_method_name(node) ⇒ Object

Returns the name of the method called with a block if node is a block node, or a block-pass node.


37
38
39
40
41
42
43
44
# File 'lib/rubocop/cop/metrics/utils/iterating_block.rb', line 37

def block_method_name(node)
  case node.type
  when :block
    node.method_name
  when :block_pass
    node.parent.method_name
  end
end

#iterating_block?(node) ⇒ Boolean

Returns nil if node is neither a block node or a block-pass node. Otherwise returns true/false if method call is a known iterating call

Returns:

  • (Boolean)

53
54
55
56
# File 'lib/rubocop/cop/metrics/utils/iterating_block.rb', line 53

def iterating_block?(node)
  name = block_method_name(node)
  name && iterating_method?(name)
end

#iterating_method?(name) ⇒ Boolean

Returns true iff name is a known iterating type (e.g. :each, :transform_values)

Returns:

  • (Boolean)

47
48
49
# File 'lib/rubocop/cop/metrics/utils/iterating_block.rb', line 47

def iterating_method?(name)
  KNOWN_ITERATING_METHODS.include? name
end