Project defaults are easier to review when they are named once and applied consistently.

defaults Use named defaults for values that represent a project decision, then let local configuration override them.

Constants and Defaults

example
constants_defaults.rb
Replay: real traced execution (multi-file project)
DEFAULT_RETRIES = 3
DEFAULT_MODE = "safe"

requested_retries = 2
requested_mode = "fast"

retries = requested_retries > 0 ? requested_retries : DEFAULT_RETRIES
mode = requested_mode.empty? ? DEFAULT_MODE : requested_mode
policy = "#{mode}:#{retries}"

puts "default_retries=#{DEFAULT_RETRIES}"
puts "requested_retries=#{requested_retries}"
puts "mode=#{mode}"
puts "policy=#{policy}"
DEFAULT_RETRIES = 3
DEFAULT_MODE = "safe"

requested_retries = 0
requested_mode = "fast"

retries = requested_retries > 0 ? requested_retries : DEFAULT_RETRIES
mode = requested_mode.empty? ? DEFAULT_MODE : requested_mode
policy = "#{mode}:#{retries}"

puts "default_retries=#{DEFAULT_RETRIES}"
puts "requested_retries=#{requested_retries}"
puts "mode=#{mode}"
puts "policy=#{policy}"
DEFAULT_RETRIES = 3
DEFAULT_MODE = "safe"

requested_retries = 5
requested_mode = "fast"

retries = requested_retries > 0 ? requested_retries : DEFAULT_RETRIES
mode = requested_mode.empty? ? DEFAULT_MODE : requested_mode
policy = "#{mode}:#{retries}"

puts "default_retries=#{DEFAULT_RETRIES}"
puts "requested_retries=#{requested_retries}"
puts "mode=#{mode}"
puts "policy=#{policy}"
DEFAULT_RETRIES = 3
DEFAULT_MODE = "safe"

requested_retries = 2
requested_mode = "safe"

retries = requested_retries > 0 ? requested_retries : DEFAULT_RETRIES
mode = requested_mode.empty? ? DEFAULT_MODE : requested_mode
policy = "#{mode}:#{retries}"

puts "default_retries=#{DEFAULT_RETRIES}"
puts "requested_retries=#{requested_retries}"
puts "mode=#{mode}"
puts "policy=#{policy}"
DEFAULT_RETRIES = 3
DEFAULT_MODE = "safe"

requested_retries = 2
requested_mode = "audit"

retries = requested_retries > 0 ? requested_retries : DEFAULT_RETRIES
mode = requested_mode.empty? ? DEFAULT_MODE : requested_mode
policy = "#{mode}:#{retries}"

puts "default_retries=#{DEFAULT_RETRIES}"
puts "requested_retries=#{requested_retries}"
puts "mode=#{mode}"
puts "policy=#{policy}"
  1. DEFAULT_RETRIES ← 3, DEFAULT_MODE ← safe, requested_retries ← 2

    1DEFAULT_RETRIES→ 3 = 32DEFAULT_MODE→ safe = "safe"34requested_retries→ 2 = 2  #@requested_retries=0, 55requested_mode→ fast = "fast"  #@requested_mode="safe", "audit"67retries→ 2 = requested_retries2 > 0 ? requested_retries : DEFAULT_RETRIES38mode→ fast = requested_mode.empty?false ? DEFAULT_MODEsafe : requested_modefast9policy→ fast:2 = "#{modefast}:#{retries2}"1011puts "default_retries=#{DEFAULT_RETRIES3}"12puts "requested_retries=#{requested_retries2}"13puts "mode=#{modefast}"14puts "policy=#{policyfast:2}"
    outputdefault_retries=3
    requested_retries=2
    mode=fast
    policy=fast:2
  1. DEFAULT_RETRIES ← 3, DEFAULT_MODE ← safe, requested_retries ← 0

    1DEFAULT_RETRIES→ 3 = 32DEFAULT_MODE→ safe = "safe"34requested_retries→ 0 = 05requested_mode→ fast = "fast"67retries→ 3 = requested_retries0 > 0 ? requested_retries : DEFAULT_RETRIES38mode→ fast = requested_mode.empty?false ? DEFAULT_MODEsafe : requested_modefast9policy→ fast:3 = "#{modefast}:#{retries3}"1011puts "default_retries=#{DEFAULT_RETRIES3}"12puts "requested_retries=#{requested_retries0}"13puts "mode=#{modefast}"14puts "policy=#{policyfast:3}"
    outputdefault_retries=3
    requested_retries=0
    mode=fast
    policy=fast:3
  1. DEFAULT_RETRIES ← 3, DEFAULT_MODE ← safe, requested_retries ← 5

    1DEFAULT_RETRIES→ 3 = 32DEFAULT_MODE→ safe = "safe"34requested_retries→ 5 = 55requested_mode→ fast = "fast"67retries→ 5 = requested_retries5 > 0 ? requested_retries : DEFAULT_RETRIES38mode→ fast = requested_mode.empty?false ? DEFAULT_MODEsafe : requested_modefast9policy→ fast:5 = "#{modefast}:#{retries5}"1011puts "default_retries=#{DEFAULT_RETRIES3}"12puts "requested_retries=#{requested_retries5}"13puts "mode=#{modefast}"14puts "policy=#{policyfast:5}"
    outputdefault_retries=3
    requested_retries=5
    mode=fast
    policy=fast:5
  1. DEFAULT_RETRIES ← 3, DEFAULT_MODE ← safe, requested_retries ← 2

    1DEFAULT_RETRIES→ 3 = 32DEFAULT_MODE→ safe = "safe"34requested_retries→ 2 = 25requested_mode→ safe = "safe"67retries→ 2 = requested_retries2 > 0 ? requested_retries : DEFAULT_RETRIES38mode→ safe = requested_mode.empty?false ? DEFAULT_MODEsafe : requested_modesafe9policy→ safe:2 = "#{modesafe}:#{retries2}"1011puts "default_retries=#{DEFAULT_RETRIES3}"12puts "requested_retries=#{requested_retries2}"13puts "mode=#{modesafe}"14puts "policy=#{policysafe:2}"
    outputdefault_retries=3
    requested_retries=2
    mode=safe
    policy=safe:2
  1. DEFAULT_RETRIES ← 3, DEFAULT_MODE ← safe, requested_retries ← 2

    1DEFAULT_RETRIES→ 3 = 32DEFAULT_MODE→ safe = "safe"34requested_retries→ 2 = 25requested_mode→ audit = "audit"67retries→ 2 = requested_retries2 > 0 ? requested_retries : DEFAULT_RETRIES38mode→ audit = requested_mode.empty?false ? DEFAULT_MODEsafe : requested_modeaudit9policy→ audit:2 = "#{modeaudit}:#{retries2}"1011puts "default_retries=#{DEFAULT_RETRIES3}"12puts "requested_retries=#{requested_retries2}"13puts "mode=#{modeaudit}"14puts "policy=#{policyaudit:2}"
    outputdefault_retries=3
    requested_retries=2
    mode=audit
    policy=audit:2