Итак, нам нужно заботиться о трех случаях:
- пользователь не вводит код
- пользователь вводит код, которого нет в базе данных
- пользователь вводит код, который находится в базе данных
В первом случае ARGV.first
будет nil
. Мы можем добавить nil
ключ к CODE_TO_NAME
с соответствующим сообщением.
Во втором случае, индексирование в CODE_TO_NAME
вернет значение по умолчанию, поэтому мы можем установить значение по умолчанию для соответствующего сообщения.
В третьем случае код, который мы получаем из командной строки, будет String
, а не Symbol
, поэтому, если мы изменим ключи в CODE_TO_NAME
на String
s, мы можем индексировать в CODE_TO_NAME
напрямую, без каких-либо преобразований.
#!/usr/bin/env ruby
class Country
CODE_TO_NAME = Hash.new('Not match').merge({
'us' => 'United States',
'mx' => 'Mexico',
'fr' => 'France',
'gr' => 'Germany', # BTW, the ISO-3166-1 alpha-2 code for Germany is 'de'
nil => 'Code not specified'
}).freeze
def self.name(code)
CODE_TO_NAME[code]
end
end
puts Country.name(ARGV.shift)