railsdav 0.0.9 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: cb61b0fb86c9d65ce305542027125a26262ab593
4
- data.tar.gz: 27f5e8f4eef0c690dede3294ec36ef79edb6fb79
3
+ metadata.gz: d9214f02f0ddee87b623b108da44fa372465f909
4
+ data.tar.gz: c73f172965f4594434f2913ad64213042f9f54a3
5
5
  SHA512:
6
- metadata.gz: 537139d46c53214aa85a9332be4e39ea3cd34c8ee3f1d017b0798d291c7176eefd392111466a2bd89ca339e3859b8c2034d474fb03321624e6578a32ce30236c
7
- data.tar.gz: 3c737a0af8f936bab56082f5d63b751a8ffc84a76a87c7321aedd61cd54a6abf2be18b98a8dead8d229d3802545f65d65f0f06650aeac24bb8abb9274405f083
6
+ metadata.gz: d6fb995d3fb0853b5abfa31d81328e7d4075988c583658bc5d03474080672702dc6399581cad8e08ae27d9283106723716ac63624af83536678532372c1ff17d
7
+ data.tar.gz: 605323afd1e7029366a719e56ac2867bbecf9086d3b3babcd82c1324e4033095aeb9ac97b8d207af55180664048eadbda3c3cad4cda7dee52149e84bf48f84c3
data/README.md CHANGED
@@ -1,15 +1,15 @@
1
1
  # RailsDAV
2
2
 
3
- Make your Rails 4 resources accessible via WebDAV.
3
+ Make your Rails 3/4 resources accessible via WebDAV.
4
4
 
5
- This gem provides basic Rails 3 extensions for making your business
5
+ This gem provides basic Rails 3/4 extensions for making your business
6
6
  resources accessible via WebDAV. This gem does by no means by no means
7
7
  implement the full WebDAV semantics, but it suffices to access your
8
8
  app with client(-libs) such as Konqueror, cadaver, davfs2 or NetDrive.
9
9
 
10
10
  ## Compatibility
11
11
 
12
- Definitely works with Rails 3.0.9 and 3.2.13, but should also work
12
+ Definitely works with Rails 3.0.9, 3.2.13 and 4.2.4, but should also work
13
13
  with versions in between. This is due to some hacking done "under the
14
14
  hood" in the Rails routing implementation as well as a simple method
15
15
  override in ActionController.
@@ -23,7 +23,7 @@ Ensure that your project has the
23
23
  [Rails ActionPack XML Params Parser gem](https://github.com/rails/actionpack-xml_parser)
24
24
  installed, and then just add the following to your Gemfile:
25
25
 
26
- gem 'railsdav', :git => 'https://github.com/wvk/railsdav.git'
26
+ gem 'railsdav'
27
27
 
28
28
  and then run:
29
29
 
@@ -182,6 +182,8 @@ is_webdav_request? checks whether an Incoming request is issued by a WebDAV clie
182
182
 
183
183
  ## Changelog
184
184
 
185
+ * 0.1.0: Rails 4.2 compatibility
186
+ * 0.0.9: Add missing file to gemspec
185
187
  * 0.0.8: Merge Contributions from naserca, orospakr, and rutgerg
186
188
  * 0.0.7: Fix metadata class attribute inheritance problem
187
189
  * 0.0.6: Fix update_all for Rails 3.2
@@ -2,6 +2,12 @@
2
2
 
3
3
  require 'builder'
4
4
 
5
+ if Rails.version > '4.0'
6
+ require 'active_support'
7
+ require 'active_support/core_ext/hash/conversions'
8
+ end
9
+
10
+
5
11
  module Railsdav
6
12
  class Renderer
7
13
  autoload :ResourceDescriptor, 'railsdav/renderer/resource_descriptor'
@@ -29,9 +35,9 @@ module Railsdav
29
35
  def initialize(controller)
30
36
  @controller = controller
31
37
  @request = controller.request
32
- # @depth = (@request.headers['Depth'].to_i > 0) ? 1 : 0 # depth "infinite" is not yet supported
38
+ # @depth = (@request.headers['Depth'].to_i > 0) ? 1 : 0 # depth "infinite" is not yet supported
33
39
  @depth = (@request.headers['Depth'].to_i)
34
- Rails.logger.debug "Depth:\n#{@request.headers['Depth']}"
40
+ Rails.logger.debug "Depth:#{@request.headers['Depth']}"
35
41
  end
36
42
 
37
43
  # Render the requested response_type.
@@ -118,15 +124,22 @@ module Railsdav
118
124
 
119
125
  render do |dav|
120
126
  propstat_for response_collector.resource
121
- propstat_for response_collector.subresources if @depth > 0
127
+ propstat_for response_collector.subresources if @depth >= 0
122
128
  end
123
129
  end
124
130
 
125
131
  private
126
132
 
127
133
  def propstat_for(*resources)
128
- params = @controller.params
129
- params[:propfind] ||= {:prop => []}
134
+ params = @controller.params.dup
135
+ if params[:propfind]
136
+ # OK
137
+ elsif @controller.request.body.size > 0 # rails version without automatic XML body params parsing, so do it by hand here:
138
+ @controller.request.body.rewind
139
+ params.merge! Hash.from_xml(@controller.request.body.read)
140
+ else
141
+ params[:propfind] ||= {:prop => []}
142
+ end
130
143
 
131
144
  if params[:propfind].has_key? 'allprop'
132
145
  requested_properties = nil # fill it later, see below.
@@ -185,25 +198,27 @@ module Railsdav
185
198
 
186
199
  # all of our built-in properties are in the DAV namespace
187
200
  # anyway:
188
- gathered_namespaces = {"xmlns:lp0" => "DAV:"}
201
+ gathered_namespaces = {}
189
202
  @namespace_counter ||= 1
190
-
203
+
191
204
  namespaced_requested_properties = {}
192
205
 
206
+ Rails.logger.debug requested_properties.inspect
193
207
  requested_properties.each do |prop_name, opts|
194
208
  if prop_name.to_s.include?(":")
195
209
  # see first paragraph of big comment above
196
210
  Rails.logger.warn("DAV propfind prop request contains a namespace prefix; we do NOT handle these properly yet!")
197
211
  end
198
- if (!opts.nil?) && opts["xmlns"]
212
+
213
+ if (!opts.nil?) and opts["xmlns"]
199
214
  gathered_namespaces["xmlns:lp#{@namespace_counter}"] = opts["xmlns"]
200
215
  opts.delete("xmlns")
201
216
  namespaced_requested_properties["lp#{@namespace_counter}:#{prop_name}"] = opts
202
217
  @namespace_counter +=1
203
218
  else
204
219
  # just copy it through; however, we'll assume it's in the
205
- # DAV namespace (which we hardcoded to the `lp0` prefix).
206
- namespaced_requested_properties["lp0:#{prop_name}"] = opts
220
+ # DAV namespace (which we hardcoded to the `D` prefix).
221
+ namespaced_requested_properties["D:#{prop_name}"] = opts
207
222
  end
208
223
  end
209
224
 
@@ -4,10 +4,12 @@
4
4
  # userinfo is not a standard webdav verb, bur davfs2 uses it
5
5
  # and we want to be prepared to ignore it gracefully (e.g.
6
6
  # by sending a :not_implemented response)
7
- verbs = %w(propfind proppatch mkcol copy move lock unlock userinfo)
8
- verbs.each do |method|
9
- ActionDispatch::Request::HTTP_METHODS << method.upcase
10
- ActionDispatch::Request::HTTP_METHOD_LOOKUP[method.upcase] = method.to_sym
7
+ if Rails.version < '3.2'
8
+ verbs = %w(propfind proppatch mkcol copy move lock unlock userinfo)
9
+ verbs.each do |method|
10
+ ActionDispatch::Request::HTTP_METHODS << method.upcase
11
+ ActionDispatch::Request::HTTP_METHOD_LOOKUP[method.upcase] = method.to_sym
12
+ end
11
13
  end
12
14
 
13
15
  # Extend routing s.t. webdav_resource and webdav_resources can be used,
@@ -50,11 +52,11 @@ class ActionDispatch::Routing::Mapper
50
52
  end
51
53
  end
52
54
 
53
- def resource_scope?
54
- [:webdav_resource, :webdav_resources, :resource, :resources].include?(@scope[:scope_level])
55
- end
56
-
57
- if Rails.version < '3.2'
55
+ if Rails.version >= '4.2'
56
+ def resource_scope? #:nodoc:
57
+ @scope.resource_scope?
58
+ end
59
+ elsif Rails.version < '3.2'
58
60
  # Rails versions after 3.1 expect two arguments here, the first being :resource, :resources,
59
61
  # :webdav_resource etc.so we don't need the inferring logic anymore in newer versions.
60
62
  def resource_scope(resource)
@@ -74,14 +76,24 @@ class ActionDispatch::Routing::Mapper
74
76
  end
75
77
  end
76
78
  end
79
+ else
80
+ def resource_scope?
81
+ [:webdav_resource, :webdav_resources, :resource, :resources].include?(@scope[:scope_level])
82
+ end
77
83
  end
78
84
 
79
85
  def dav_options_response(*allowed_http_verbs)
86
+ Rails.logger.info "responding to OPTIONS with Allow: #{allowed_http_verbs.flatten.map{|s| s.to_s.upcase}.join(' ')}"
80
87
  proc { [200, {'Allow' => allowed_http_verbs.flatten.map{|s| s.to_s.upcase}.join(' '), 'DAV' => '1'}, [' ']] }
81
88
  end
82
89
 
83
90
  def dav_match(*args)
84
91
  get *args
92
+ if args.last.is_a? Hash
93
+ # prevents `Invalid route name, already in use`
94
+ args.last.delete(:as)
95
+ args.last.delete('as')
96
+ end
85
97
  dav_propfind *args
86
98
  end
87
99
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: railsdav
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.9
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Willem van Kerkhof
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-09-11 00:00:00.000000000 Z
11
+ date: 2016-11-24 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Provides basic Rails 3/Rails 4 extensions for making your business resources
14
14
  accessible via WebDAV. This gem does by no means by no means implement the full