Search code examples
rubyclassmodulenamespacesnet-http

Ruby using namespace/module


For example:

require 'net/http'
uri = URI('http://example.com/some_path?query=string')

Net::HTTP.start(uri.host, uri.port) do |http|
  request = Net::HTTP::Get.new uri

  response = http.request request # Net::HTTPResponse object
end

What is the correct/rubist way to get rid of Net::HTTP ? i.e. HTTP::Get.new() or just Get.new()


Solution

  • If you want to shorten these, you can just import that namespace:

    Net::HTTP.start(...)
    
    include Net
    # HTTP.start(...)
    

    Be careful when you import aggressively as it might cause conflict within your class if you get carried away.

    An alternative is to create aliases:

    HTTP = Net::HTTP
    Get = Net::HTTP::Get
    

    The "correct" way is to just spell it out and not get too flustered by that. A typical Ruby program will bury this sort of low-level behavior beneath an abstraction layer so it's rarely a big deal.