sabredav_client 0.2.0 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.gitignore +3 -3
- data/.rspec +1 -1
- data/CHANGELOG.rdoc +8 -8
- data/Gemfile +3 -3
- data/Gemfile.lock +39 -38
- data/README.md +49 -49
- data/Rakefile +5 -5
- data/lib/sabredav_client.rb +10 -10
- data/lib/sabredav_client/calendar.rb +171 -171
- data/lib/sabredav_client/client.rb +57 -57
- data/lib/sabredav_client/errors/errors.rb +41 -41
- data/lib/sabredav_client/events.rb +106 -105
- data/lib/sabredav_client/net.rb +15 -15
- data/lib/sabredav_client/principal.rb +51 -51
- data/lib/sabredav_client/request.rb +97 -97
- data/lib/sabredav_client/version.rb +3 -3
- data/lib/sabredav_client/xml_request_builder.rb +7 -7
- data/lib/sabredav_client/xml_request_builder/base.rb +17 -17
- data/lib/sabredav_client/xml_request_builder/mkcalendar.rb +25 -25
- data/lib/sabredav_client/xml_request_builder/mkcol_principal.rb +28 -28
- data/lib/sabredav_client/xml_request_builder/post_sharing.rb +41 -41
- data/lib/sabredav_client/xml_request_builder/propfind_calendar.rb +41 -41
- data/lib/sabredav_client/xml_request_builder/propfind_invite.rb +19 -19
- data/lib/sabredav_client/xml_request_builder/propfind_owner.rb +19 -19
- data/lib/sabredav_client/xml_request_builder/proppatch_calendar.rb +25 -25
- data/lib/sabredav_client/xml_request_builder/proppatch_events_owner.rb +23 -23
- data/lib/sabredav_client/xml_request_builder/proppatch_principal.rb +25 -25
- data/lib/sabredav_client/xml_request_builder/report_event_changes.rb +22 -22
- data/lib/sabredav_client/xml_request_builder/report_vevent.rb +30 -30
- data/lib/sabredav_client/xml_request_builder/report_vtodo.rb +20 -20
- data/sabredav_client.gemspec +31 -31
- data/spec/fixtures/calendar_fetch_changes.xml +26 -26
- data/spec/fixtures/calendar_info.xml +14 -14
- data/spec/fixtures/calendar_sharees.xml +35 -35
- data/spec/fixtures/calendar_sharees_without_common_name.xml +26 -26
- data/spec/fixtures/event.ics +23 -23
- data/spec/fixtures/events_find_multiple.xml +51 -51
- data/spec/fixtures/events_owner.xml +12 -12
- data/spec/fixtures/xml_request_builder/mkcalendar.xml +9 -9
- data/spec/fixtures/xml_request_builder/mkcol_principal.xml +12 -12
- data/spec/fixtures/xml_request_builder/post_sharing.xml +18 -18
- data/spec/fixtures/xml_request_builder/propfind_calendar/all_properties.xml +8 -8
- data/spec/fixtures/xml_request_builder/propfind_invite.xml +6 -6
- data/spec/fixtures/xml_request_builder/propfind_owner.xml +6 -6
- data/spec/fixtures/xml_request_builder/proppatch_calendar.xml +9 -9
- data/spec/fixtures/xml_request_builder/proppatch_events_owner.xml +8 -8
- data/spec/fixtures/xml_request_builder/proppatch_principal.xml +9 -9
- data/spec/fixtures/xml_request_builder/report_event_changes.xml +8 -8
- data/spec/sabredav_client/calendar_spec.rb +142 -142
- data/spec/sabredav_client/client_spec.rb +41 -41
- data/spec/sabredav_client/events_spec.rb +119 -119
- data/spec/sabredav_client/principal_spec.rb +51 -51
- data/spec/sabredav_client/request_spec.rb +55 -55
- data/spec/sabredav_client/xml_request_builder_specs/base_spec.rb +30 -30
- data/spec/sabredav_client/xml_request_builder_specs/mkcalendar_spec.rb +13 -13
- data/spec/sabredav_client/xml_request_builder_specs/mkcol_principal_spec.rb +13 -13
- data/spec/sabredav_client/xml_request_builder_specs/post_sharing_spec.rb +15 -15
- data/spec/sabredav_client/xml_request_builder_specs/propfind_calendar_spec.rb +24 -24
- data/spec/sabredav_client/xml_request_builder_specs/propfind_invite_spec.rb +14 -14
- data/spec/sabredav_client/xml_request_builder_specs/propfind_owner_spec.rb +14 -14
- data/spec/sabredav_client/xml_request_builder_specs/proppatch_calendar.rb +15 -15
- data/spec/sabredav_client/xml_request_builder_specs/proppatch_events_owner_spec.rb +14 -14
- data/spec/sabredav_client/xml_request_builder_specs/proppatch_principal_spec.rb +24 -24
- data/spec/sabredav_client/xml_request_builder_specs/report_event_changes_spec.rb +15 -15
- data/spec/spec.opts +4 -4
- data/spec/spec_helper.rb +8 -8
- metadata +5 -5
@@ -1,97 +1,97 @@
|
|
1
|
-
module SabredavClient
|
2
|
-
class Request
|
3
|
-
attr_accessor :path
|
4
|
-
attr_reader :client, :request, :http
|
5
|
-
|
6
|
-
def initialize(method, client, path)
|
7
|
-
@client = client
|
8
|
-
@path = "#{client.base_path}/#{path}"
|
9
|
-
@http = build_http
|
10
|
-
@request = build_request(method)
|
11
|
-
|
12
|
-
add_auth
|
13
|
-
end
|
14
|
-
|
15
|
-
def add_body(body)
|
16
|
-
request.body = body
|
17
|
-
end
|
18
|
-
|
19
|
-
def add_header(data)
|
20
|
-
request['Content-Length'] = data[:content_length] if data[:content_length]
|
21
|
-
request['If-Match'] = data[:if_match] if data[:if_match]
|
22
|
-
request['Content-Type'] = data[:content_type] if data[:content_type]
|
23
|
-
request['DAV'] = data[:dav] if data[:dav]
|
24
|
-
end
|
25
|
-
|
26
|
-
def run
|
27
|
-
@http.request(request)
|
28
|
-
end
|
29
|
-
|
30
|
-
private
|
31
|
-
|
32
|
-
def build_http
|
33
|
-
unless client.proxy_uri
|
34
|
-
http = Net::HTTP.new(client.host, client.port)
|
35
|
-
else
|
36
|
-
http = Net::HTTP.new(client.host, client.port, client.proxy_host, client.proxy_port)
|
37
|
-
end
|
38
|
-
|
39
|
-
if client.ssl
|
40
|
-
http.use_ssl = client.ssl
|
41
|
-
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
42
|
-
end
|
43
|
-
|
44
|
-
http
|
45
|
-
end
|
46
|
-
|
47
|
-
def build_request(method)
|
48
|
-
case method
|
49
|
-
when :get
|
50
|
-
Net::HTTP::Get.new(path)
|
51
|
-
when :post
|
52
|
-
Net::HTTP::Post.new(path)
|
53
|
-
when :put
|
54
|
-
Net::HTTP::Put.new(path)
|
55
|
-
when :delete
|
56
|
-
Net::HTTP::Delete.new(path)
|
57
|
-
when :propfind
|
58
|
-
Net::HTTP::Propfind.new(path)
|
59
|
-
when :proppatch
|
60
|
-
Net::HTTP::Proppatch.new(path)
|
61
|
-
when :report
|
62
|
-
Net::HTTP::Report.new(path)
|
63
|
-
when :mkcalendar
|
64
|
-
Net::HTTP::Mkcalendar.new(path)
|
65
|
-
when :mkcol
|
66
|
-
Net::HTTP::Mkcol.new(path)
|
67
|
-
else
|
68
|
-
raise SabredavClient::Errors::HTTPMethodNotSupportedError, method
|
69
|
-
end
|
70
|
-
end
|
71
|
-
|
72
|
-
def add_auth
|
73
|
-
unless client.authtype == 'digest'
|
74
|
-
request.basic_auth client.user, client.password
|
75
|
-
else
|
76
|
-
request.add_field 'Authorization', digestauth(method.to_s.upcase)
|
77
|
-
end
|
78
|
-
end
|
79
|
-
|
80
|
-
def digestauth
|
81
|
-
h = Net::HTTP.new client.duri.host, client.duri.port
|
82
|
-
|
83
|
-
if client.ssl
|
84
|
-
h.use_ssl = client.ssl
|
85
|
-
h.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
86
|
-
end
|
87
|
-
|
88
|
-
req = Net::HTTP::Get.new client.duri.request_uri
|
89
|
-
res = h.request req
|
90
|
-
# res is a 401 response with a WWW-Authenticate header
|
91
|
-
|
92
|
-
auth = client.digest_auth.auth_header client.duri, res['www-authenticate'], method
|
93
|
-
|
94
|
-
return auth
|
95
|
-
end
|
96
|
-
end
|
97
|
-
end
|
1
|
+
module SabredavClient
|
2
|
+
class Request
|
3
|
+
attr_accessor :path
|
4
|
+
attr_reader :client, :request, :http
|
5
|
+
|
6
|
+
def initialize(method, client, path)
|
7
|
+
@client = client
|
8
|
+
@path = "#{client.base_path}/#{path}"
|
9
|
+
@http = build_http
|
10
|
+
@request = build_request(method)
|
11
|
+
|
12
|
+
add_auth
|
13
|
+
end
|
14
|
+
|
15
|
+
def add_body(body)
|
16
|
+
request.body = body
|
17
|
+
end
|
18
|
+
|
19
|
+
def add_header(data)
|
20
|
+
request['Content-Length'] = data[:content_length] if data[:content_length]
|
21
|
+
request['If-Match'] = data[:if_match] if data[:if_match]
|
22
|
+
request['Content-Type'] = data[:content_type] if data[:content_type]
|
23
|
+
request['DAV'] = data[:dav] if data[:dav]
|
24
|
+
end
|
25
|
+
|
26
|
+
def run
|
27
|
+
@http.request(request)
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
def build_http
|
33
|
+
unless client.proxy_uri
|
34
|
+
http = Net::HTTP.new(client.host, client.port)
|
35
|
+
else
|
36
|
+
http = Net::HTTP.new(client.host, client.port, client.proxy_host, client.proxy_port)
|
37
|
+
end
|
38
|
+
|
39
|
+
if client.ssl
|
40
|
+
http.use_ssl = client.ssl
|
41
|
+
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
42
|
+
end
|
43
|
+
|
44
|
+
http
|
45
|
+
end
|
46
|
+
|
47
|
+
def build_request(method)
|
48
|
+
case method
|
49
|
+
when :get
|
50
|
+
Net::HTTP::Get.new(path)
|
51
|
+
when :post
|
52
|
+
Net::HTTP::Post.new(path)
|
53
|
+
when :put
|
54
|
+
Net::HTTP::Put.new(path)
|
55
|
+
when :delete
|
56
|
+
Net::HTTP::Delete.new(path)
|
57
|
+
when :propfind
|
58
|
+
Net::HTTP::Propfind.new(path)
|
59
|
+
when :proppatch
|
60
|
+
Net::HTTP::Proppatch.new(path)
|
61
|
+
when :report
|
62
|
+
Net::HTTP::Report.new(path)
|
63
|
+
when :mkcalendar
|
64
|
+
Net::HTTP::Mkcalendar.new(path)
|
65
|
+
when :mkcol
|
66
|
+
Net::HTTP::Mkcol.new(path)
|
67
|
+
else
|
68
|
+
raise SabredavClient::Errors::HTTPMethodNotSupportedError, method
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
def add_auth
|
73
|
+
unless client.authtype == 'digest'
|
74
|
+
request.basic_auth client.user, client.password
|
75
|
+
else
|
76
|
+
request.add_field 'Authorization', digestauth(method.to_s.upcase)
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
def digestauth
|
81
|
+
h = Net::HTTP.new client.duri.host, client.duri.port
|
82
|
+
|
83
|
+
if client.ssl
|
84
|
+
h.use_ssl = client.ssl
|
85
|
+
h.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
86
|
+
end
|
87
|
+
|
88
|
+
req = Net::HTTP::Get.new client.duri.request_uri
|
89
|
+
res = h.request req
|
90
|
+
# res is a 401 response with a WWW-Authenticate header
|
91
|
+
|
92
|
+
auth = client.digest_auth.auth_header client.duri, res['www-authenticate'], method
|
93
|
+
|
94
|
+
return auth
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
@@ -1,3 +1,3 @@
|
|
1
|
-
module SabredavClient
|
2
|
-
VERSION="0.2.
|
3
|
-
end
|
1
|
+
module SabredavClient
|
2
|
+
VERSION="0.2.1"
|
3
|
+
end
|
@@ -1,7 +1,7 @@
|
|
1
|
-
require 'builder'
|
2
|
-
|
3
|
-
['base.rb', 'propfind_calendar.rb', 'mkcalendar.rb', 'post_sharing.rb', 'report_vevent.rb', 'report_vtodo.rb', 'mkcol_principal.rb',
|
4
|
-
'report_event_changes.rb', 'propfind_owner.rb', 'proppatch_events_owner.rb', 'propfind_invite.rb', 'proppatch_principal.rb',
|
5
|
-
'proppatch_calendar.rb'].each do |f|
|
6
|
-
require File.join( File.dirname(__FILE__), 'xml_request_builder', f )
|
7
|
-
end
|
1
|
+
require 'builder'
|
2
|
+
|
3
|
+
['base.rb', 'propfind_calendar.rb', 'mkcalendar.rb', 'post_sharing.rb', 'report_vevent.rb', 'report_vtodo.rb', 'mkcol_principal.rb',
|
4
|
+
'report_event_changes.rb', 'propfind_owner.rb', 'proppatch_events_owner.rb', 'propfind_invite.rb', 'proppatch_principal.rb',
|
5
|
+
'proppatch_calendar.rb'].each do |f|
|
6
|
+
require File.join( File.dirname(__FILE__), 'xml_request_builder', f )
|
7
|
+
end
|
@@ -1,17 +1,17 @@
|
|
1
|
-
module SabredavClient
|
2
|
-
module XmlRequestBuilder
|
3
|
-
|
4
|
-
NAMESPACE = {"xmlns:d" => 'DAV:'}
|
5
|
-
C_NAMESPACES = {"xmlns:d" => 'DAV:', "xmlns:c" => "urn:ietf:params:xml:ns:caldav"}
|
6
|
-
CS_NAMESPACES = {"xmlns:d" => 'DAV:', "xmlns:cs" => "http://calendarserver.org/ns/"}
|
7
|
-
SB_NAMESPACES = {"xmlns:d" => 'DAV:', "xmlns:sb" => "http://sabredav.org/ns"}
|
8
|
-
|
9
|
-
class Base
|
10
|
-
def initialize
|
11
|
-
@xml = Builder::XmlMarkup.new(indent: 2)
|
12
|
-
@xml.instruct!
|
13
|
-
end
|
14
|
-
attr :xml
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
1
|
+
module SabredavClient
|
2
|
+
module XmlRequestBuilder
|
3
|
+
|
4
|
+
NAMESPACE = {"xmlns:d" => 'DAV:'}
|
5
|
+
C_NAMESPACES = {"xmlns:d" => 'DAV:', "xmlns:c" => "urn:ietf:params:xml:ns:caldav"}
|
6
|
+
CS_NAMESPACES = {"xmlns:d" => 'DAV:', "xmlns:cs" => "http://calendarserver.org/ns/"}
|
7
|
+
SB_NAMESPACES = {"xmlns:d" => 'DAV:', "xmlns:sb" => "http://sabredav.org/ns"}
|
8
|
+
|
9
|
+
class Base
|
10
|
+
def initialize
|
11
|
+
@xml = Builder::XmlMarkup.new(indent: 2)
|
12
|
+
@xml.instruct!
|
13
|
+
end
|
14
|
+
attr :xml
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -1,25 +1,25 @@
|
|
1
|
-
module SabredavClient
|
2
|
-
module XmlRequestBuilder
|
3
|
-
|
4
|
-
class Mkcalendar < Base
|
5
|
-
attr_accessor :displayname, :description
|
6
|
-
|
7
|
-
def initialize(displayname = nil, description = nil)
|
8
|
-
@displayname = displayname
|
9
|
-
@description = description
|
10
|
-
super()
|
11
|
-
end
|
12
|
-
|
13
|
-
def to_xml
|
14
|
-
xml.c :mkcalendar, C_NAMESPACES do
|
15
|
-
xml.d :set do
|
16
|
-
xml.d :prop do
|
17
|
-
xml.d :displayname, displayname unless displayname.to_s.empty?
|
18
|
-
xml.tag! "c:calendar-description", description, "xml:lang" => "en" unless description.to_s.empty?
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
1
|
+
module SabredavClient
|
2
|
+
module XmlRequestBuilder
|
3
|
+
|
4
|
+
class Mkcalendar < Base
|
5
|
+
attr_accessor :displayname, :description
|
6
|
+
|
7
|
+
def initialize(displayname = nil, description = nil)
|
8
|
+
@displayname = displayname
|
9
|
+
@description = description
|
10
|
+
super()
|
11
|
+
end
|
12
|
+
|
13
|
+
def to_xml
|
14
|
+
xml.c :mkcalendar, C_NAMESPACES do
|
15
|
+
xml.d :set do
|
16
|
+
xml.d :prop do
|
17
|
+
xml.d :displayname, displayname unless displayname.to_s.empty?
|
18
|
+
xml.tag! "c:calendar-description", description, "xml:lang" => "en" unless description.to_s.empty?
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -1,28 +1,28 @@
|
|
1
|
-
module SabredavClient
|
2
|
-
module XmlRequestBuilder
|
3
|
-
|
4
|
-
class MkcolPrincipal < Base
|
5
|
-
attr_accessor :email, :displayname
|
6
|
-
|
7
|
-
def initialize(email,displayname)
|
8
|
-
@email = email
|
9
|
-
@displayname = displayname
|
10
|
-
super()
|
11
|
-
end
|
12
|
-
|
13
|
-
def to_xml
|
14
|
-
xml.d :mkcol, SB_NAMESPACES do
|
15
|
-
xml.d :set do
|
16
|
-
xml.d :prop do
|
17
|
-
xml.d :resourcetype do
|
18
|
-
xml.d :principal
|
19
|
-
end
|
20
|
-
xml.d :displayname, displayname unless displayname.to_s.empty?
|
21
|
-
xml.tag! "sb:email-address", email
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
1
|
+
module SabredavClient
|
2
|
+
module XmlRequestBuilder
|
3
|
+
|
4
|
+
class MkcolPrincipal < Base
|
5
|
+
attr_accessor :email, :displayname
|
6
|
+
|
7
|
+
def initialize(email,displayname)
|
8
|
+
@email = email
|
9
|
+
@displayname = displayname
|
10
|
+
super()
|
11
|
+
end
|
12
|
+
|
13
|
+
def to_xml
|
14
|
+
xml.d :mkcol, SB_NAMESPACES do
|
15
|
+
xml.d :set do
|
16
|
+
xml.d :prop do
|
17
|
+
xml.d :resourcetype do
|
18
|
+
xml.d :principal
|
19
|
+
end
|
20
|
+
xml.d :displayname, displayname unless displayname.to_s.empty?
|
21
|
+
xml.tag! "sb:email-address", email
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -1,41 +1,41 @@
|
|
1
|
-
module SabredavClient
|
2
|
-
module XmlRequestBuilder
|
3
|
-
|
4
|
-
class PostSharing < Base
|
5
|
-
attr_accessor :adds, :removes, :summary, :privilege, :common_name
|
6
|
-
|
7
|
-
def initialize(adds, summary, common_name, privilege, removes)
|
8
|
-
@adds = adds
|
9
|
-
@summary = summary
|
10
|
-
@privilege = privilege
|
11
|
-
@common_name = common_name
|
12
|
-
@removes = removes
|
13
|
-
super()
|
14
|
-
end
|
15
|
-
|
16
|
-
def to_xml
|
17
|
-
xml.cs :share, CS_NAMESPACES do
|
18
|
-
unless adds.empty?
|
19
|
-
adds.each do |add|
|
20
|
-
add = "mailto:#{add}"
|
21
|
-
xml.cs :set do
|
22
|
-
xml.d :href, add
|
23
|
-
xml.cs :summary, summary unless summary.nil?
|
24
|
-
xml.tag! "cs:common-name", common_name unless common_name.nil?
|
25
|
-
xml.tag! "cs:#{privilege}"
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
unless removes.empty?
|
30
|
-
removes.each do |remove|
|
31
|
-
remove = "mailto:#{remove}"
|
32
|
-
xml.cs :remove do
|
33
|
-
xml.d :href, remove
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
1
|
+
module SabredavClient
|
2
|
+
module XmlRequestBuilder
|
3
|
+
|
4
|
+
class PostSharing < Base
|
5
|
+
attr_accessor :adds, :removes, :summary, :privilege, :common_name
|
6
|
+
|
7
|
+
def initialize(adds, summary, common_name, privilege, removes)
|
8
|
+
@adds = adds
|
9
|
+
@summary = summary
|
10
|
+
@privilege = privilege
|
11
|
+
@common_name = common_name
|
12
|
+
@removes = removes
|
13
|
+
super()
|
14
|
+
end
|
15
|
+
|
16
|
+
def to_xml
|
17
|
+
xml.cs :share, CS_NAMESPACES do
|
18
|
+
unless adds.empty?
|
19
|
+
adds.each do |add|
|
20
|
+
add = "mailto:#{add}"
|
21
|
+
xml.cs :set do
|
22
|
+
xml.d :href, add
|
23
|
+
xml.cs :summary, summary unless summary.nil?
|
24
|
+
xml.tag! "cs:common-name", common_name unless common_name.nil?
|
25
|
+
xml.tag! "cs:#{privilege}"
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
unless removes.empty?
|
30
|
+
removes.each do |remove|
|
31
|
+
remove = "mailto:#{remove}"
|
32
|
+
xml.cs :remove do
|
33
|
+
xml.d :href, remove
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -1,41 +1,41 @@
|
|
1
|
-
module SabredavClient
|
2
|
-
module XmlRequestBuilder
|
3
|
-
class PROPFINDCalendar < Base
|
4
|
-
attr_reader :properties
|
5
|
-
|
6
|
-
PROPERTIES = {
|
7
|
-
displayname: :d,
|
8
|
-
getctag: :cs,
|
9
|
-
sync_token: :d
|
10
|
-
}
|
11
|
-
|
12
|
-
def initialize(properties:)
|
13
|
-
@properties = properties
|
14
|
-
super()
|
15
|
-
end
|
16
|
-
|
17
|
-
def to_xml
|
18
|
-
xml.d :propfind, CS_NAMESPACES do
|
19
|
-
xml.d :prop do
|
20
|
-
build_properties
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
def build_properties
|
26
|
-
properties.each do |property|
|
27
|
-
raise SabredavClient::Errors::PropertyNotSupportedError, "Known properties are #{PROPERTIES}" unless PROPERTIES.keys.include?(property)
|
28
|
-
|
29
|
-
readable_property = property.to_s.gsub('_', '-').to_sym
|
30
|
-
|
31
|
-
case PROPERTIES[property]
|
32
|
-
when :d
|
33
|
-
xml.d readable_property
|
34
|
-
when :cs
|
35
|
-
xml.cs readable_property
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
1
|
+
module SabredavClient
|
2
|
+
module XmlRequestBuilder
|
3
|
+
class PROPFINDCalendar < Base
|
4
|
+
attr_reader :properties
|
5
|
+
|
6
|
+
PROPERTIES = {
|
7
|
+
displayname: :d,
|
8
|
+
getctag: :cs,
|
9
|
+
sync_token: :d
|
10
|
+
}
|
11
|
+
|
12
|
+
def initialize(properties:)
|
13
|
+
@properties = properties
|
14
|
+
super()
|
15
|
+
end
|
16
|
+
|
17
|
+
def to_xml
|
18
|
+
xml.d :propfind, CS_NAMESPACES do
|
19
|
+
xml.d :prop do
|
20
|
+
build_properties
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def build_properties
|
26
|
+
properties.each do |property|
|
27
|
+
raise SabredavClient::Errors::PropertyNotSupportedError, "Known properties are #{PROPERTIES}" unless PROPERTIES.keys.include?(property)
|
28
|
+
|
29
|
+
readable_property = property.to_s.gsub('_', '-').to_sym
|
30
|
+
|
31
|
+
case PROPERTIES[property]
|
32
|
+
when :d
|
33
|
+
xml.d readable_property
|
34
|
+
when :cs
|
35
|
+
xml.cs readable_property
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|