123456789_123456789_123456789_123456789_123456789_

Module: URI

Relationships & Source Files
Namespace Children
Classes:
Defined in: lib/open-uri.rb,
lib/open-uri.rb

Class Method Summary

Class Method Details

.open(name, *rest, &block)

Allows the opening of various resources including URIs. Example:

require "open-uri"
URI.open("http://example.com") { |f| f.read }

If the first argument responds to the open method, open is called on it with the rest of the arguments.

If the first argument is a string that begins with (protocol)://, it is parsed by URI.parse. If the parsed object responds to the open method, open is called on it with the rest of the arguments.

Otherwise, Kernel.open is called.

OpenURI::OpenRead#open provides URI::HTTP#open, URI::HTTPS#open and URI::FTP#open, Kernel.open.

We can accept URIs and strings that begin with http://, https:// and ftp://. In these cases, the opened file object is extended by ::OpenURI::Meta.

[ GitHub ]

  
# File 'lib/open-uri.rb', line 26

def self.open(name, *rest, &block)
  if name.respond_to?(:open)
    name.open(*rest, &block)
  elsif name.respond_to?(:to_str) &&
        %r{\A[A-Za-z][A-Za-z0-9+\-\.]*://} =~ name &&
        (uri = URI.parse(name)).respond_to?(:open)
    uri.open(*rest, &block)
  else
    super
  end
end