davclient 0.0.5 → 0.0.6
Sign up to get free protection for your applications and to get access to all the features.
- data/LICENSE +53 -0
- data/Manifest +31 -0
- data/README.rdoc +52 -13
- data/Rakefile +94 -0
- data/davclient.gemspec +32 -0
- data/examples/remove_ds_store.rb +15 -0
- data/examples/simple_find.rb +10 -0
- data/lib/davclient/hpricot_extensions.rb +0 -2
- data/lib/davclient/simple.rb +44 -0
- data/lib/davclient.rb +61 -14
- data/tests/dav.rb +12 -0
- data/tests/tc_dav-cat.rb +34 -0
- data/tests/tc_dav-cd.rb +45 -0
- data/tests/tc_dav-cp.rb +51 -0
- data/tests/tc_dav-delete.rb +37 -0
- data/tests/tc_dav-get.rb +63 -0
- data/tests/tc_dav-ls.rb +45 -0
- data/tests/tc_dav-mkcol.rb +64 -0
- data/tests/tc_dav-mv.rb +65 -0
- data/tests/tc_dav-propfind.rb +40 -0
- data/tests/tc_dav-put.rb +132 -0
- data/tests/tc_webdav_basic.rb +102 -0
- data/tests/tc_webdav_publish.rb +63 -0
- data/tests/test_helper.rb +2 -0
- data/tests/ts_davclient.rb +11 -0
- metadata +53 -36
data/LICENSE
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
DavClient (davclient and the dav utility) is copyrighted free software by Thomas Flemming
|
2
|
+
<thomas dot flemming at usit dot uio do no> and contributors. You can redistribute it
|
3
|
+
and/or modify it under either the terms of the GPL2 or the conditions below:
|
4
|
+
|
5
|
+
1. You may make and give away verbatim copies of the source form of the
|
6
|
+
software without restriction, provided that you duplicate all of the
|
7
|
+
original copyright notices and associated disclaimers.
|
8
|
+
|
9
|
+
2. You may modify your copy of the software in any way, provided that
|
10
|
+
you do at least ONE of the following:
|
11
|
+
|
12
|
+
a) place your modifications in the Public Domain or otherwise make them
|
13
|
+
Freely Available, such as by posting said modifications to Usenet or an
|
14
|
+
equivalent medium, or by allowing the author to include your
|
15
|
+
modifications in the software.
|
16
|
+
|
17
|
+
b) use the modified software only within your corporation or
|
18
|
+
organization.
|
19
|
+
|
20
|
+
c) rename any non-standard executables so the names do not conflict with
|
21
|
+
standard executables, which must also be provided.
|
22
|
+
|
23
|
+
d) make other distribution arrangements with the author.
|
24
|
+
|
25
|
+
3. You may distribute the software in object code or executable
|
26
|
+
form, provided that you do at least ONE of the following:
|
27
|
+
|
28
|
+
a) distribute the executables and library files of the software,
|
29
|
+
together with instructions (in the manual page or equivalent) on where
|
30
|
+
to get the original distribution.
|
31
|
+
|
32
|
+
b) accompany the distribution with the machine-readable source of the
|
33
|
+
software.
|
34
|
+
|
35
|
+
c) give non-standard executables non-standard names, with
|
36
|
+
instructions on where to get the original software distribution.
|
37
|
+
|
38
|
+
d) make other distribution arrangements with the author.
|
39
|
+
|
40
|
+
4. You may modify and include the part of the software into any other
|
41
|
+
software (possibly commercial). But some files in the distribution
|
42
|
+
are not written by the author, so that they are not under this terms.
|
43
|
+
|
44
|
+
5. The scripts and library files supplied as input to or produced as
|
45
|
+
output from the software do not automatically fall under the
|
46
|
+
copyright of the software, but belong to whomever generated them,
|
47
|
+
and may be sold commercially, and may be aggregated with this
|
48
|
+
software.
|
49
|
+
|
50
|
+
6. THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
|
51
|
+
IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
|
52
|
+
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
53
|
+
PURPOSE.
|
data/Manifest
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
LICENSE
|
2
|
+
Manifest
|
3
|
+
README.rdoc
|
4
|
+
Rakefile
|
5
|
+
bin/dav
|
6
|
+
davclient.gemspec
|
7
|
+
examples/remove_ds_store.rb
|
8
|
+
examples/simple_find.rb
|
9
|
+
lib/davclient.rb
|
10
|
+
lib/davclient/curl_commands.rb
|
11
|
+
lib/davclient/dav-ls.rb
|
12
|
+
lib/davclient/dav-propfind.rb
|
13
|
+
lib/davclient/dav-put.rb
|
14
|
+
lib/davclient/davcli.rb
|
15
|
+
lib/davclient/hpricot_extensions.rb
|
16
|
+
lib/davclient/simple.rb
|
17
|
+
tests/dav.rb
|
18
|
+
tests/tc_dav-cat.rb
|
19
|
+
tests/tc_dav-cd.rb
|
20
|
+
tests/tc_dav-cp.rb
|
21
|
+
tests/tc_dav-delete.rb
|
22
|
+
tests/tc_dav-get.rb
|
23
|
+
tests/tc_dav-ls.rb
|
24
|
+
tests/tc_dav-mkcol.rb
|
25
|
+
tests/tc_dav-mv.rb
|
26
|
+
tests/tc_dav-propfind.rb
|
27
|
+
tests/tc_dav-put.rb
|
28
|
+
tests/tc_webdav_basic.rb
|
29
|
+
tests/tc_webdav_publish.rb
|
30
|
+
tests/test_helper.rb
|
31
|
+
tests/ts_davclient.rb
|
data/README.rdoc
CHANGED
@@ -5,9 +5,7 @@
|
|
5
5
|
|
6
6
|
== DESCRIPTION:
|
7
7
|
|
8
|
-
A scriptable WebDAV command line client for
|
9
|
-
|
10
|
-
WebDAV command line client written in Ruby for managing content on
|
8
|
+
A scriptable WebDAV command line client for Ruby for managing content on
|
11
9
|
webservers that support the WebDAV extensions.
|
12
10
|
|
13
11
|
This is still very much work in progress. Especially the command line interface
|
@@ -43,30 +41,71 @@ on how to add username etc. to the '~/.netrc' file.
|
|
43
41
|
|
44
42
|
== COMMAND LINE SYNOPSIS:
|
45
43
|
|
46
|
-
|
44
|
+
bash $ dav cd http://test.webdav.org/dav/
|
47
45
|
http://test.webdav.org/dav/
|
48
|
-
|
46
|
+
bash $ dav ls
|
49
47
|
images/
|
50
48
|
index.html
|
51
|
-
|
49
|
+
bash $ dav pwd
|
52
50
|
http://test.webdav.org/dav/
|
51
|
+
bash $ get ./index.html
|
52
|
+
bash $ dav --help
|
53
|
+
usage: dav COMMAND [ARGS]
|
54
|
+
|
55
|
+
Available dav commands:
|
56
|
+
ls List files on webdav server
|
57
|
+
pwd Print current working url
|
58
|
+
cd Change current working url
|
59
|
+
cp Copy resource
|
60
|
+
mv Move resource
|
61
|
+
rm Remove resource
|
62
|
+
cat Print content of resource
|
63
|
+
mkdir Create remote collection (directory) (mkcol alias)
|
64
|
+
get Download resource
|
65
|
+
put Upload local file
|
66
|
+
propfind Print webdav properties for url
|
67
|
+
mkcol Make collection
|
68
|
+
options Display webservers WebDAV options
|
69
|
+
edit Edit contents of remote file with editor
|
70
|
+
|
71
|
+
== USE WITH IRB:
|
72
|
+
|
73
|
+
IRB can also be used as an interactive dav console:
|
74
|
+
|
75
|
+
bash $ irb -rubygems -rdavclient/simple
|
76
|
+
>> cd "https://webdav.org/projects/"
|
77
|
+
=> "https://webdav.org/projects/"
|
78
|
+
>> pwd
|
79
|
+
=> "https://webdav.org/projects/"
|
80
|
+
>> content = get "index.html"
|
81
|
+
=> "index.html"
|
82
|
+
>> ls
|
83
|
+
index.html
|
84
|
+
>> cd ".."
|
85
|
+
=> "https://webdav.org/"
|
86
|
+
|
53
87
|
|
54
88
|
== INSTALL:
|
55
89
|
|
90
|
+
If you can type the command 'curl' in your terminal window, everything is ok.
|
91
|
+
|
92
|
+
DavClient uses the command line utility cURL to interact with servers.
|
93
|
+
Curl comes preinstalled on Mac OS X. It can also be downloaded from
|
94
|
+
http://curl.haxx.se/ . If you are using debian or ubuntu, it
|
95
|
+
can be installed with apt-get:
|
96
|
+
|
97
|
+
sudo apt-get install curl
|
98
|
+
|
99
|
+
Then install DavClient:
|
100
|
+
|
56
101
|
[sudo] gem install davclient
|
57
102
|
|
58
103
|
or
|
59
104
|
|
60
105
|
git clone git://github.com/thomasfl/davclient.git
|
61
106
|
cd davclient
|
62
|
-
|
63
|
-
sudo gem install davclient-x.x.x.gem
|
107
|
+
sudo rake install
|
64
108
|
|
65
|
-
Curl comes preinstalled on Mac OS X. It can be downloaded from
|
66
|
-
http://curl.haxx.se/ . If you are using debian or ubuntu, it
|
67
|
-
can be installed by:
|
68
|
-
|
69
|
-
sudo apt-get install curl
|
70
109
|
|
71
110
|
== Background:
|
72
111
|
|
data/Rakefile
ADDED
@@ -0,0 +1,94 @@
|
|
1
|
+
# Rakefile for DavClient -*- ruby -*-
|
2
|
+
# Usage:
|
3
|
+
#
|
4
|
+
# rake package Create gem
|
5
|
+
# rake rdoc Create doc
|
6
|
+
# rake upload-docs Upload docs to rubyforge
|
7
|
+
#
|
8
|
+
# rake install Create and install gem
|
9
|
+
# rake manifest Create manifest
|
10
|
+
# rake release Release to rubyforge
|
11
|
+
|
12
|
+
require 'rake/rdoctask'
|
13
|
+
require 'rake/gempackagetask'
|
14
|
+
|
15
|
+
GEM_VERSION = "0.0.6"
|
16
|
+
|
17
|
+
spec = Gem::Specification.new do |s|
|
18
|
+
s.name = "davclient"
|
19
|
+
s.version = GEM_VERSION
|
20
|
+
s.author = "Thomas Flemming"
|
21
|
+
s.email = "thomasfl@usit.uio.no"
|
22
|
+
s.homepage = "http://folk.uio.no/thomasfl"
|
23
|
+
s.platform = Gem::Platform::RUBY
|
24
|
+
s.summary = "Command line WebDAV client and Ruby library."
|
25
|
+
s.description = "WebDAV command line client written in Ruby for managing " +
|
26
|
+
"content on webservers that support the WebDAV extensions."
|
27
|
+
s.requirements << "cURL command line tool available from http://curl.haxx.se/"
|
28
|
+
s.requirements << "Servername, username and password must be supplied in ~/.netrc file."
|
29
|
+
s.files = ["lib/davclient.rb","lib/davclient/hpricot_extensions.rb",
|
30
|
+
"lib/davclient/curl_commands.rb", "bin/dav", "lib/davclient/davcli.rb",
|
31
|
+
"lib/davclient/dav-put.rb", "lib/davclient/dav-ls.rb",
|
32
|
+
"lib/davclient/dav-propfind.rb"]
|
33
|
+
s.executables = ["dav"]
|
34
|
+
s.require_path = "lib"
|
35
|
+
s.rubyforge_project = "davclient"
|
36
|
+
# s.test_files = FileList["{test}/**/*test.rb"].to_a
|
37
|
+
s.has_rdoc = true
|
38
|
+
s.extra_rdoc_files = ["README.rdoc"]
|
39
|
+
s.add_dependency("hpricot", ">= 0.6")
|
40
|
+
s.add_dependency("ZenTest", ">= 3.5") # For tests
|
41
|
+
end
|
42
|
+
|
43
|
+
Rake::GemPackageTask.new(spec) do |pkg|
|
44
|
+
pkg.need_zip = false
|
45
|
+
pkg.need_tar = false
|
46
|
+
end
|
47
|
+
|
48
|
+
|
49
|
+
html_dir = 'doc/html'
|
50
|
+
library = 'Ruby DavClient'
|
51
|
+
Rake::RDocTask.new('rdoc') do |t|
|
52
|
+
t.rdoc_files.include('README.rdoc',
|
53
|
+
'lib/davclient.rb',
|
54
|
+
'lib/davclient/hpricot_extensions.rb',
|
55
|
+
'lib/davclient/simple.rb')
|
56
|
+
t.main = 'README.rdoc'
|
57
|
+
t.title = "#{library} API documentation"
|
58
|
+
t.rdoc_dir = html_dir
|
59
|
+
end
|
60
|
+
|
61
|
+
rubyforge_user = 'thomasfl'
|
62
|
+
rubyforge_project = 'davclient'
|
63
|
+
rubyforge_path = "/var/www/gforge-projects/#{rubyforge_project}/"
|
64
|
+
desc 'Upload documentation to RubyForge.'
|
65
|
+
task 'upload-docs' => ['rdoc'] do
|
66
|
+
sh "scp -r #{html_dir}/* " +
|
67
|
+
"#{rubyforge_user}@rubyforge.org:#{rubyforge_path}"
|
68
|
+
end
|
69
|
+
|
70
|
+
|
71
|
+
website_dir = 'site'
|
72
|
+
desc 'Update project website to RubyForge.'
|
73
|
+
task 'upload-site' do
|
74
|
+
sh "scp -r #{website_dir}/* " +
|
75
|
+
"#{rubyforge_user}@rubyforge.org:/var/www/gforge-projects/project/"
|
76
|
+
end
|
77
|
+
|
78
|
+
desc 'Update API docs and project website to RubyForge.'
|
79
|
+
task 'publish' => ['upload-docs', 'upload-site']
|
80
|
+
|
81
|
+
|
82
|
+
|
83
|
+
require 'echoe'
|
84
|
+
|
85
|
+
Echoe.new('davclient', GEM_VERSION) do |p|
|
86
|
+
p.description = "Command line WebDAV client and Ruby library."
|
87
|
+
p.url = "http://davclient.rubyforge.org/davclient"
|
88
|
+
p.author = "Thomas Flemming"
|
89
|
+
p.email = "thomasfl@usit.uio.no"
|
90
|
+
p.ignore_pattern = ["svn_user.yml", "svn_project.rake"]
|
91
|
+
p.project = "davclient"
|
92
|
+
end
|
93
|
+
|
94
|
+
Dir["#{File.dirname(__FILE__)}/tasks/*.rake"].sort.each { |ext| load ext }
|
data/davclient.gemspec
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
Gem::Specification.new do |s|
|
4
|
+
s.name = %q{davclient}
|
5
|
+
s.version = "0.0.6"
|
6
|
+
|
7
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
|
8
|
+
s.authors = ["Thomas Flemming"]
|
9
|
+
s.date = %q{2009-09-22}
|
10
|
+
s.default_executable = %q{dav}
|
11
|
+
s.description = %q{Command line WebDAV client and Ruby library.}
|
12
|
+
s.email = %q{thomasfl@usit.uio.no}
|
13
|
+
s.executables = ["dav"]
|
14
|
+
s.extra_rdoc_files = ["LICENSE", "README.rdoc", "bin/dav", "lib/davclient.rb", "lib/davclient/curl_commands.rb", "lib/davclient/dav-ls.rb", "lib/davclient/dav-propfind.rb", "lib/davclient/dav-put.rb", "lib/davclient/davcli.rb", "lib/davclient/hpricot_extensions.rb", "lib/davclient/simple.rb"]
|
15
|
+
s.files = ["LICENSE", "Manifest", "README.rdoc", "Rakefile", "bin/dav", "davclient.gemspec", "examples/remove_ds_store.rb", "examples/simple_find.rb", "lib/davclient.rb", "lib/davclient/curl_commands.rb", "lib/davclient/dav-ls.rb", "lib/davclient/dav-propfind.rb", "lib/davclient/dav-put.rb", "lib/davclient/davcli.rb", "lib/davclient/hpricot_extensions.rb", "lib/davclient/simple.rb", "tests/dav.rb", "tests/tc_dav-cat.rb", "tests/tc_dav-cd.rb", "tests/tc_dav-cp.rb", "tests/tc_dav-delete.rb", "tests/tc_dav-get.rb", "tests/tc_dav-ls.rb", "tests/tc_dav-mkcol.rb", "tests/tc_dav-mv.rb", "tests/tc_dav-propfind.rb", "tests/tc_dav-put.rb", "tests/tc_webdav_basic.rb", "tests/tc_webdav_publish.rb", "tests/test_helper.rb", "tests/ts_davclient.rb"]
|
16
|
+
s.homepage = %q{http://davclient.rubyforge.org/davclient}
|
17
|
+
s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Davclient", "--main", "README.rdoc"]
|
18
|
+
s.require_paths = ["lib"]
|
19
|
+
s.rubyforge_project = %q{davclient}
|
20
|
+
s.rubygems_version = %q{1.3.5}
|
21
|
+
s.summary = %q{Command line WebDAV client and Ruby library.}
|
22
|
+
|
23
|
+
if s.respond_to? :specification_version then
|
24
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
25
|
+
s.specification_version = 3
|
26
|
+
|
27
|
+
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
28
|
+
else
|
29
|
+
end
|
30
|
+
else
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
require 'rubygems'
|
3
|
+
require 'davclient'
|
4
|
+
|
5
|
+
# Remove all resources (files) named ".DS_Store"
|
6
|
+
|
7
|
+
url = ARGV[0]
|
8
|
+
|
9
|
+
WebDAV.find(url, :recursive => true ) do | item |
|
10
|
+
puts item.href if(item.isCollection?)
|
11
|
+
if(item.basename == ".DS_Store")
|
12
|
+
puts "Removing: " + item.href
|
13
|
+
WebDAV.delete(item.href)
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
# A minimalistic API for interacting with WebDAV servers.
|
2
|
+
#
|
3
|
+
# If commands needs to Simple WebDAV API for use in scripts where namespacing is not necessary.
|
4
|
+
|
5
|
+
# :stopdoc:
|
6
|
+
|
7
|
+
require 'davclient'
|
8
|
+
require 'davclient/dav-ls'
|
9
|
+
|
10
|
+
# :startdoc:
|
11
|
+
|
12
|
+
# Change working directory.
|
13
|
+
#
|
14
|
+
# Examples:
|
15
|
+
#
|
16
|
+
# require 'davclient/simple'
|
17
|
+
#
|
18
|
+
# cd("https://example.webdav.org/collection/")
|
19
|
+
# content = get("index.html")
|
20
|
+
# print content
|
21
|
+
def cd(args)
|
22
|
+
WebDAV.cd(args)
|
23
|
+
end
|
24
|
+
|
25
|
+
def pwd
|
26
|
+
WebDAV.CWURL
|
27
|
+
end
|
28
|
+
|
29
|
+
def find(*args, &block)
|
30
|
+
WebDAV.find(*args, &block)
|
31
|
+
end
|
32
|
+
|
33
|
+
def ls(*args)
|
34
|
+
if(args == [])
|
35
|
+
LsCLI.ls([WebDAV.CWURL])
|
36
|
+
else
|
37
|
+
LsCLI.ls(*args)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def get(args)
|
42
|
+
WebDAV.get(args)
|
43
|
+
end
|
44
|
+
|
data/lib/davclient.rb
CHANGED
@@ -15,7 +15,16 @@ require 'davclient/curl_commands'
|
|
15
15
|
|
16
16
|
# :startdoc:
|
17
17
|
|
18
|
-
# WebDAV client
|
18
|
+
# Main WebDAV client. Current working URL is stored in a tempfile named /tmp/cwurl.pid, where pid is the parent process.
|
19
|
+
# Username an password is stored in the ~/.netrc file. This means there is no need to set up any sessions or connections.
|
20
|
+
#
|
21
|
+
# If a change directory command is executed with a relative path, like for instance WebDAV.cd("../collection"), it will
|
22
|
+
# raise an exception if current working url has not been set. First a change directory command is executed it should
|
23
|
+
# use an absolute URL, like for instance WebDAV.cd("https://www.webdav.org/collection/").
|
24
|
+
#
|
25
|
+
# If using an URL with a server name not found in the ~/.netrc file, instructions for adding
|
26
|
+
# the necessary servername, username and password will be printed to stdout.
|
27
|
+
#
|
19
28
|
module WebDAV
|
20
29
|
|
21
30
|
# :stopdoc:
|
@@ -28,9 +37,9 @@ module WebDAV
|
|
28
37
|
VERSION
|
29
38
|
end
|
30
39
|
|
31
|
-
# Returns current working url.
|
40
|
+
# Returns current working url.
|
32
41
|
def self.CWURL
|
33
|
-
return $CWURL if($CWURL)
|
42
|
+
return $CWURL if($CWURL)
|
34
43
|
cwurl = nil
|
35
44
|
filename = cwurl_filename
|
36
45
|
if(File.exists?(filename))
|
@@ -54,14 +63,17 @@ module WebDAV
|
|
54
63
|
# url = url + "/" if(not(url =~ /\/$/))
|
55
64
|
|
56
65
|
if(not(url =~ /^http.?:\/\//))then
|
57
|
-
|
58
|
-
exit
|
66
|
+
raise "illegal url: " + url
|
59
67
|
end
|
60
68
|
end
|
61
69
|
return url
|
62
70
|
end
|
63
71
|
|
64
|
-
#
|
72
|
+
# Boolean function that returns true if url is a collection
|
73
|
+
#
|
74
|
+
# Example:
|
75
|
+
#
|
76
|
+
# WebDAV.isCollection("../test.html") => false
|
65
77
|
def self.isCollection?(url)
|
66
78
|
url = absoluteUrl(url)
|
67
79
|
url = url + "/" if(not(url =~ /\/$/))
|
@@ -74,6 +86,9 @@ module WebDAV
|
|
74
86
|
end
|
75
87
|
|
76
88
|
# Change current working url. Takes relative pathnames.
|
89
|
+
# First time this method is called, an absolute URL
|
90
|
+
# must be used. Raises exception if servername is not
|
91
|
+
# found in ~/.netrc file.
|
77
92
|
#
|
78
93
|
# Examples:
|
79
94
|
#
|
@@ -91,10 +106,12 @@ module WebDAV
|
|
91
106
|
end
|
92
107
|
end
|
93
108
|
|
94
|
-
# Sets current working url
|
109
|
+
# Sets current working url.
|
110
|
+
#
|
111
|
+
# Current working url is stored in aa tempfile with parent process pid
|
95
112
|
# as part of the filename.
|
96
113
|
def self.CWURL=(url)
|
97
|
-
$CWURL = url
|
114
|
+
$CWURL = url
|
98
115
|
File.open(cwurl_filename, 'w') {|f| f.write(url) }
|
99
116
|
end
|
100
117
|
|
@@ -118,8 +135,9 @@ module WebDAV
|
|
118
135
|
# Example:
|
119
136
|
#
|
120
137
|
# WebDAV.proppatch("https://dav.webdav.org/folder","<contentLastModified>2007-12-12 12:00:00 GMT</contentLastModified>
|
121
|
-
def self.proppatch(
|
122
|
-
|
138
|
+
def self.proppatch(url, property)
|
139
|
+
url = absoluteUrl(url)
|
140
|
+
curl_command = CURL_PROPPATCH + " \""+url+"\""
|
123
141
|
curl_command = curl_command.gsub("<!--property-and-value-->",property)
|
124
142
|
response = exec_curl(curl_command)
|
125
143
|
if(not(response =~ /200 OK/)) then
|
@@ -131,7 +149,8 @@ module WebDAV
|
|
131
149
|
# Get WebDAV properties
|
132
150
|
#
|
133
151
|
# Examples:
|
134
|
-
#
|
152
|
+
#
|
153
|
+
# item = propfind(url) - Returns an Hpricot::Elem object
|
135
154
|
#
|
136
155
|
# xml = propfind(url, :xml => true) - Returns xml for debugging.
|
137
156
|
def self.propfind(*args)
|
@@ -181,9 +200,37 @@ module WebDAV
|
|
181
200
|
# puts folder.href
|
182
201
|
# end
|
183
202
|
#
|
203
|
+
# If no url is specified, current working url is used.
|
204
|
+
#
|
205
|
+
# cd("https://webdav.org")
|
206
|
+
# find() do |item|
|
207
|
+
# print item.title
|
208
|
+
# end
|
184
209
|
def self.find(*args, &block)
|
185
|
-
|
186
|
-
|
210
|
+
|
211
|
+
if(args.size == 0)
|
212
|
+
href = self.CWURL
|
213
|
+
elsif(args.size == 1)
|
214
|
+
if(args[0].class == String)
|
215
|
+
href = args[0]
|
216
|
+
else
|
217
|
+
options = args[0]
|
218
|
+
end
|
219
|
+
elsif(args.size == 2)
|
220
|
+
href = args[0]
|
221
|
+
options = args[1]
|
222
|
+
else
|
223
|
+
raise "Illegal number of arguments."
|
224
|
+
end
|
225
|
+
|
226
|
+
if(href == nil )
|
227
|
+
if(WebDAV.CWURL == nil)
|
228
|
+
raise "no current working url set"
|
229
|
+
else
|
230
|
+
href = WebDAV.CWURL
|
231
|
+
end
|
232
|
+
end
|
233
|
+
|
187
234
|
type = nil
|
188
235
|
recursive = false
|
189
236
|
if(options)then
|
@@ -219,7 +266,7 @@ module WebDAV
|
|
219
266
|
|
220
267
|
else
|
221
268
|
# Filter result set
|
222
|
-
if((type == "collection" or type == "folder") and item.
|
269
|
+
if((type == "collection" or type == "folder" or type == "directory") and item.isCollection? )then
|
223
270
|
items_filtered.push(item)
|
224
271
|
if(block) then
|
225
272
|
yield item
|
data/tests/dav.rb
ADDED
data/tests/tc_dav-cat.rb
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
require 'test_helper'
|
3
|
+
require 'rubygems'
|
4
|
+
require 'davclient'
|
5
|
+
require 'davclient'
|
6
|
+
require 'davclient/davcli'
|
7
|
+
require 'test/unit'
|
8
|
+
require 'test/zentest_assertions'
|
9
|
+
|
10
|
+
|
11
|
+
class TestDavCat < Test::Unit::TestCase
|
12
|
+
|
13
|
+
def cat(*args)
|
14
|
+
out, err = util_capture do
|
15
|
+
DavCLI.cat(*args)
|
16
|
+
end
|
17
|
+
return [out.string, err.string]
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_basic_cat
|
21
|
+
url = "https://vortex-dav.uio.no/brukere/thomasfl/testfile.html"
|
22
|
+
content = WebDAV.get(url)
|
23
|
+
|
24
|
+
out, err = cat([url])
|
25
|
+
assert_equal content , out
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_relative_urls
|
29
|
+
WebDAV.cd("https://vortex-dav.uio.no/brukere/thomasfl/")
|
30
|
+
content = WebDAV.get("testfile.html")
|
31
|
+
assert content
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
data/tests/tc_dav-cd.rb
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
require 'rubygems'
|
3
|
+
require 'test/unit'
|
4
|
+
require 'test_helper'
|
5
|
+
require 'davclient'
|
6
|
+
require 'davclient/davcli'
|
7
|
+
require 'test/zentest_assertions'
|
8
|
+
|
9
|
+
class TestWDavCd < Test::Unit::TestCase
|
10
|
+
|
11
|
+
def cd(*args)
|
12
|
+
out, err = util_capture do
|
13
|
+
DavCLI.cd(*args)
|
14
|
+
end
|
15
|
+
return ["", ""]
|
16
|
+
return [out.string, err.string]
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_basic_cd
|
20
|
+
url = "https://vortex-dav.uio.no/prosjekter/it-avisa/nyheter/2006/"
|
21
|
+
out, err = cd([url])
|
22
|
+
assert_equal url, WebDAV.CWURL
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_pathname
|
26
|
+
url = "https://vortex-dav.uio.no/prosjekter/it-avisa/nyheter/2006/"
|
27
|
+
out, err = cd([url])
|
28
|
+
assert_equal url, WebDAV.CWURL
|
29
|
+
out, err = cd([".."])
|
30
|
+
assert_equal url = "https://vortex-dav.uio.no/prosjekter/it-avisa/nyheter/", WebDAV.CWURL
|
31
|
+
|
32
|
+
out, err = WebDAV.cd("../../../brukere/thomasfl/")
|
33
|
+
assert_equal "https://vortex-dav.uio.no/brukere/thomasfl/", WebDAV.CWURL
|
34
|
+
|
35
|
+
exception = false
|
36
|
+
begin
|
37
|
+
out, err = WebDAV.cd(["../../../../../../"])
|
38
|
+
rescue Exception
|
39
|
+
exception = true
|
40
|
+
end
|
41
|
+
assert exception, "Should have raised an exception"
|
42
|
+
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
data/tests/tc_dav-cp.rb
ADDED
@@ -0,0 +1,51 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
require 'test_helper'
|
3
|
+
require 'rubygems'
|
4
|
+
require 'davclient'
|
5
|
+
require 'davclient/davcli'
|
6
|
+
require 'test/unit'
|
7
|
+
require 'test/zentest_assertions'
|
8
|
+
|
9
|
+
class TestCP < Test::Unit::TestCase
|
10
|
+
|
11
|
+
def cp(*args)
|
12
|
+
out, err = util_capture do
|
13
|
+
DavCLI.cp(*args)
|
14
|
+
end
|
15
|
+
return [out.string, err.string]
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_cp
|
19
|
+
$DEBUG = false
|
20
|
+
src = "https://vortex-dav.uio.no/brukere/thomasfl/testfile.html"
|
21
|
+
dest = "https://vortex-dav.uio.no/brukere/thomasfl/testfile_copy.html"
|
22
|
+
WebDAV.delete(dest)
|
23
|
+
assert !WebDAV.exists?(dest)
|
24
|
+
|
25
|
+
WebDAV.cp(src,dest)
|
26
|
+
assert WebDAV.exists?(dest)
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_propfind_command_line
|
30
|
+
src = "https://vortex-dav.uio.no/brukere/thomasfl/testfile.html"
|
31
|
+
dest = "https://vortex-dav.uio.no/brukere/thomasfl/testfile_copy.html"
|
32
|
+
WebDAV.delete(dest)
|
33
|
+
assert !WebDAV.exists?(dest)
|
34
|
+
|
35
|
+
out, err = cp([src,dest])
|
36
|
+
assert WebDAV.exists?(dest)
|
37
|
+
|
38
|
+
# Relative url
|
39
|
+
WebDAV.delete(dest)
|
40
|
+
assert !WebDAV.exists?(dest)
|
41
|
+
|
42
|
+
|
43
|
+
WebDAV.cd("https://vortex-dav.uio.no/brukere/thomasfl/")
|
44
|
+
dest = "testfile_copy.html"
|
45
|
+
|
46
|
+
out, err = cp([src,dest])
|
47
|
+
assert WebDAV.exists?(dest)
|
48
|
+
end
|
49
|
+
|
50
|
+
|
51
|
+
end
|