class RubbyCop::Cop::Lint::DuplicateCaseCondition

This cop checks that there are no repeated conditions used in case 'when' expressions.

@example

# bad

case x
when 'first'
  do_something
when 'first'
  do_something_else
end

@example

# good

case x
when 'first'
  do_something
when 'second'
  do_something_else
end

Constants

MSG

Public Instance Methods

on_case(case_node) click to toggle source
# File lib/rubbycop/cop/lint/duplicate_case_condition.rb, line 33
def on_case(case_node)
  case_node.when_branches.each_with_object([]) do |when_node, previous|
    when_node.each_condition do |condition|
      if repeated_condition?(previous, condition)
        add_offense(condition, :expression, MSG)
      end
    end

    previous.push(when_node.conditions)
  end
end

Private Instance Methods

repeated_condition?(previous, condition) click to toggle source
# File lib/rubbycop/cop/lint/duplicate_case_condition.rb, line 47
def repeated_condition?(previous, condition)
  previous.any? { |c| c.include?(condition) }
end