sabredav_client 0.1.1 → 0.1.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ae2d27dea599feaf7acbd21fbd193654db5cde99
4
- data.tar.gz: 0f9c24649a0c48f8ff7a7f3df0f0b9199db308d2
3
+ metadata.gz: 673012a844fcc49d9bdc6e0d3d26680e038a0d65
4
+ data.tar.gz: 3ef7b59e3f3be1d4dd979b9a11565bdda0b18476
5
5
  SHA512:
6
- metadata.gz: 464a6433ebe8a79b9de028c06abe82baabad0fc2c0b2eb1680eb6d05e5b65bcd211c5f013b7de0eba8012c3046b9d439385cad216feca482e0fa3a1a95e5fd6f
7
- data.tar.gz: 326bc569d1fc23fb613d78137d22fa85746197e6c89494b228dc3b73a815b212457ac914ef35c25e22836471951e4f66f3f48c118c53cce865b63229cdcc3d71
6
+ metadata.gz: 5bde2b10dac16f4ae9115f1822a27244979e14234b9fb216a4b83b13b2fbd32877fc252c54d3ad2bffc7c03209661dd790b0dd293cb42eecf9a60e0df4bf3e6a
7
+ data.tar.gz: 8dda7560901ade742fb28e5b7379f42a55ec9896d9ff341ffa979d43301bd60c3038034c50e440c4a3365d6b832b0941ee5d4f9a2b7011e572fd70b90fdb01fd
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- sabredav_client (0.1.0)
4
+ sabredav_client (0.1.1)
5
5
  builder (~> 3.2)
6
6
  net-http-digest_auth (~> 1.4)
7
7
 
@@ -71,6 +71,49 @@ module SabredavClient
71
71
  end
72
72
  end
73
73
 
74
+ def fetch_sharees
75
+ body = SabredavClient::XmlRequestBuilder::PropfindInvite.new.to_xml
76
+ header = {content_type: "application/xml", depth: "0"}
77
+
78
+ req = client.create_request(:propfind, header: header, body: body)
79
+
80
+ res = req.run
81
+
82
+ SabredavClient::Errors::errorhandling(res)
83
+
84
+ sharees = []
85
+ xml = REXML::Document.new(res.body)
86
+
87
+ REXML::XPath.each(xml, "//cs:user/", {"cs"=> "http://calendarserver.org/ns/"}) do |user|
88
+ entry = REXML::Document.new.add(user)
89
+ sharee = {
90
+ href: REXML::XPath.first(entry, "//d:href").text,
91
+ common_name: REXML::XPath.first(entry, "//d:common-name").text
92
+ }
93
+ access = REXML::XPath.first(entry, "//d:access").elements[1].to_s
94
+ sharee[:access] = access.gsub(/\A[<cs:]+|[\/>]+\Z/, "")
95
+
96
+ # So far Sabredav accepts every invite by default
97
+ sharee[:status] = :accepted unless REXML::XPath.first(entry, "//cs:invite-accepted").nil?
98
+ # URI depends on a custom plugin
99
+ begin
100
+ sharee[:uri] = REXML::XPath.first(entry, "//cs:uri").text
101
+ rescue
102
+ #sharee[:uri] = "Property not supported by SabreDAV server"
103
+ end
104
+ sharees.push(sharee)
105
+ end
106
+
107
+ {
108
+ sharees: sharees,
109
+ organizer: {
110
+ href: REXML::XPath.first(xml, "//cs:organizer").elements[2].text,
111
+ uri: REXML::XPath.first(xml, "//cs:uri").text
112
+ }
113
+ }
114
+
115
+ end
116
+
74
117
  def fetch_changes(sync_token)
75
118
 
76
119
  body = SabredavClient::XmlRequestBuilder::ReportEventChanges.new(sync_token).to_xml
@@ -40,6 +40,8 @@ module SabredavClient
40
40
  end
41
41
 
42
42
  def owner(uri)
43
+ # Warning: This is not a standard request. It only works if your sabredav
44
+ # server uses a certain OwnerPlugin
43
45
  header = {content_type: "application/xml"}
44
46
  body = XmlRequestBuilder::PropfindOwner.new.to_xml
45
47
  req = client.create_request(:propfind, path: uri, header: header, body: body)
@@ -47,10 +49,12 @@ module SabredavClient
47
49
 
48
50
  SabredavClient::Errors::errorhandling(res)
49
51
  xml = REXML::Document.new(res.body)
50
- REXML::XPath.first(xml, "//d:objectOwner").text
52
+ REXML::XPath.first(xml, "//cs:objectOwner").text
51
53
  end
52
54
 
53
55
  def update_owner(uri, owner)
56
+ # Warning: This is not a standard request. It only works if your sabredav
57
+ # server uses a certain OwnerPlugin
54
58
  header = {content_type: "application/xml"}
55
59
  body = XmlRequestBuilder::ProppatchOwner.new(owner).to_xml
56
60
  req = client.create_request(:proppatch, path: uri, header: header, body: body)
@@ -1,3 +1,3 @@
1
1
  module SabredavClient
2
- VERSION="0.1.1"
2
+ VERSION="0.1.2"
3
3
  end
@@ -0,0 +1,19 @@
1
+ module SabredavClient
2
+ module XmlRequestBuilder
3
+
4
+ class PropfindInvite < Base
5
+
6
+ def initialize
7
+ super()
8
+ end
9
+
10
+ def to_xml
11
+ xml.d :propfind, CS_NAMESPACES do
12
+ xml.d :prop do
13
+ xml.cs :invite
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -8,9 +8,9 @@ module SabredavClient
8
8
  end
9
9
 
10
10
  def to_xml
11
- xml.d :propfind, NAMESPACE do
11
+ xml.d :propfind, CS_NAMESPACES do
12
12
  xml.d :prop do
13
- xml.d :objectOwner
13
+ xml.cs :objectOwner
14
14
  end
15
15
  end
16
16
  end
@@ -10,10 +10,10 @@ module SabredavClient
10
10
  end
11
11
 
12
12
  def to_xml
13
- xml.d :propertyupdate, NAMESPACE do
13
+ xml.d :propertyupdate, CS_NAMESPACES do
14
14
  xml.d :set do
15
15
  xml.d :prop do
16
- xml.d :objectOwner, owner
16
+ xml.cs :objectOwner, owner
17
17
  end
18
18
  end
19
19
  end
@@ -1,6 +1,6 @@
1
1
  require 'builder'
2
2
 
3
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_owner.rb'].each do |f|
4
+ 'report_event_changes.rb', 'propfind_owner.rb', 'proppatch_owner.rb', 'propfind_invite.rb'].each do |f|
5
5
  require File.join( File.dirname(__FILE__), 'xml_request_builder', f )
6
6
  end
@@ -0,0 +1,35 @@
1
+ <?xml version="1.0"?>
2
+ <d:multistatus xmlns:d="DAV:" xmlns:s="http://sabredav.org/ns" xmlns:cal="urn:ietf:params:xml:ns:caldav" xmlns:cs="http://calendarserver.org/ns/">
3
+ <d:response>
4
+ <d:href>/caldav/server.php/user/calendar/</d:href>
5
+ <d:propstat>
6
+ <d:prop>
7
+ <cs:invite>
8
+ <cs:organizer>
9
+ <cs:uri>D8D498E2-4A98-4DC7-B421-BC49261168AF</cs:uri>
10
+ <d:href>/caldav/server.php/principals/user</d:href>
11
+ </cs:organizer>
12
+ <cs:user>
13
+ <cs:invite-accepted/>
14
+ <cs:access>
15
+ <cs:read/>
16
+ </cs:access>
17
+ <cs:uri>5bffa09e-7220-4688-a13f-088714a98783</cs:uri>
18
+ <d:href>mailto:sharee1@njiuko.com</d:href>
19
+ <cs:common-name>sharee1</cs:common-name>
20
+ </cs:user>
21
+ <cs:user>
22
+ <cs:invite-accepted/>
23
+ <cs:access>
24
+ <cs:write-read/>
25
+ </cs:access>
26
+ <cs:uri>f176b400-f0e4-4a57-bd92-0c307810ce12</cs:uri>
27
+ <d:href>mailto:sharee2@protonet.info</d:href>
28
+ <cs:common-name>sharee2</cs:common-name>
29
+ </cs:user>
30
+ </cs:invite>
31
+ </d:prop>
32
+ <d:status>HTTP/1.1 200 OK</d:status>
33
+ </d:propstat>
34
+ </d:response>
35
+ </d:multistatus>
@@ -4,7 +4,7 @@
4
4
  <d:href>http://localhost:5232/user/calendar/event.ics</d:href>
5
5
  <d:propstat>
6
6
  <d:prop>
7
- <d:objectOwner>principals/usertest</d:objectOwner>
7
+ <cs:objectOwner>principals/usertest</cs:objectOwner>
8
8
  </d:prop>
9
9
  <d:status>HTTP/1.1 200 OK</d:status>
10
10
  </d:propstat>
@@ -0,0 +1,6 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <d:propfind xmlns:d="DAV:" xmlns:cs="http://calendarserver.org/ns/">
3
+ <d:prop>
4
+ <cs:invite/>
5
+ </d:prop>
6
+ </d:propfind>
@@ -1,6 +1,6 @@
1
1
  <?xml version="1.0" encoding="UTF-8"?>
2
- <d:propfind xmlns:d="DAV:">
2
+ <d:propfind xmlns:d="DAV:" xmlns:cs="http://calendarserver.org/ns/">
3
3
  <d:prop>
4
- <d:objectOwner/>
4
+ <cs:objectOwner/>
5
5
  </d:prop>
6
6
  </d:propfind>
@@ -1,8 +1,8 @@
1
1
  <?xml version="1.0" encoding="UTF-8"?>
2
- <d:propertyupdate xmlns:d="DAV:">
2
+ <d:propertyupdate xmlns:d="DAV:" xmlns:cs="http://calendarserver.org/ns/">
3
3
  <d:set>
4
4
  <d:prop>
5
- <d:objectOwner>principals/usertest</d:objectOwner>
5
+ <cs:objectOwner>principals/usertest</cs:objectOwner>
6
6
  </d:prop>
7
7
  </d:set>
8
8
  </d:propertyupdate>
@@ -52,7 +52,7 @@ describe SabredavClient::Calendar do
52
52
  end
53
53
  end
54
54
 
55
- describe "shares" do
55
+ describe "sharing" do
56
56
  FakeWeb.register_uri(:post, "http://user@localhost:5232/user/calendar/", [{status: ["200", "OK"]},
57
57
  {status: ["200", "OK"]}])
58
58
  it "is type email" do
@@ -72,6 +72,19 @@ describe SabredavClient::Calendar do
72
72
  r = calendar.share(adds: ["test@test.de"], privilege: "write-read")
73
73
  expect(r).to be(true)
74
74
  end
75
+
76
+ it "fetch_sharees" do
77
+ FakeWeb.register_uri(:propfind, "http://user@localhost:5232/user/calendar/", body: File.open('spec/fixtures/calendar_sharees.xml') )
78
+
79
+ organizer = {href: "/caldav/server.php/principals/user", uri: "D8D498E2-4A98-4DC7-B421-BC49261168AF"}
80
+ sharees =
81
+ [{href: "mailto:sharee1@njiuko.com", common_name: "sharee1", access: "read", status: :accepted, uri: "5bffa09e-7220-4688-a13f-088714a98783"},
82
+ {href: "mailto:sharee2@protonet.info", common_name: "sharee2", access: "write-read", status: :accepted, uri: "f176b400-f0e4-4a57-bd92-0c307810ce12"}]
83
+ expected_result = {sharees: sharees, organizer: organizer}
84
+
85
+ r = calendar.fetch_sharees
86
+ expect(r).to eq(expected_result)
87
+ end
75
88
  end
76
89
 
77
90
  describe "info" do
@@ -0,0 +1,14 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe SabredavClient::XmlRequestBuilder::PropfindInvite do
4
+
5
+ let(:propfind) { described_class.new }
6
+
7
+ describe "#to_xml" do
8
+ let(:expected_xml) { File.read('spec/fixtures/xml_request_builder/propfind_invite.xml') }
9
+
10
+ it "returns a valid xml" do
11
+ expect(propfind.to_xml).to eq(expected_xml)
12
+ end
13
+ end
14
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sabredav_client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nicolas Schwartau
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-08-25 00:00:00.000000000 Z
11
+ date: 2016-08-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: builder
@@ -96,6 +96,7 @@ files:
96
96
  - lib/sabredav_client/xml_request_builder/mkcol_principal.rb
97
97
  - lib/sabredav_client/xml_request_builder/post_sharing.rb
98
98
  - lib/sabredav_client/xml_request_builder/propfind_calendar.rb
99
+ - lib/sabredav_client/xml_request_builder/propfind_invite.rb
99
100
  - lib/sabredav_client/xml_request_builder/propfind_owner.rb
100
101
  - lib/sabredav_client/xml_request_builder/proppatch_owner.rb
101
102
  - lib/sabredav_client/xml_request_builder/report_event_changes.rb
@@ -104,6 +105,7 @@ files:
104
105
  - sabredav_client.gemspec
105
106
  - spec/fixtures/calendar_fetch_changes.xml
106
107
  - spec/fixtures/calendar_info.xml
108
+ - spec/fixtures/calendar_sharees.xml
107
109
  - spec/fixtures/event.ics
108
110
  - spec/fixtures/events_find_multiple.xml
109
111
  - spec/fixtures/events_owner.xml
@@ -111,6 +113,7 @@ files:
111
113
  - spec/fixtures/xml_request_builder/mkcol_principal.xml
112
114
  - spec/fixtures/xml_request_builder/post_sharing.xml
113
115
  - spec/fixtures/xml_request_builder/propfind_calendar/all_properties.xml
116
+ - spec/fixtures/xml_request_builder/propfind_invite.xml
114
117
  - spec/fixtures/xml_request_builder/propfind_owner.xml
115
118
  - spec/fixtures/xml_request_builder/proppatch_owner.xml
116
119
  - spec/fixtures/xml_request_builder/report_event_changes.xml
@@ -124,6 +127,7 @@ files:
124
127
  - spec/sabredav_client/xml_request_builder_specs/mkcol_principal_spec.rb
125
128
  - spec/sabredav_client/xml_request_builder_specs/post_sharing_spec.rb
126
129
  - spec/sabredav_client/xml_request_builder_specs/propfind_calendar_spec.rb
130
+ - spec/sabredav_client/xml_request_builder_specs/propfind_invite_spec.rb
127
131
  - spec/sabredav_client/xml_request_builder_specs/propfind_owner_spec.rb
128
132
  - spec/sabredav_client/xml_request_builder_specs/proppatch_owner_spec.rb
129
133
  - spec/sabredav_client/xml_request_builder_specs/report_event_changes_spec.rb