Class: WebDAVFile
- Inherits:
-
Object
- Object
- WebDAVFile
- Defined in:
- lib/fs/MiqFS/modules/WebDAVFile.rb
Class Method Summary collapse
Instance Method Summary collapse
- #close ⇒ Object
-
#initialize(uri, http_options, headers) ⇒ WebDAVFile
constructor
A new instance of WebDAVFile.
- #read(length) ⇒ Object
- #seek(offset, whence) ⇒ Object
- #size ⇒ Object
Constructor Details
#initialize(uri, http_options, headers) ⇒ WebDAVFile
Returns a new instance of WebDAVFile.
4 5 6 7 8 9 10 11 12 13 |
# File 'lib/fs/MiqFS/modules/WebDAVFile.rb', line 4 def initialize(uri, , headers) @uri = uri @headers = headers @offset = 0 @connection = Net::HTTP.start( @uri.host, @uri.port, ) end |
Class Method Details
.file_size(connection, uri, headers) ⇒ Object
58 59 60 61 62 63 |
# File 'lib/fs/MiqFS/modules/WebDAVFile.rb', line 58 def self.file_size(connection, uri, headers) response = head_response(connection, uri, headers) raise Errno::ENOENT unless response.kind_of?(Net::HTTPOK) raise Errno::EINVAL if response["content-length"].nil? response["content-length"].to_i end |
.head_response(connection, uri, headers) ⇒ Object
53 54 55 56 |
# File 'lib/fs/MiqFS/modules/WebDAVFile.rb', line 53 def self.head_response(connection, uri, headers) request = Net::HTTP::Head.new(uri, headers) connection.request(request) end |
Instance Method Details
#close ⇒ Object
65 66 67 |
# File 'lib/fs/MiqFS/modules/WebDAVFile.rb', line 65 def close @connection.finish end |
#read(length) ⇒ Object
26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
# File 'lib/fs/MiqFS/modules/WebDAVFile.rb', line 26 def read(length) @next_offset = @offset + length request = Net::HTTP::Get.new(@uri, @headers) request.set_range(@offset, @next_offset) response = @connection.request(request) case response when Net::HTTPOK # In this case (server not supporting ranges) the communication # is highly inefficient. data = response.body[@offset..@next_offset] when Net::HTTPPartialContent data = response.body else raise Errno::ENOENT end @offset = @next_offset data end |
#seek(offset, whence) ⇒ Object
15 16 17 18 19 20 21 22 23 24 |
# File 'lib/fs/MiqFS/modules/WebDAVFile.rb', line 15 def seek(offset, whence) case whence when IO::SEEK_SET @offset = offset when IO::SEEK_CUR @offset += offset else raise NotImplementedError end end |
#size ⇒ Object
49 50 51 |
# File 'lib/fs/MiqFS/modules/WebDAVFile.rb', line 49 def size self.class.file_size(@connection, @uri, @headers) end |