Помогите в рефакторинге этого противного выражения 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

Да, я знаю. Это'с противным.

Ответы на вопрос(5)

Ваш ответ на вопрос