net_dav 0.4.1 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.4.1
1
+ 0.5.0
data/lib/net/dav.rb CHANGED
@@ -362,9 +362,35 @@ module Net #:nodoc:
362
362
  @handler.pass = pass
363
363
  end
364
364
 
365
- def propfind(path) #:nodoc:
365
+ # Perform a PROPFIND request
366
+ #
367
+ # Example:
368
+ #
369
+ # Basic propfind:
370
+ #
371
+ # properties = propfind('/path/')
372
+ #
373
+ # Get ACL for resource:
374
+ #
375
+ # properties = propfind('/path/', :acl)
376
+ #
377
+ # Custom propfind:
378
+ #
379
+ # properties = propfind('/path/', '<?xml version="1.0" encoding="utf-8"?>...')
380
+ #
381
+ # See http://webdav.org/specs/rfc3744.html#rfc.section.5.9 for more on
382
+ # how to retrieve access control properties.
383
+ def propfind(path,*options)
366
384
  headers = {'Depth' => '1'}
367
- body = '<?xml version="1.0" encoding="utf-8"?><DAV:propfind xmlns:DAV="DAV:"><DAV:allprop/></DAV:propfind>'
385
+ if(options[0] == :acl)
386
+ body = '<?xml version="1.0" encoding="utf-8" ?><D:propfind xmlns:D="DAV:"><D:prop><D:owner/>' +
387
+ '<D:supported-privilege-set/><D:current-user-privilege-set/><D:acl/></D:prop></D:propfind>'
388
+ else
389
+ body = options[0]
390
+ end
391
+ if(!body)
392
+ body = '<?xml version="1.0" encoding="utf-8"?><DAV:propfind xmlns:DAV="DAV:"><DAV:allprop/></DAV:propfind>'
393
+ end
368
394
  res = @handler.request(:propfind, path, body, headers)
369
395
  Nokogiri::XML.parse(res.body)
370
396
  end
@@ -399,14 +425,14 @@ module Net #:nodoc:
399
425
  namespaces = {'x' => "DAV:"}
400
426
  begin
401
427
  doc = propfind(path)
402
- rescue Net::HTTPServerException => e
428
+ rescue Net::ProtocolError => e
403
429
  msg = e.to_s + ": " + path.to_s
404
430
  if(options[:suppress_errors])then
405
431
  # Ignore dir if propfind returns an error
406
432
  warn("Warning: " + msg)
407
433
  return nil
408
434
  else
409
- raise Net::HTTPServerException.new(msg, nil)
435
+ raise e.class.new(msg, nil)
410
436
  end
411
437
  end
412
438
  path.sub!(/\/$/, '')
@@ -548,6 +574,23 @@ module Net #:nodoc:
548
574
  Nokogiri::XML.parse(res.body)
549
575
  end
550
576
 
577
+ # Returns true if resource exists on server.
578
+ #
579
+ # Example:
580
+ # dav.exists?('https://www.example.com/collection/') => true
581
+ # dav.exists?('/collection/') => true
582
+ def exists?(path)
583
+ path = @uri.merge(path).path
584
+ headers = {'Depth' => '1'}
585
+ body = '<?xml version="1.0" encoding="utf-8"?><DAV:propfind xmlns:DAV="DAV:"><DAV:allprop/></DAV:propfind>'
586
+ begin
587
+ res = @handler.request(:propfind, path, body, headers)
588
+ rescue
589
+ return false
590
+ end
591
+ return (res.is_a? Net::HTTPSuccess)
592
+ end
593
+
551
594
  # Makes a new directory (collection)
552
595
  def mkdir(path)
553
596
  path = @uri.merge(path).path
data/net_dav.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{net_dav}
8
- s.version = "0.4.1"
8
+ s.version = "0.5.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Miron Cuperman", "Thomas Flemming"]
12
- s.date = %q{2009-12-16}
12
+ s.date = %q{2010-03-12}
13
13
  s.default_executable = %q{dav}
14
14
  s.description = %q{WebDAV client library in the style of Net::HTTP, using Net::HTTP and libcurl, if installed}
15
15
  s.email = %q{c1.github@niftybox.net}
@@ -29,6 +29,7 @@ Gem::Specification.new do |s|
29
29
  "lib/net/dav.rb",
30
30
  "lib/net/dav/item.rb",
31
31
  "net_dav.gemspec",
32
+ "net_dav.gif",
32
33
  "script/multi-test",
33
34
  "spec/fixtures/file.html",
34
35
  "spec/integration/net_dav_spec.rb",
data/net_dav.gif ADDED
Binary file
@@ -22,6 +22,22 @@ describe "Net::Dav" do
22
22
  @props.should match(/200 OK/)
23
23
  end
24
24
 
25
+ it "should raise if finding non-existent path" do
26
+ dav = Net::DAV.new("http://localhost:10080/")
27
+ lambda do
28
+ dav.find("/") do |item|
29
+ end
30
+ end.should_not raise_error
31
+ end
32
+
33
+ it "should raise if finding non-existent path" do
34
+ dav = Net::DAV.new("http://localhost:10080/")
35
+ lambda do
36
+ dav.find("/asdf") do |item|
37
+ end
38
+ end.should raise_error Net::HTTPServerException
39
+ end
40
+
25
41
  it "should write files to webdav server" do
26
42
  dav = Net::DAV.new("http://localhost:10080/")
27
43
  @props = find_props_or_error(dav, "/new_file.html")
@@ -78,6 +94,18 @@ describe "Net::Dav" do
78
94
  @props.should match(/200 OK/i)
79
95
  end
80
96
 
97
+ it "should retrieve acl" do
98
+ dav = Net::DAV.new("http://localhost:10080/")
99
+ @props = dav.propfind("/", :acl).to_s
100
+ @props.should match(/200 OK/i)
101
+ end
102
+
103
+ it "should detect if resource or collection exists on server" do
104
+ dav = Net::DAV.new("http://localhost:10080/")
105
+ dav.exists?('/file.html').should == true
106
+ dav.exists?('/totally_unknown_file.html').should == false
107
+ end
108
+
81
109
  # proppatch seems to work, but our simple webdav server don't update properties
82
110
  # it "should alter properties on resources on webdav server" do
83
111
  # dav = Net::DAV.new("http://localhost:10080/")
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: net_dav
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Miron Cuperman
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2009-12-18 00:00:00 +01:00
13
+ date: 2010-03-12 00:00:00 -08:00
14
14
  default_executable: dav
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -63,6 +63,7 @@ files:
63
63
  - lib/net/dav.rb
64
64
  - lib/net/dav/item.rb
65
65
  - net_dav.gemspec
66
+ - net_dav.gif
66
67
  - script/multi-test
67
68
  - spec/fixtures/file.html
68
69
  - spec/integration/net_dav_spec.rb
@@ -99,6 +100,6 @@ signing_key:
99
100
  specification_version: 3
100
101
  summary: WebDAV client library in the style of Net::HTTP
101
102
  test_files:
102
- - spec/integration/net_dav_spec.rb
103
- - spec/integration/webdav_server.rb
104
103
  - spec/spec_helper.rb
104
+ - spec/integration/webdav_server.rb
105
+ - spec/integration/net_dav_spec.rb