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