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.
Files changed (68) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +3 -3
  3. data/.rspec +1 -1
  4. data/CHANGELOG.rdoc +8 -8
  5. data/Gemfile +3 -3
  6. data/Gemfile.lock +39 -38
  7. data/README.md +49 -49
  8. data/Rakefile +5 -5
  9. data/lib/sabredav_client.rb +10 -10
  10. data/lib/sabredav_client/calendar.rb +171 -171
  11. data/lib/sabredav_client/client.rb +57 -57
  12. data/lib/sabredav_client/errors/errors.rb +41 -41
  13. data/lib/sabredav_client/events.rb +106 -105
  14. data/lib/sabredav_client/net.rb +15 -15
  15. data/lib/sabredav_client/principal.rb +51 -51
  16. data/lib/sabredav_client/request.rb +97 -97
  17. data/lib/sabredav_client/version.rb +3 -3
  18. data/lib/sabredav_client/xml_request_builder.rb +7 -7
  19. data/lib/sabredav_client/xml_request_builder/base.rb +17 -17
  20. data/lib/sabredav_client/xml_request_builder/mkcalendar.rb +25 -25
  21. data/lib/sabredav_client/xml_request_builder/mkcol_principal.rb +28 -28
  22. data/lib/sabredav_client/xml_request_builder/post_sharing.rb +41 -41
  23. data/lib/sabredav_client/xml_request_builder/propfind_calendar.rb +41 -41
  24. data/lib/sabredav_client/xml_request_builder/propfind_invite.rb +19 -19
  25. data/lib/sabredav_client/xml_request_builder/propfind_owner.rb +19 -19
  26. data/lib/sabredav_client/xml_request_builder/proppatch_calendar.rb +25 -25
  27. data/lib/sabredav_client/xml_request_builder/proppatch_events_owner.rb +23 -23
  28. data/lib/sabredav_client/xml_request_builder/proppatch_principal.rb +25 -25
  29. data/lib/sabredav_client/xml_request_builder/report_event_changes.rb +22 -22
  30. data/lib/sabredav_client/xml_request_builder/report_vevent.rb +30 -30
  31. data/lib/sabredav_client/xml_request_builder/report_vtodo.rb +20 -20
  32. data/sabredav_client.gemspec +31 -31
  33. data/spec/fixtures/calendar_fetch_changes.xml +26 -26
  34. data/spec/fixtures/calendar_info.xml +14 -14
  35. data/spec/fixtures/calendar_sharees.xml +35 -35
  36. data/spec/fixtures/calendar_sharees_without_common_name.xml +26 -26
  37. data/spec/fixtures/event.ics +23 -23
  38. data/spec/fixtures/events_find_multiple.xml +51 -51
  39. data/spec/fixtures/events_owner.xml +12 -12
  40. data/spec/fixtures/xml_request_builder/mkcalendar.xml +9 -9
  41. data/spec/fixtures/xml_request_builder/mkcol_principal.xml +12 -12
  42. data/spec/fixtures/xml_request_builder/post_sharing.xml +18 -18
  43. data/spec/fixtures/xml_request_builder/propfind_calendar/all_properties.xml +8 -8
  44. data/spec/fixtures/xml_request_builder/propfind_invite.xml +6 -6
  45. data/spec/fixtures/xml_request_builder/propfind_owner.xml +6 -6
  46. data/spec/fixtures/xml_request_builder/proppatch_calendar.xml +9 -9
  47. data/spec/fixtures/xml_request_builder/proppatch_events_owner.xml +8 -8
  48. data/spec/fixtures/xml_request_builder/proppatch_principal.xml +9 -9
  49. data/spec/fixtures/xml_request_builder/report_event_changes.xml +8 -8
  50. data/spec/sabredav_client/calendar_spec.rb +142 -142
  51. data/spec/sabredav_client/client_spec.rb +41 -41
  52. data/spec/sabredav_client/events_spec.rb +119 -119
  53. data/spec/sabredav_client/principal_spec.rb +51 -51
  54. data/spec/sabredav_client/request_spec.rb +55 -55
  55. data/spec/sabredav_client/xml_request_builder_specs/base_spec.rb +30 -30
  56. data/spec/sabredav_client/xml_request_builder_specs/mkcalendar_spec.rb +13 -13
  57. data/spec/sabredav_client/xml_request_builder_specs/mkcol_principal_spec.rb +13 -13
  58. data/spec/sabredav_client/xml_request_builder_specs/post_sharing_spec.rb +15 -15
  59. data/spec/sabredav_client/xml_request_builder_specs/propfind_calendar_spec.rb +24 -24
  60. data/spec/sabredav_client/xml_request_builder_specs/propfind_invite_spec.rb +14 -14
  61. data/spec/sabredav_client/xml_request_builder_specs/propfind_owner_spec.rb +14 -14
  62. data/spec/sabredav_client/xml_request_builder_specs/proppatch_calendar.rb +15 -15
  63. data/spec/sabredav_client/xml_request_builder_specs/proppatch_events_owner_spec.rb +14 -14
  64. data/spec/sabredav_client/xml_request_builder_specs/proppatch_principal_spec.rb +24 -24
  65. data/spec/sabredav_client/xml_request_builder_specs/report_event_changes_spec.rb +15 -15
  66. data/spec/spec.opts +4 -4
  67. data/spec/spec_helper.rb +8 -8
  68. 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.0"
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