Command-line programs report success or failure with an exit status code.

exit status Ruby programs can compute a status code before passing it to `exit`; examples can model the value without ending the replay early.

Exit Status Model

example
exit_status_model.rb
Replay: real traced execution (multi-file project)
valid = true
warnings = 1

status = if !valid
  1
elsif warnings > 0
  2
else
  0
end

meaning = case status
when 0
  "success"
when 1
  "error"
else
  "warning"
end

puts "valid=#{valid}"
puts "warnings=#{warnings}"
puts "status=#{status}"
puts "meaning=#{meaning}"
valid = false
warnings = 1

status = if !valid
  1
elsif warnings > 0
  2
else
  0
end

meaning = case status
when 0
  "success"
when 1
  "error"
else
  "warning"
end

puts "valid=#{valid}"
puts "warnings=#{warnings}"
puts "status=#{status}"
puts "meaning=#{meaning}"
valid = true
warnings = 0

status = if !valid
  1
elsif warnings > 0
  2
else
  0
end

meaning = case status
when 0
  "success"
when 1
  "error"
else
  "warning"
end

puts "valid=#{valid}"
puts "warnings=#{warnings}"
puts "status=#{status}"
puts "meaning=#{meaning}"
valid = true
warnings = 3

status = if !valid
  1
elsif warnings > 0
  2
else
  0
end

meaning = case status
when 0
  "success"
when 1
  "error"
else
  "warning"
end

puts "valid=#{valid}"
puts "warnings=#{warnings}"
puts "status=#{status}"
puts "meaning=#{meaning}"
  1. valid ← true, warnings ← 1, status ← 2, meaning ← warning

    1valid→ true = true  #@valid=false2warnings→ 1 = 1  #@warnings=0, 334status→ 2 = if !validtrue5  16elsif warnings1 > 07  28else9  010end1112meaning→ warning = case status213when 014  "success"15when 116  "error"17else18  "warning"19end2021puts "valid=#{validtrue}"22puts "warnings=#{warnings1}"23puts "status=#{status2}"24puts "meaning=#{meaningwarning}"
    outputvalid=true
    warnings=1
    status=2
    meaning=warning
  1. valid ← false, warnings ← 1, status ← 1, meaning ← error

    1valid→ false = false2warnings→ 1 = 134status→ 1 = if !validfalse5  16elsif warnings1 > 07  28else9  010end1112meaning→ error = case status113when 014  "success"15when 116  "error"17else18  "warning"19end2021puts "valid=#{validfalse}"22puts "warnings=#{warnings1}"23puts "status=#{status1}"24puts "meaning=#{meaningerror}"
    outputvalid=false
    warnings=1
    status=1
    meaning=error
  1. valid ← true, warnings ← 0, status ← 0, meaning ← success

    1valid→ true = true2warnings→ 0 = 034status→ 0 = if !validtrue5  16elsif warnings0 > 07  28else9  010end1112meaning→ success = case status013when 014  "success"15when 116  "error"17else18  "warning"19end2021puts "valid=#{validtrue}"22puts "warnings=#{warnings0}"23puts "status=#{status0}"24puts "meaning=#{meaningsuccess}"
    outputvalid=true
    warnings=0
    status=0
    meaning=success
  1. valid ← true, warnings ← 3, status ← 2, meaning ← warning

    1valid→ true = true2warnings→ 3 = 334status→ 2 = if !validtrue5  16elsif warnings3 > 07  28else9  010end1112meaning→ warning = case status213when 014  "success"15when 116  "error"17else18  "warning"19end2021puts "valid=#{validtrue}"22puts "warnings=#{warnings3}"23puts "status=#{status2}"24puts "meaning=#{meaningwarning}"
    outputvalid=true
    warnings=3
    status=2
    meaning=warning