module RuboCop::Cop::Metrics::Utils::IteratingBlock

def block_method_name(node)

if node is a block node, or a block-pass node.
Returns the name of the method called with a block
def block_method_name(node)
  case node.type
  when :block
    node.method_name
  when :block_pass
    node.parent.method_name
  end
end

def iterating_block?(node)

Otherwise returns true/false if method call is a known iterating call
Returns nil if node is neither a block node or a block-pass node.
def iterating_block?(node)
  name = block_method_name(node)
  name && iterating_method?(name)
end

def iterating_method?(name)

Returns true iff name is a known iterating type (e.g. :each, :transform_values)
def iterating_method?(name)
  KNOWN_ITERATING_METHODS.include? name
end