dav4rack 0.2.4 → 0.2.5

Sign up to get free protection for your applications and to get access to all the features.
data/README.rdoc CHANGED
@@ -306,6 +306,8 @@ A big thanks to everyone contributing to help make this project better.
306
306
  * {antiloopgmbh}[http://github.com/antiloopgmbh]
307
307
  * {krug}[http://github.com/krug]
308
308
  * {teefax}[http://github.com/teefax]
309
+ * {buffym}[https://github.com/buffym]
310
+ * {jbangert}[https://github.com/jbangert]
309
311
 
310
312
  == License
311
313
 
@@ -37,7 +37,7 @@ module DAV4Rack
37
37
  # Return response to OPTIONS
38
38
  def options
39
39
  response["Allow"] = 'OPTIONS,HEAD,GET,PUT,POST,DELETE,PROPFIND,PROPPATCH,MKCOL,COPY,MOVE,LOCK,UNLOCK'
40
- response["Dav"] = "2"
40
+ response["Dav"] = "1, 2"
41
41
  response["Ms-Author-Via"] = "DAV"
42
42
  OK
43
43
  end
@@ -67,14 +67,11 @@ module DAV4Rack
67
67
  # Return response to PUT
68
68
  def put
69
69
  raise Forbidden if resource.collection?
70
+ raise Conflict unless resource.parent_exists? && resource.parent.collection?
70
71
  resource.lock_check
71
72
  status = resource.put(request, response)
72
- multistatus do |xml|
73
- xml.response do
74
- xml.href "#{scheme}://#{host}:#{port}#{url_escape(resource.public_path)}"
75
- xml.status "#{http_version} #{status.status_line}"
76
- end
77
- end
73
+ response['Content-Location'] = "#{scheme}://#{host}:#{port}#{resource.public_path}" if status == Created
74
+ status
78
75
  end
79
76
 
80
77
  # Return response to POST
data/lib/dav4rack/file.rb CHANGED
@@ -27,7 +27,7 @@ module DAV4Rack
27
27
  end
28
28
 
29
29
  def not_found
30
- body = "File not found: #{Utils.unescape(env["PATH_INFO"])}\n"
30
+ body = "File not found: #{Rack::Utils.unescape(env["PATH_INFO"])}\n"
31
31
  [404, {"Content-Type" => "text/plain",
32
32
  "Content-Length" => body.size.to_s,
33
33
  "X-Cascade" => "pass"},
@@ -80,7 +80,7 @@ module DAV4Rack
80
80
  # Save the content of the request.body.
81
81
  def put(request, response)
82
82
  write(request.body)
83
- OK
83
+ Created
84
84
  end
85
85
 
86
86
  # HTTP POST request.
@@ -5,10 +5,14 @@ module DAV4Rack
5
5
  # to log messages from the library.
6
6
  class Logger
7
7
  class << self
8
- # args:: Arguments for Logger -> [path, level] (level is optional)
8
+ # args:: Arguments for Logger -> [path, level] (level is optional) or a Logger instance
9
9
  # Set the path to the log file.
10
10
  def set(*args)
11
- @@logger = ::Logger.new(args.first, 'weekly')
11
+ if(args.first.is_a?(Logger))
12
+ @@logger = args.first
13
+ else
14
+ @@logger = ::Logger.new(args.first, 'weekly')
15
+ end
12
16
  if(args.size > 1)
13
17
  @@logger.level = args[1]
14
18
  end
@@ -21,4 +25,4 @@ module DAV4Rack
21
25
  end
22
26
  end
23
27
  end
24
- end
28
+ end
@@ -63,7 +63,12 @@ module DAV4Rack
63
63
  # NOTE: Customized Resources should not use initialize for setup. Instead
64
64
  # use the #setup method
65
65
  def initialize(public_path, path, request, response, options)
66
- @skip_alias = [:authenticate, :authentication_error_msg, :authentication_realm, :path, :options, :public_path, :request, :response, :user, :user=]
66
+ @skip_alias = [
67
+ :authenticate, :authentication_error_msg,
68
+ :authentication_realm, :path, :options,
69
+ :public_path, :request, :response, :user,
70
+ :user=, :setup
71
+ ]
67
72
  @public_path = public_path.dup
68
73
  @path = path.dup
69
74
  @request = request
@@ -1,3 +1,17 @@
1
1
  module DAV4Rack
2
- VERSION = '0.2.4'
2
+ class Version
3
+
4
+ attr_reader :major, :minor, :tiny
5
+
6
+ def initialize(version)
7
+ version = version.split('.')
8
+ @major, @minor, @tiny = [version[0].to_i, version[1].to_i, version[2].to_i]
9
+ end
10
+
11
+ def to_s
12
+ "#{@major}.#{@minor}.#{@tiny}"
13
+ end
14
+ end
15
+
16
+ VERSION = Version.new('0.2.5')
3
17
  end
data/spec/handler_spec.rb CHANGED
@@ -97,8 +97,7 @@ describe DAV4Rack::Handler do
97
97
  end
98
98
 
99
99
  it 'should return headers' do
100
- put('/test.html', :input => '<html/>')
101
- multi_status_ok.should eq true
100
+ put('/test.html', :input => '<html/>').should be_created
102
101
  head('/test.html').should be_ok
103
102
 
104
103
  response.headers['etag'].should_not be_nil
@@ -115,38 +114,32 @@ describe DAV4Rack::Handler do
115
114
  end
116
115
 
117
116
  it 'should create a resource and allow its retrieval' do
118
- put('/test', :input => 'body')
119
- multi_status_ok.should eq true
117
+ put('/test', :input => 'body').should be_created
120
118
  get('/test').should be_ok
121
119
  response.body.should == 'body'
122
120
  end
123
-
121
+
124
122
  it 'should return an absolute url after a put request' do
125
- put('/test', :input => 'body')
126
- multi_status_ok.should eq true
127
- multistatus_response('/D:href').first.text.should =~ /http:\/\/localhost(:\d+)?\/test/
123
+ put('/test', :input => 'body').should be_created
124
+ response['content-location'].should =~ /http:\/\/localhost(:\d+)?\/test/
128
125
  end
129
126
 
130
127
  it 'should create and find a url with escaped characters' do
131
- put(url_escape('/a b'), :input => 'body')
132
- multi_status_ok.should eq true
128
+ put(url_escape('/a b'), :input => 'body').should be_created
133
129
  get(url_escape('/a b')).should be_ok
134
130
  response.body.should == 'body'
135
131
  end
136
132
 
137
133
  it 'should delete a single resource' do
138
- put('/test', :input => 'body')
139
- multi_status_ok.should eq true
134
+ put('/test', :input => 'body').should be_created
140
135
  delete('/test').should be_no_content
141
136
  end
142
137
 
143
138
  it 'should delete recursively' do
144
139
  mkcol('/folder')
145
140
  multi_status_created.should eq true
146
- put('/folder/a', :input => 'body')
147
- multi_status_ok.should eq true
148
- put('/folder/b', :input => 'body')
149
- multi_status_ok.should eq true
141
+ put('/folder/a', :input => 'body').should be_created
142
+ put('/folder/b', :input => 'body').should be_created
150
143
 
151
144
  delete('/folder').should be_no_content
152
145
  get('/folder').should be_not_found
@@ -155,28 +148,24 @@ describe DAV4Rack::Handler do
155
148
  end
156
149
 
157
150
  it 'should not allow copy to another domain' do
158
- put('/test', :input => 'body')
159
- multi_status_ok.should eq true
151
+ put('/test', :input => 'body').should be_created
160
152
  copy('http://localhost/', 'HTTP_DESTINATION' => 'http://another/').should be_bad_gateway
161
153
  end
162
154
 
163
155
  it 'should not allow copy to the same resource' do
164
- put('/test', :input => 'body')
165
- multi_status_ok.should eq true
156
+ put('/test', :input => 'body').should be_created
166
157
  copy('/test', 'HTTP_DESTINATION' => '/test').should be_forbidden
167
158
  end
168
159
 
169
160
  it 'should copy a single resource' do
170
- put('/test', :input => 'body')
171
- multi_status_ok.should eq true
161
+ put('/test', :input => 'body').should be_created
172
162
  copy('/test', 'HTTP_DESTINATION' => '/copy')
173
163
  multi_status_no_content.should eq true
174
164
  get('/copy').body.should == 'body'
175
165
  end
176
166
 
177
167
  it 'should copy a resource with escaped characters' do
178
- put(url_escape('/a b'), :input => 'body')
179
- multi_status_ok.should eq true
168
+ put(url_escape('/a b'), :input => 'body').should be_created
180
169
  copy(url_escape('/a b'), 'HTTP_DESTINATION' => url_escape('/a c'))
181
170
  multi_status_no_content.should eq true
182
171
  get(url_escape('/a c')).should be_ok
@@ -184,10 +173,8 @@ describe DAV4Rack::Handler do
184
173
  end
185
174
 
186
175
  it 'should deny a copy without overwrite' do
187
- put('/test', :input => 'body')
188
- multi_status_ok.should eq true
189
- put('/copy', :input => 'copy')
190
- multi_status_ok.should eq true
176
+ put('/test', :input => 'body').should be_created
177
+ put('/copy', :input => 'copy').should be_created
191
178
  copy('/test', 'HTTP_DESTINATION' => '/copy', 'HTTP_OVERWRITE' => 'F')
192
179
 
193
180
  multistatus_response('/D:href').first.text.should =~ /http:\/\/localhost(:\d+)?\/test/
@@ -197,10 +184,8 @@ describe DAV4Rack::Handler do
197
184
  end
198
185
 
199
186
  it 'should allow a copy with overwrite' do
200
- put('/test', :input => 'body')
201
- multi_status_ok.should eq true
202
- put('/copy', :input => 'copy')
203
- multi_status_ok.should eq true
187
+ put('/test', :input => 'body').should be_created
188
+ put('/copy', :input => 'copy').should be_created
204
189
  copy('/test', 'HTTP_DESTINATION' => '/copy', 'HTTP_OVERWRITE' => 'T')
205
190
  multi_status_no_content.should eq true
206
191
  get('/copy').body.should == 'body'
@@ -218,10 +203,8 @@ describe DAV4Rack::Handler do
218
203
  it 'should copy a collection resursively' do
219
204
  mkcol('/folder')
220
205
  multi_status_created.should eq true
221
- put('/folder/a', :input => 'A')
222
- multi_status_ok.should eq true
223
- put('/folder/b', :input => 'B')
224
- multi_status_ok.should eq true
206
+ put('/folder/a', :input => 'A').should be_created
207
+ put('/folder/b', :input => 'B').should be_created
225
208
 
226
209
  copy('/folder', 'HTTP_DESTINATION' => '/copy')
227
210
  multi_status_ok.should eq true
@@ -234,10 +217,8 @@ describe DAV4Rack::Handler do
234
217
  it 'should move a collection recursively' do
235
218
  mkcol('/folder')
236
219
  multi_status_created.should eq true
237
- put('/folder/a', :input => 'A')
238
- multi_status_ok.should eq true
239
- put('/folder/b', :input => 'B')
240
- multi_status_ok.should eq true
220
+ put('/folder/a', :input => 'A').should be_created
221
+ put('/folder/b', :input => 'B').should be_created
241
222
 
242
223
  move('/folder', 'HTTP_DESTINATION' => '/move')
243
224
  multi_status_ok.should eq true
@@ -285,8 +266,7 @@ describe DAV4Rack::Handler do
285
266
  end
286
267
 
287
268
  it 'should find named properties' do
288
- put('/test.html', :input => '<html/>')
289
- multi_status_ok.should eq true
269
+ put('/test.html', :input => '<html/>').should be_created
290
270
  propfind('/test.html', :input => propfind_xml(:getcontenttype, :getcontentlength))
291
271
 
292
272
  multistatus_response('/D:propstat/D:prop/D:getcontenttype').first.text.should == 'text/html'
@@ -294,8 +274,7 @@ describe DAV4Rack::Handler do
294
274
  end
295
275
 
296
276
  it 'should lock a resource' do
297
- put('/test', :input => 'body')
298
- multi_status_ok.should eq true
277
+ put('/test', :input => 'body').should be_created
299
278
 
300
279
  xml = render(:lockinfo) do |xml|
301
280
  xml.lockscope { xml.exclusive }
@@ -329,9 +308,8 @@ describe DAV4Rack::Handler do
329
308
 
330
309
  it "should return correct urls" do
331
310
  # FIXME: a put to '/test' works, too -- should it?
332
- put('/webdav/test', :input => 'body')
333
- multi_status_ok.should eq true
334
- multistatus_response('/D:href').first.text.should =~ /http:\/\/localhost(:\d+)?\/webdav\/test/
311
+ put('/webdav/test', :input => 'body').should be_created
312
+ response.headers['content-location'].should =~ /http:\/\/localhost(:\d+)?\/webdav\/test/
335
313
  end
336
314
  end
337
315
  end
metadata CHANGED
@@ -1,8 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dav4rack
3
3
  version: !ruby/object:Gem::Version
4
+ hash: 29
4
5
  prerelease:
5
- version: 0.2.4
6
+ segments:
7
+ - 0
8
+ - 2
9
+ - 5
10
+ version: 0.2.5
6
11
  platform: ruby
7
12
  authors:
8
13
  - Chris Roberts
@@ -10,7 +15,7 @@ autorequire:
10
15
  bindir: bin
11
16
  cert_chain: []
12
17
 
13
- date: 2011-05-14 00:00:00 -07:00
18
+ date: 2011-08-22 00:00:00 -07:00
14
19
  default_executable:
15
20
  dependencies:
16
21
  - !ruby/object:Gem::Dependency
@@ -21,6 +26,11 @@ dependencies:
21
26
  requirements:
22
27
  - - ~>
23
28
  - !ruby/object:Gem::Version
29
+ hash: 3
30
+ segments:
31
+ - 1
32
+ - 4
33
+ - 2
24
34
  version: 1.4.2
25
35
  type: :runtime
26
36
  version_requirements: *id001
@@ -32,6 +42,11 @@ dependencies:
32
42
  requirements:
33
43
  - - ~>
34
44
  - !ruby/object:Gem::Version
45
+ hash: 9
46
+ segments:
47
+ - 2
48
+ - 1
49
+ - 1
35
50
  version: 2.1.1
36
51
  type: :runtime
37
52
  version_requirements: *id002
@@ -43,6 +58,11 @@ dependencies:
43
58
  requirements:
44
59
  - - ">="
45
60
  - !ruby/object:Gem::Version
61
+ hash: 19
62
+ segments:
63
+ - 1
64
+ - 1
65
+ - 0
46
66
  version: 1.1.0
47
67
  type: :runtime
48
68
  version_requirements: *id003
@@ -89,12 +109,18 @@ required_ruby_version: !ruby/object:Gem::Requirement
89
109
  requirements:
90
110
  - - ">="
91
111
  - !ruby/object:Gem::Version
112
+ hash: 3
113
+ segments:
114
+ - 0
92
115
  version: "0"
93
116
  required_rubygems_version: !ruby/object:Gem::Requirement
94
117
  none: false
95
118
  requirements:
96
119
  - - ">="
97
120
  - !ruby/object:Gem::Version
121
+ hash: 3
122
+ segments:
123
+ - 0
98
124
  version: "0"
99
125
  requirements: []
100
126