ews-api 0.1.0.a
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.
- data/.document +5 -0
- data/.gitignore +24 -0
- data/LICENSE +20 -0
- data/README.rdoc +38 -0
- data/Rakefile +88 -0
- data/VERSION +1 -0
- data/ews-api.gemspec +96 -0
- data/lib/ews-api.rb +16 -0
- data/lib/ews/attachment.rb +7 -0
- data/lib/ews/error.rb +14 -0
- data/lib/ews/folder.rb +44 -0
- data/lib/ews/message.rb +22 -0
- data/lib/ews/model.rb +37 -0
- data/lib/ews/parser.rb +166 -0
- data/lib/ews/service.rb +476 -0
- data/spec/ews/attachment_spec.rb +29 -0
- data/spec/ews/folder_spec.rb +85 -0
- data/spec/ews/message_spec.rb +28 -0
- data/spec/ews/model_spec.rb +31 -0
- data/spec/ews/parser_spec.rb +119 -0
- data/spec/ews/service_spec.rb +14 -0
- data/spec/fixtures/find_folder.xml +25 -0
- data/spec/fixtures/find_item.xml +20 -0
- data/spec/fixtures/find_item_all_properties.xml +120 -0
- data/spec/fixtures/get_attachment.xml +77 -0
- data/spec/fixtures/get_folder.xml +16 -0
- data/spec/fixtures/get_item_all_properties.xml +80 -0
- data/spec/fixtures/get_item_default.xml +46 -0
- data/spec/fixtures/get_item_id_only.xml +13 -0
- data/spec/fixtures/get_item_no_attachments.xml +75 -0
- data/spec/fixtures/get_item_with_error.xml +11 -0
- data/spec/integration.rb +153 -0
- data/spec/spec.opts +4 -0
- data/spec/spec_helper.rb +61 -0
- metadata +145 -0
data/lib/ews/service.rb
ADDED
@@ -0,0 +1,476 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
# ntlm authentication works using httpclient and rubyntlm
|
4
|
+
Handsoap.http_driver = :http_client
|
5
|
+
Handsoap.xml_query_driver = :nokogiri
|
6
|
+
|
7
|
+
module EWS
|
8
|
+
# Implementation of Exchange Web Services
|
9
|
+
#
|
10
|
+
# @see http://msdn.microsoft.com/en-us/library/bb409286.aspx Exchange Web Services Operations
|
11
|
+
# @see http://msdn.microsoft.com/en-us/library/aa580545.aspx BaseShape
|
12
|
+
class Service < Handsoap::Service
|
13
|
+
def self.endpoint(uri)
|
14
|
+
super :uri => uri, :version => 1
|
15
|
+
end
|
16
|
+
|
17
|
+
@@username, @@password = nil, nil
|
18
|
+
|
19
|
+
def set_auth(username, password)
|
20
|
+
@@username, @@password = username, password
|
21
|
+
end
|
22
|
+
|
23
|
+
def on_after_create_http_request(req)
|
24
|
+
if @@username && @@password
|
25
|
+
req.set_auth @@username, @@password
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def on_create_document(doc)
|
30
|
+
# register namespaces for the request
|
31
|
+
doc.alias 'tns', 'http://schemas.microsoft.com/exchange/services/2006/messages'
|
32
|
+
doc.alias 't', 'http://schemas.microsoft.com/exchange/services/2006/types'
|
33
|
+
end
|
34
|
+
|
35
|
+
def on_response_document(doc)
|
36
|
+
apply_namespaces! doc
|
37
|
+
parser.parse_response_message doc
|
38
|
+
end
|
39
|
+
|
40
|
+
def apply_namespaces!(doc)
|
41
|
+
doc.add_namespace 'soap', '"http://schemas.xmlsoap.org/soap/envelope'
|
42
|
+
doc.add_namespace 't', 'http://schemas.microsoft.com/exchange/services/2006/types'
|
43
|
+
doc.add_namespace 'm', 'http://schemas.microsoft.com/exchange/services/2006/messages'
|
44
|
+
end
|
45
|
+
# public methods
|
46
|
+
|
47
|
+
def resolve_names!
|
48
|
+
soap_action = 'http://schemas.microsoft.com/exchange/services/2006/messages/ResolveNames'
|
49
|
+
response = invoke('tns:ResolveNames', soap_action) do |message|
|
50
|
+
raise "TODO"
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
def expand_dl!
|
55
|
+
soap_action = 'http://schemas.microsoft.com/exchange/services/2006/messages/ExpandDL'
|
56
|
+
response = invoke('tns:ExpandDL', soap_action) do |message|
|
57
|
+
raise "TODO"
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
# Finds folders for the given parent folder.
|
62
|
+
#
|
63
|
+
# @param [Hash] opts Options to manipulate the FindFolder response
|
64
|
+
# @option opts [String, Symbol] :base_shape (Default) IdOnly, Default, AllProperties
|
65
|
+
#
|
66
|
+
# @example Request
|
67
|
+
# <FindFolder Traversal="Shallow" xmlns="http://schemas.microsoft.com/exchange/services/2006/messages">
|
68
|
+
# <FolderShape>
|
69
|
+
# <t:BaseShape>Default</t:BaseShape>
|
70
|
+
# </FolderShape>
|
71
|
+
# <ParentFolderIds>
|
72
|
+
# <t:DistinguishedFolderId Id="inbox"/>
|
73
|
+
# </ParentFolderIds>
|
74
|
+
# </FindFolder>
|
75
|
+
#
|
76
|
+
# @see http://msdn.microsoft.com/en-us/library/aa563918.aspx
|
77
|
+
# FindFolder
|
78
|
+
#
|
79
|
+
# @see http://msdn.microsoft.com/en-us/library/aa494311.aspx
|
80
|
+
# FolderShape
|
81
|
+
#
|
82
|
+
# @todo Support options
|
83
|
+
# Traversal: +Shallow, Deep, SoftDeleted+
|
84
|
+
# FolderShape: +IdOnly, Default, AllProperties+
|
85
|
+
def find_folder(parent_folder_name = :root, opts = {})
|
86
|
+
soap_action = 'http://schemas.microsoft.com/exchange/services/2006/messages/FindFolder'
|
87
|
+
opts[:base_shape] ||= :Default
|
88
|
+
|
89
|
+
response = invoke('tns:FindFolder', soap_action) do |find_folder|
|
90
|
+
find_folder.set_attr 'Traversal', 'Deep'
|
91
|
+
find_folder.add('tns:FolderShape') do |shape|
|
92
|
+
shape.add 't:BaseShape', opts[:base_shape]
|
93
|
+
end
|
94
|
+
find_folder.add('tns:ParentFolderIds') do |ids|
|
95
|
+
ids.add('t:DistinguishedFolderId') do |id|
|
96
|
+
id.set_attr 'Id', parent_folder_name.to_s.downcase
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
parser.parse_find_folder response.document
|
101
|
+
end
|
102
|
+
|
103
|
+
# @param [Hash] opts Options to manipulate the FindFolder response
|
104
|
+
# @option opts [String, Symbol] :base_shape (Default) IdOnly, Default, AllProperties
|
105
|
+
#
|
106
|
+
# @example Request
|
107
|
+
#
|
108
|
+
# <GetFolder xmlns="http://schemas.microsoft.com/exchange/services/2006/messages"
|
109
|
+
# xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">
|
110
|
+
# <FolderShape>
|
111
|
+
# <t:BaseShape>Default</t:BaseShape>
|
112
|
+
# </FolderShape>
|
113
|
+
# <FolderIds>
|
114
|
+
# <t:DistinguishedFolderId Id="inbox"/>
|
115
|
+
# </FolderIds>
|
116
|
+
# </GetFolder>
|
117
|
+
#
|
118
|
+
# @see http://msdn.microsoft.com/en-us/library/aa580274.aspx
|
119
|
+
# MSDN - GetFolder operation
|
120
|
+
#
|
121
|
+
def get_folder(name = :root, opts = {})
|
122
|
+
soap_action = 'http://schemas.microsoft.com/exchange/services/2006/messages/GetFolder'
|
123
|
+
opts[:base_shape] ||= :Default
|
124
|
+
|
125
|
+
response = invoke('tns:GetFolder', soap_action) do |get_folder|
|
126
|
+
get_folder.add('tns:FolderShape') do |shape|
|
127
|
+
shape.add 't:BaseShape', opts[:base_shape]
|
128
|
+
end
|
129
|
+
get_folder.add('tns:FolderIds') do |ids|
|
130
|
+
ids.add('t:DistinguishedFolderId') { |id| id.set_attr 'Id', name }
|
131
|
+
end
|
132
|
+
end
|
133
|
+
parser.parse_get_folder response.document
|
134
|
+
end
|
135
|
+
|
136
|
+
def convert_id!
|
137
|
+
soap_action = 'http://schemas.microsoft.com/exchange/services/2006/messages/ConvertId'
|
138
|
+
response = invoke('tns:ConvertId', soap_action) do |message|
|
139
|
+
raise "TODO"
|
140
|
+
end
|
141
|
+
end
|
142
|
+
|
143
|
+
def create_folder!
|
144
|
+
soap_action = 'http://schemas.microsoft.com/exchange/services/2006/messages/CreateFolder'
|
145
|
+
response = invoke('tns:CreateFolder', soap_action) do |message|
|
146
|
+
raise "TODO"
|
147
|
+
end
|
148
|
+
end
|
149
|
+
|
150
|
+
def delete_folder!
|
151
|
+
soap_action = 'http://schemas.microsoft.com/exchange/services/2006/messages/DeleteFolder'
|
152
|
+
response = invoke('tns:DeleteFolder', soap_action) do |message|
|
153
|
+
raise "TODO"
|
154
|
+
end
|
155
|
+
end
|
156
|
+
|
157
|
+
def update_folder!
|
158
|
+
soap_action = 'http://schemas.microsoft.com/exchange/services/2006/messages/UpdateFolder'
|
159
|
+
response = invoke('tns:UpdateFolder', soap_action) do |message|
|
160
|
+
raise "TODO"
|
161
|
+
end
|
162
|
+
end
|
163
|
+
|
164
|
+
def move_folder!
|
165
|
+
soap_action = 'http://schemas.microsoft.com/exchange/services/2006/messages/MoveFolder'
|
166
|
+
response = invoke('tns:MoveFolder', soap_action) do |message|
|
167
|
+
raise "TODO"
|
168
|
+
end
|
169
|
+
end
|
170
|
+
|
171
|
+
def copy_folder!
|
172
|
+
soap_action = 'http://schemas.microsoft.com/exchange/services/2006/messages/CopyFolder'
|
173
|
+
response = invoke('tns:CopyFolder', soap_action) do |message|
|
174
|
+
raise "TODO"
|
175
|
+
end
|
176
|
+
end
|
177
|
+
|
178
|
+
def subscribe!
|
179
|
+
soap_action = 'http://schemas.microsoft.com/exchange/services/2006/messages/Subscribe'
|
180
|
+
response = invoke('tns:Subscribe', soap_action) do |message|
|
181
|
+
raise "TODO"
|
182
|
+
end
|
183
|
+
end
|
184
|
+
|
185
|
+
def unsubscribe!
|
186
|
+
soap_action = 'http://schemas.microsoft.com/exchange/services/2006/messages/Unsubscribe'
|
187
|
+
response = invoke('tns:Unsubscribe', soap_action) do |message|
|
188
|
+
raise "TODO"
|
189
|
+
end
|
190
|
+
end
|
191
|
+
|
192
|
+
def get_events
|
193
|
+
soap_action = 'http://schemas.microsoft.com/exchange/services/2006/messages/GetEvents'
|
194
|
+
response = invoke('tns:GetEvents', soap_action) do |message|
|
195
|
+
raise "TODO"
|
196
|
+
end
|
197
|
+
end
|
198
|
+
|
199
|
+
def sync_folder_hierarchy!
|
200
|
+
soap_action = 'http://schemas.microsoft.com/exchange/services/2006/messages/SyncFolderHierarchy'
|
201
|
+
response = invoke('tns:SyncFolderHierarchy', soap_action) do |message|
|
202
|
+
raise "TODO"
|
203
|
+
end
|
204
|
+
end
|
205
|
+
|
206
|
+
def sync_folder_items!
|
207
|
+
soap_action = 'http://schemas.microsoft.com/exchange/services/2006/messages/SyncFolderItems'
|
208
|
+
response = invoke('tns:SyncFolderItems', soap_action) do |message|
|
209
|
+
raise "TODO"
|
210
|
+
end
|
211
|
+
end
|
212
|
+
|
213
|
+
def create_managed_folder!
|
214
|
+
soap_action = 'http://schemas.microsoft.com/exchange/services/2006/messages/CreateManagedFolder'
|
215
|
+
response = invoke('tns:CreateManagedFolder', soap_action) do |message|
|
216
|
+
raise "TODO"
|
217
|
+
end
|
218
|
+
end
|
219
|
+
|
220
|
+
# @param [Hash] opts Options to manipulate the FindItem response
|
221
|
+
# @option opts [String, Symbol] :base_shape (Default) IdOnly, Default, AllProperties
|
222
|
+
#
|
223
|
+
# @example Request
|
224
|
+
# <FindItem xmlns="http://schemas.microsoft.com/exchange/services/2006/messages"
|
225
|
+
# xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types"
|
226
|
+
# Traversal="Shallow">
|
227
|
+
# <ItemShape>
|
228
|
+
# <t:BaseShape>IdOnly</t:BaseShape>
|
229
|
+
# </ItemShape>
|
230
|
+
# <ParentFolderIds>
|
231
|
+
# <t:DistinguishedFolderId Id="deleteditems"/>
|
232
|
+
# </ParentFolderIds>
|
233
|
+
# </FindItem>
|
234
|
+
#
|
235
|
+
#
|
236
|
+
# @see http://msdn.microsoft.com/en-us/library/aa566107(EXCHG.80).aspx
|
237
|
+
# FindItem - Exchange 2007
|
238
|
+
#
|
239
|
+
# @see http://msdn.microsoft.com/en-us/library/aa566107.aspx
|
240
|
+
# FindItem - Exchange 2010
|
241
|
+
#
|
242
|
+
# @see http://msdn.microsoft.com/en-us/library/aa580545.aspx
|
243
|
+
# BaseShape
|
244
|
+
def find_item(parent_folder_name = :root, opts = {})
|
245
|
+
soap_action = 'http://schemas.microsoft.com/exchange/services/2006/messages/FindItem'
|
246
|
+
opts[:base_shape] ||= :IdOnly
|
247
|
+
|
248
|
+
response = invoke('tns:FindItem', soap_action) do |find_item|
|
249
|
+
find_item.set_attr 'Traversal', 'Shallow'
|
250
|
+
find_item.add('tns:ItemShape') do |shape|
|
251
|
+
shape.add 't:BaseShape', opts[:base_shape]
|
252
|
+
end
|
253
|
+
find_item.add('tns:ParentFolderIds') do |ids|
|
254
|
+
ids.add('t:DistinguishedFolderId') do |folder_id|
|
255
|
+
folder_id.set_attr 'Id', parent_folder_name.to_s.downcase
|
256
|
+
end
|
257
|
+
end
|
258
|
+
end
|
259
|
+
parser.parse_find_item response.document
|
260
|
+
end
|
261
|
+
|
262
|
+
# @param [Hash] opts Options to manipulate the FindFolder response
|
263
|
+
# @option opts [String, Symbol] :base_shape (Default) IdOnly, Default, AllProperties
|
264
|
+
# @option opts [String] :change_key
|
265
|
+
#
|
266
|
+
# @example Request for getting a mail message
|
267
|
+
# <GetItem xmlns="http://schemas.microsoft.com/exchange/services/2006/messages"
|
268
|
+
# xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">
|
269
|
+
# <ItemShape>
|
270
|
+
# <t:BaseShape>Default</t:BaseShape>
|
271
|
+
# <t:IncludeMimeContent>true</t:IncludeMimeContent>
|
272
|
+
# </ItemShape>
|
273
|
+
# <ItemIds>
|
274
|
+
# <t:ItemId Id="AAAlAF" ChangeKey="CQAAAB" />
|
275
|
+
# </ItemIds>
|
276
|
+
# </GetItem>
|
277
|
+
#
|
278
|
+
# @see http://msdn.microsoft.com/en-us/library/aa566013.aspx
|
279
|
+
# GetItem (E-mail Message)
|
280
|
+
#
|
281
|
+
# @see http://msdn.microsoft.com/en-us/library/aa565261.aspx
|
282
|
+
# ItemShape
|
283
|
+
#
|
284
|
+
# @see http://msdn.microsoft.com/en-us/library/aa563525.aspx
|
285
|
+
# ItmeIds
|
286
|
+
def get_item(item_id, opts = {})
|
287
|
+
soap_action = 'http://schemas.microsoft.com/exchange/services/2006/messages/GetItem'
|
288
|
+
opts[:base_shape] ||= :Default
|
289
|
+
|
290
|
+
response = invoke('tns:GetItem', soap_action) do |get_item|
|
291
|
+
get_item.add('tns:ItemShape') do |shape|
|
292
|
+
shape.add 't:BaseShape', opts[:base_shape]
|
293
|
+
shape.add 't:IncludeMimeContent', false
|
294
|
+
end
|
295
|
+
get_item.add('tns:ItemIds') do |ids|
|
296
|
+
ids.add('t:ItemId') do |item|
|
297
|
+
item.set_attr 'Id', item_id
|
298
|
+
if opts[:change_key]
|
299
|
+
item.set_attr 'ChangeKey', opts[:change_key]
|
300
|
+
end
|
301
|
+
end
|
302
|
+
end
|
303
|
+
end
|
304
|
+
parser.parse_get_item response.document
|
305
|
+
end
|
306
|
+
|
307
|
+
def create_item!
|
308
|
+
soap_action = 'http://schemas.microsoft.com/exchange/services/2006/messages/CreateItem'
|
309
|
+
response = invoke('tns:CreateItem', soap_action) do |message|
|
310
|
+
raise "TODO"
|
311
|
+
end
|
312
|
+
end
|
313
|
+
|
314
|
+
def delete_item!
|
315
|
+
soap_action = 'http://schemas.microsoft.com/exchange/services/2006/messages/DeleteItem'
|
316
|
+
response = invoke('tns:DeleteItem', soap_action) do |message|
|
317
|
+
raise "TODO"
|
318
|
+
end
|
319
|
+
end
|
320
|
+
|
321
|
+
def update_item!
|
322
|
+
soap_action = 'http://schemas.microsoft.com/exchange/services/2006/messages/UpdateItem'
|
323
|
+
response = invoke('tns:UpdateItem', soap_action) do |message|
|
324
|
+
raise "TODO"
|
325
|
+
end
|
326
|
+
end
|
327
|
+
|
328
|
+
def send_item!
|
329
|
+
soap_action = 'http://schemas.microsoft.com/exchange/services/2006/messages/SendItem'
|
330
|
+
response = invoke('tns:SendItem', soap_action) do |message|
|
331
|
+
raise "TODO"
|
332
|
+
end
|
333
|
+
end
|
334
|
+
|
335
|
+
# @param folder_id Name of the destination folder
|
336
|
+
# @param item_ids [Array] List of item ids to be moved
|
337
|
+
#
|
338
|
+
# @example Request
|
339
|
+
# <MoveItem xmlns="http://schemas.microsoft.com/exchange/services/2006/messages"
|
340
|
+
# xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">
|
341
|
+
# <ToFolderId>
|
342
|
+
# <t:FolderId Id="drafts"/>
|
343
|
+
# </ToFolderId>
|
344
|
+
# <ItemIds>
|
345
|
+
# <t:ItemId Id="AAAtAEF/swbAAA=" ChangeKey="EwAAABYA/s4b"/>
|
346
|
+
# </ItemIds>
|
347
|
+
# </MoveItem>
|
348
|
+
#
|
349
|
+
# @see http://msdn.microsoft.com/en-us/library/aa565781%28EXCHG.80%29.aspx
|
350
|
+
# MoveItem
|
351
|
+
#
|
352
|
+
# @see http://msdn.microsoft.com/en-us/library/aa580808%28EXCHG.80%29.aspx
|
353
|
+
# DistinguishedFolderId
|
354
|
+
#
|
355
|
+
def move_item!(folder_id, item_ids)
|
356
|
+
soap_action = 'http://schemas.microsoft.com/exchange/services/2006/messages/MoveItem'
|
357
|
+
response = invoke('tns:MoveItem', soap_action) do |move_item|
|
358
|
+
move_item.add('tns:ToFolderId') do |to_folder|
|
359
|
+
|
360
|
+
# TODO: Support both FolderID and DistinguishedFolderId
|
361
|
+
to_folder.add('t:FolderId') do |folder_id_node|
|
362
|
+
folder_id_node.set_attr 'Id', folder_id
|
363
|
+
end
|
364
|
+
end
|
365
|
+
move_item.add('tns:ItemIds') do |ids|
|
366
|
+
item_ids.each do |item_id|
|
367
|
+
ids.add('t:ItemId') {|item_node| item_node.set_attr 'Id', item_id }
|
368
|
+
end
|
369
|
+
end
|
370
|
+
end
|
371
|
+
end
|
372
|
+
|
373
|
+
def copy_item!
|
374
|
+
soap_action = 'http://schemas.microsoft.com/exchange/services/2006/messages/CopyItem'
|
375
|
+
response = invoke('tns:CopyItem', soap_action) do |message|
|
376
|
+
raise "TODO"
|
377
|
+
end
|
378
|
+
end
|
379
|
+
|
380
|
+
def create_attachment!
|
381
|
+
soap_action = 'http://schemas.microsoft.com/exchange/services/2006/messages/CreateAttachment'
|
382
|
+
response = invoke('tns:CreateAttachment', soap_action) do |message|
|
383
|
+
raise "TODO"
|
384
|
+
end
|
385
|
+
end
|
386
|
+
|
387
|
+
def delete_attachment!
|
388
|
+
soap_action = 'http://schemas.microsoft.com/exchange/services/2006/messages/DeleteAttachment'
|
389
|
+
response = invoke('tns:DeleteAttachment', soap_action) do |message|
|
390
|
+
raise "TODO"
|
391
|
+
end
|
392
|
+
end
|
393
|
+
|
394
|
+
# @example Request
|
395
|
+
# <GetAttachment xmlns="http://schemas.microsoft.com/exchange/services/2006/messages"
|
396
|
+
# xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">
|
397
|
+
# <AttachmentShape/>
|
398
|
+
# <AttachmentIds>
|
399
|
+
# <t:AttachmentId Id="AAAtAEFkbWluaX..."/>
|
400
|
+
# </AttachmentIds>
|
401
|
+
# </GetAttachment>
|
402
|
+
#
|
403
|
+
# @see http://msdn.microsoft.com/en-us/library/aa494316.aspx
|
404
|
+
# GetAttachment
|
405
|
+
def get_attachment(attachment_id)
|
406
|
+
soap_action = 'http://schemas.microsoft.com/exchange/services/2006/messages/GetAttachment'
|
407
|
+
response = invoke('tns:GetAttachment', soap_action) do |get_attachment|
|
408
|
+
get_attachment.add('tns:AttachmentShape')
|
409
|
+
get_attachment.add('tns:AttachmentIds') do |ids|
|
410
|
+
ids.add('t:AttachmentId') do |attachment|
|
411
|
+
attachment.set_attr 'Id', attachment_id
|
412
|
+
end
|
413
|
+
end
|
414
|
+
end
|
415
|
+
parser.parse_get_attachment response.document
|
416
|
+
end
|
417
|
+
|
418
|
+
def get_delegate
|
419
|
+
soap_action = 'http://schemas.microsoft.com/exchange/services/2006/messages/GetDelegate'
|
420
|
+
response = invoke('tns:GetDelegate', soap_action) do |message|
|
421
|
+
raise "TODO"
|
422
|
+
end
|
423
|
+
end
|
424
|
+
|
425
|
+
def add_delegate!
|
426
|
+
soap_action = 'http://schemas.microsoft.com/exchange/services/2006/messages/AddDelegate'
|
427
|
+
response = invoke('tns:AddDelegate', soap_action) do |message|
|
428
|
+
raise "TODO"
|
429
|
+
end
|
430
|
+
end
|
431
|
+
|
432
|
+
def remove_delegate!
|
433
|
+
soap_action = 'http://schemas.microsoft.com/exchange/services/2006/messages/RemoveDelegate'
|
434
|
+
response = invoke('tns:RemoveDelegate', soap_action) do |message|
|
435
|
+
raise "TODO"
|
436
|
+
end
|
437
|
+
end
|
438
|
+
|
439
|
+
def update_delegate!
|
440
|
+
soap_action = 'http://schemas.microsoft.com/exchange/services/2006/messages/UpdateDelegate'
|
441
|
+
response = invoke('tns:UpdateDelegate', soap_action) do |message|
|
442
|
+
raise "TODO"
|
443
|
+
end
|
444
|
+
end
|
445
|
+
|
446
|
+
def get_user_availability
|
447
|
+
soap_action = 'http://schemas.microsoft.com/exchange/services/2006/messages/GetUserAvailability'
|
448
|
+
response = invoke('tns:GetUserAvailability', soap_action) do |message|
|
449
|
+
raise "TODO"
|
450
|
+
end
|
451
|
+
end
|
452
|
+
|
453
|
+
def get_user_oof_settings
|
454
|
+
soap_action = 'http://schemas.microsoft.com/exchange/services/2006/messages/GetUserOofSettings'
|
455
|
+
response = invoke('tns:GetUserOofSettings', soap_action) do |message|
|
456
|
+
raise "TODO"
|
457
|
+
end
|
458
|
+
end
|
459
|
+
|
460
|
+
def set_user_oof_settings!
|
461
|
+
soap_action = 'http://schemas.microsoft.com/exchange/services/2006/messages/SetUserOofSettings'
|
462
|
+
response = invoke('tns:SetUserOofSettings', soap_action) do |message|
|
463
|
+
raise "TODO"
|
464
|
+
end
|
465
|
+
end
|
466
|
+
|
467
|
+
private
|
468
|
+
def parser
|
469
|
+
@parser ||= Parser.new
|
470
|
+
end
|
471
|
+
|
472
|
+
# helpers
|
473
|
+
|
474
|
+
# TODO
|
475
|
+
end
|
476
|
+
end
|