Sha256: ceae6420fb5b56132e4235ff09fb6338828cbda34c0ccbdff0d803f43f17a72f

Contents?: true

Size: 1.45 KB

Versions: 67

Compression:

Stored size: 1.45 KB

Contents

require 'net/http'

class WebDAVFile
  def initialize(uri, http_options, headers)
    @uri = uri
    @headers = headers
    @offset = 0
    @connection = Net::HTTP.start(
      @uri.host,
      @uri.port,
      http_options
    )
  end

  def seek(offset, whence)
    case whence
    when IO::SEEK_SET
      @offset = offset
    when IO::SEEK_CUR
      @offset += offset
    else
      raise NotImplementedError
    end
  end

  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

  def size
    self.class.file_size(@connection, @uri, @headers)
  end

  def self.head_response(connection, uri, headers)
    request = Net::HTTP::Head.new(uri, headers)
    connection.request(request)
  end

  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

  def close
    @connection.finish
  end
end

Version data entries

67 entries across 67 versions & 1 rubygems

Version Path
manageiq-smartstate-0.11.0 lib/fs/MiqFS/modules/WebDAVFile.rb
manageiq-smartstate-0.10.1 lib/fs/MiqFS/modules/WebDAVFile.rb
manageiq-smartstate-0.10.0 lib/fs/MiqFS/modules/WebDAVFile.rb
manageiq-smartstate-0.9.0 lib/fs/MiqFS/modules/WebDAVFile.rb
manageiq-smartstate-0.8.1 lib/fs/MiqFS/modules/WebDAVFile.rb
manageiq-smartstate-0.8.0 lib/fs/MiqFS/modules/WebDAVFile.rb
manageiq-smartstate-0.7.0 lib/fs/MiqFS/modules/WebDAVFile.rb
manageiq-smartstate-0.6.2 lib/fs/MiqFS/modules/WebDAVFile.rb
manageiq-smartstate-0.5.10 lib/fs/MiqFS/modules/WebDAVFile.rb
manageiq-smartstate-0.3.10 lib/fs/MiqFS/modules/WebDAVFile.rb
manageiq-smartstate-0.6.1 lib/fs/MiqFS/modules/WebDAVFile.rb
manageiq-smartstate-0.3.9 lib/fs/MiqFS/modules/WebDAVFile.rb
manageiq-smartstate-0.6.0 lib/fs/MiqFS/modules/WebDAVFile.rb
manageiq-smartstate-0.5.9 lib/fs/MiqFS/modules/WebDAVFile.rb
manageiq-smartstate-0.5.8 lib/fs/MiqFS/modules/WebDAVFile.rb
manageiq-smartstate-0.3.8 lib/fs/MiqFS/modules/WebDAVFile.rb
manageiq-smartstate-0.5.7 lib/fs/MiqFS/modules/WebDAVFile.rb
manageiq-smartstate-0.3.7 lib/fs/MiqFS/modules/WebDAVFile.rb
manageiq-smartstate-0.5.6 lib/fs/MiqFS/modules/WebDAVFile.rb
manageiq-smartstate-0.3.6 lib/fs/MiqFS/modules/WebDAVFile.rb