Nested case structures are difficult to understand because you can easily confuse the cases of an inner case as belonging to an outer statement. Therefore nested case statements should be avoided.

Specifically, you should structure your code to avoid the need for nested case statements, but if you cannot, then consider moving the inner case to another function.

Noncompliant Code Example

def foo(n, m)
  case n
  when 0
      case m  # Noncompliant; nested case
      when 0 then puts "0"
        # ...
      end
  when 1 then puts "1"
  else puts "2"
  end
end

Compliant Solution

def foo(n, m)
  case n
  when 0
    bar(m)
  when 1 then puts "1"
  else puts "2"
  end
end

def bar(m)
  case m
  when 0 then puts "0"
    # ...
  end
end