class RuboCop::Cop::Style::HashLikeCase


end
au.example.com
when ‘australia’
us.example.com
when ‘america’
eu.example.com
when ‘europe’
case country
# good
@example MinBranchesCount: 4

SITES[country]
}
‘australia’ => ‘au.example.com
‘america’ => ‘us.example.com’,
‘europe’ => ‘eu.example.com’,
SITES = {
# good
end
au.example.com
when ‘australia’
us.example.com
when ‘america’
eu.example.com
when ‘europe’
case country
# bad
@example MinBranchesCount: 3 (default)
mapping and can be replaced with a hash lookup.
This cop checks for places where ‘case-when` represents a simple 1:1

def min_branches_count

def min_branches_count
  length = cop_config['MinBranchesCount'] || 3
  return length if length.is_a?(Integer) && length.positive?
  warn Rainbow('`MinBranchesCount` needs to be a positive integer!').red
  exit!
end

def nodes_of_same_type?(nodes)

def nodes_of_same_type?(nodes)
  nodes.all? { |node| node.type == nodes.first.type }
end

def on_case(node)

def on_case(node)
  return if node.when_branches.size < min_branches_count
  hash_like_case?(node) do |condition_nodes, body_nodes|
    if nodes_of_same_type?(condition_nodes) && nodes_of_same_type?(body_nodes)
      add_offense(node)
    end
  end
end