Помогите в рефакторинге этого противного выражения Ruby if / else
Так что у меня есть это большое, волосатое утверждение if / else. Я передаю ему номер для отслеживания, а затем он определяет, какой это номер для отслеживания.
Как я могу упростить эту вещь? Конкретно желая уменьшить количество строк кодов.
if num_length < 8
tracking_service = false
else
if number[1, 1] == 'Z'
tracking_service = 'ups'
elsif number[0, 1] == 'Q'
tracking_service = 'dhl'
elsif number[0, 2] == '96' && num_length == 22
tracking_service = 'fedex'
elsif number[0, 1] == 'H' && num_length == 11
tracking_service = 'ups'
elsif number[0, 1] == 'K' && num_length == 11
tracking_service = 'ups'
elsif num_length == 18 || num_length == 20
check_response(number)
else
case num_length
when 17
tracking_service = 'dhlgm'
when 13,20,22,30
tracking_service = 'usps'
when 12,15,19
tracking_service = 'fedex'
when 10,11
tracking_service = 'dhl'
else
tracking_service = false
end
end
end
Да, я знаю. Это'с противным.