Ruby case expressions choose a branch by matching a value.

case expression A `case` expression compares one value against several `when` branches.

Case Expressions

role
case_intro.rb
Replay: real traced execution (multi-file project)
role = "editor"

message = case role
          when "admin"
            "full access"
          when "editor"
            "can update"
          else
            "read only"
          end

puts "role=#{role}"
puts "message=#{message}"
role = "admin"

message = case role
          when "admin"
            "full access"
          when "editor"
            "can update"
          else
            "read only"
          end

puts "role=#{role}"
puts "message=#{message}"
role = "guest"

message = case role
          when "admin"
            "full access"
          when "editor"
            "can update"
          else
            "read only"
          end

puts "role=#{role}"
puts "message=#{message}"
  1. role ← editor, message ← can update

    1role→ editor = "editor"  #@role="admin", "guest"23message→ can update = case roleeditor4          when "admin"5            "full access"6          when "editor"7            "can update"8          else9            "read only"10          end1112puts "role=#{roleeditor}"13puts "message=#{messagecan update}"
    outputrole=editor
    message=can update
  1. role ← admin, message ← full access

    1role→ admin = "admin"23message→ full access = case roleadmin4          when "admin"5            "full access"6          when "editor"7            "can update"8          else9            "read only"10          end1112puts "role=#{roleadmin}"13puts "message=#{messagefull access}"
    outputrole=admin
    message=full access
  1. role ← guest, message ← read only

    1role→ guest = "guest"23message→ read only = case roleguest4          when "admin"5            "full access"6          when "editor"7            "can update"8          else9            "read only"10          end1112puts "role=#{roleguest}"13puts "message=#{messageread only}"
    outputrole=guest
    message=read only

Match the Role

  1. role starts as editor.
  2. The case checks each when branch.
  3. when "editor" matches.
  4. The message becomes can update. | Role | Message | | --- | --- | | admin | full access | | editor | can update | | guest | read only |

Exercise: case_intro.rb

Use a case expression to map a role to the correct access message