Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
104 lines (84 sloc) 1.967 kb
require 'uri'
require 'httpclient'
class DAV
attr_reader :headers
def initialize(uri = nil)
@uri = nil
@headers = {}
open(uri) if uri
proxy = ENV['HTTP_PROXY'] || ENV['http_proxy'] || nil
@client = HTTPClient.new(proxy)
end
def open(uri)
@uri = if uri.is_a?(URI)
uri
else
URI.parse(uri)
end
end
def set_basic_auth(user_id, passwd)
@client.set_basic_auth(@uri, user_id, passwd)
end
# TODO: propget/propset support
def propfind(target)
target_uri = @uri + target
res = @client.propfind(target_uri)
res.body.content
end
def get(target, local = nil)
local ||= target
target_uri = @uri + target
if FileTest.exist?(local)
raise RuntimeError.new("File #{ local } exists.")
end
f = File.open(local, "wb")
res = @client.get(target_uri, nil, @headers) do |data|
f << data
end
f.close
STDOUT.puts("#{ res.header['content-length'][0] } bytes saved to file #{ target }.")
end
def debug_dev=(dev)
@client.debug_dev = dev
end
def get_content(target)
target_uri = @uri + target
@client.get_content(target_uri, nil, @headers)
end
def put_content(target, content)
target_uri = @uri + target
res = @client.put(target_uri, content, @headers)
if res.status < 200 or res.status >= 300
raise "HTTP PUT failed: #{res.inspect}"
end
end
class Mock
attr_reader :headers
def initialize(uri = nil)
@uri = nil
@headers = {}
open(uri) if uri
@cache = {}
end
def open(uri)
@uri = uri.is_a?(URI) ? uri : URI.parse(uri)
end
def set_basic_auth(user_id, passwd)
# ignore
end
def propfind(target)
# not found
nil
end
def get(target, local = nil)
# ignore
end
def get_content(target)
@cache[target]
end
def put_content(target, content)
@cache[target] = content
nil
end
end
end
Jump to Line
Something went wrong with that request. Please try again.