重构案例/使用字符串时

时间:2013-05-14 00:07:12

标签: ruby-on-rails refactoring

我的控制器中有很多这样的东西:

def ups
  @ups ||= Shipper::Ups.new(
    ENV['UPS_ACCESS_KEY'],
    ENV['UPS_PASSWORD'],
    ENV['UPS_USERNAME'],
    ENV['UPS_ACCOUNT']
  )
end

然后我有一个被调用的块:

def type(number, carrier)
  case carrier.slug
  when 'ups'
    number_details = ups.track(number)
  when 'fedex'
    number_details = fedex.track(number)
  when 'usps'
    number_details = usps.track(number)
  end

  return number_details
end

但是,如果我可以将carrier.slug放在ups.track(number)之类的行前面,我似乎可以重构一下。

有办法吗?

1 个答案:

答案 0 :(得分:0)

您可以使用send执行此操作但在此之前我们需要确保您拥有正确的运营商slug

if %w[ups fedex usps].include?(carrier.slug)
  send(carrier.slug).track(number)
end