module URI
Not quite open-uri, but similar. Provides read and write methods for the resource represented by the URI
. Currently supports reads for URI::HTTP
and writes for URI::SFTP. Also provides convenience methods for downloads and uploads.
Public Class Methods
Downloads the resource to the target.
The target may be a file name (string or task), in which case the file is created from the resource. The target may also be any object that responds to write
, e.g. File, StringIO, Pipe.
Use the progress bar when running in verbose mode.
# File lib/contrib/uri_ext.rb, line 57 def download(uri, target, options = nil) uri = URI.parse(uri.to_s) unless URI === uri uri.download(target, options) end
Reads from the resource behind this URI
. The first form returns the content of the resource, the second form yields to the block with each chunk of content (usually more than one).
For example:
File.open "image.jpg", "w" do |file| URI.read("http://example.com/image.jpg") { |chunk| file.write chunk } end
Shorter version:
File.open("image.jpg", "w") { |file| file.write URI.read("http://example.com/image.jpg") }
Supported options:
-
:modified – Only download if file modified since this timestamp. Returns nil if not modified.
-
:progress – Show the progress bar while reading.
# File lib/contrib/uri_ext.rb, line 43 def read(uri, options = nil, &block) uri = URI.parse(uri.to_s) unless URI === uri uri.read(options, &block) end
Writes to the resource behind the URI
. The first form writes the content from a string or an object that responds to read
and optionally size
. The second form writes the content by yielding to the block. Each yield should return up to the specified number of bytes, the last yield returns nil.
For example:
File.open "killer-app.jar", "rb" do |file| write("sftp://localhost/jars/killer-app.jar") { |chunk| file.read(chunk) } end
Or:
write "sftp://localhost/jars/killer-app.jar", File.read("killer-app.jar")
Supported options:
-
:progress – Show the progress bar while reading.
# File lib/contrib/uri_ext.rb, line 79 def write(uri, *args, &block) uri = URI.parse(uri.to_s) unless URI === uri uri.write(*args, &block) end