Ruby:通过解析规范化URL

Ruby: Normalize URL by parsing

我的目标是转换其中任何一个:

至:

我做了以下事情:

def parse_url(url)

    uri = URI.parse(url)

    return uri.host if uri.scheme
    return uri.to_s if uri.to_s[0, 4] == 'www.'

    "www.#{url}"
end

但我觉得我可以使用更标准的东西,因为它看起来不太优雅。

始终确保代码首先执行您想要的操作。如果稍后出现代码味道,请考虑使用不同的方法来做您想做的事情,然后选择最容易理解的方法。

简洁的代码不一定是最优雅的,通常只是很难理解,当其他人必须找出问题所在并且不理解导致无法破译的辉煌时,这会导致以后引入错误逻辑。

您的代码不符合您的要求:

parse_url('http://google.com') # => "google.com"

这是我要写的快速而肮脏的第一遍:

require 'uri'

def parse_url(url)

    uri = URI.parse(url)

    # if it's not a generic URI...
    if uri.scheme

      # peek at the host
      url_host = uri.host

      # if it starts with "www." then return it as is...
      if url_host[0,4] == 'www.'
        return url_host

      # else add the prefix and return it
      else
        return 'www.' + uri.host
      end

    # if it's a generic...
    else
      if url[0,4] == 'www.'
        return url
      else
        return 'www.' + url
      end
    end

end

parse_url('http://www.google.com') # => "www.google.com"
parse_url('www.google.com') # => "www.google.com"
parse_url('http://google.com') # => "www.google.com"
parse_url('google.com') # => "www.google.com"

我确定我可以想出更紧凑的代码,但我担心的是同行,或者我未来的自己,在凌晨调试,试图找出问题所在。为了对那个人友善,我宁愿保持简单。