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.
Checks for places where ‘case-when` represents a simple 1:1
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 unless min_branches_count?(node) 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