1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
require "roda"
class Roda
module RodaPlugins
# Adds routing methods for WebDAV/CardDAV HTTP verbs.
#
# Only PROPFIND and REPORT are implemented since this is a read-only
# CardDAV server. PROPFIND handles discovery and property retrieval,
# REPORT handles addressbook-query and addressbook-multiget requests.
#
# Other WebDAV verbs (PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK)
# would be needed for write support.
module DavVerbs
module RequestMethods
%w[propfind report].each do |verb|
class_eval(<<-END, __FILE__, __LINE__ + 1)
def #{verb}(*args, &block)
_verb(args, &block) if env["REQUEST_METHOD"] == "#{verb.upcase}"
end
END
end
end
end
register_plugin(:dav_verbs, DavVerbs)
end
end