# return 4 urls, with and without trailing slash, with and without www
# useful for matching urls passed as params into some function,
# "does this url exist?"... need to make sure you check permutations
def url_permutations(url)
url, params = url.split("?")
# without_trailing_slash, with www
a = url.gsub(/\/$/, "").gsub(/http(s)?:\/\/([^\/]+)/) do |match|
protocol = "http#{$1.to_s}"
domain = $2
domain = "www.#{domain}" if domain.split(".").length < 3 # www.google.com == 3, google.com == 2
"#{protocol}://#{domain}"
end
# with_trailing_slash, with www
b = "#{a}/"
# without_trailing_slash, without www
c = a.gsub(/http(s)?:\/\/www\./, "http#{$1.to_s}://")
# with_trailing_slash, without www
d = "#{c}/"

[a, b, c, d].map { |url| "#{url}?#{params}"}
end

puts url_permutations("http://google.com/search?q=http://google.com").inspect
#=> [
"http://www.google.com/search?q=http://google.com",
"http://www.google.com/search/?q=http://google.com",
"http://google.com/search?q=http://google.com",
"http://google.com/search/?q=http://google.com"
]

Read more: http://feeds.dzone.com/~r/dzone/snippets/~3/jlZUpcGxN-0/12035