class RuboCop::Cop::Style::HashLikeCase
Checks for places where `case-when` represents a simple 1:1 mapping and can be replaced with a hash lookup.
@example MinBranchesCount: 3 (default)
# bad case country when 'europe' 'http://eu.example.com' when 'america' 'http://us.example.com' when 'australia' 'http://au.example.com' end # good SITES = { 'europe' => 'http://eu.example.com', 'america' => 'http://us.example.com', 'australia' => 'http://au.example.com' } SITES[country]
@example MinBranchesCount: 4
# good case country when 'europe' 'http://eu.example.com' when 'america' 'http://us.example.com' when 'australia' 'http://au.example.com' end
Constants
- MSG
Public Instance Methods
on_case(node)
click to toggle source
# File lib/rubocop/cop/style/hash_like_case.rb, line 51 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
Private Instance Methods
min_branches_count()
click to toggle source
# File lib/rubocop/cop/style/hash_like_case.rb, line 67 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
nodes_of_same_type?(nodes)
click to toggle source
# File lib/rubocop/cop/style/hash_like_case.rb, line 63 def nodes_of_same_type?(nodes) nodes.all? { |node| node.type == nodes.first.type } end