Hash # busca com confiança

Hash#fetch é mais estrito sobre a presença chave do que Hash#[]

{}[:foo]
=> nil

{}.fetch(:foo)
KeyError: key not found: :foo

Se você esquecer de definir uma ENVvariável da qual seu código depende, prefere que ele falhe tarde ou imediatamente?

ENV['TWITTER_OAUTH_TOKEN']
=> nil

ENV
.fetch('TWITTER_OAUTH_TOKEN')
KeyError: key not found

É especialmente interessante quando uma chave com um padrão verdadeiro é explicitamente configurada com um valor falso:

options = {on: false}

@on = options[:on] || true
=> true # yikes, ever fallen into this trap?

@on = options.fetch(:on, true)
=> false