Class: EWS::Service

Inherits:
Handsoap::Service
  • Object
show all
Defined in:
lib/ews/service.rb

Overview

Implementation of Exchange Web Services

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.endpoint(uri) ⇒ Object



13
14
15
# File 'lib/ews/service.rb', line 13

def self.endpoint(uri)
  super :uri => uri, :version => 1
end

Instance Method Details

#add_delegate!Object



403
404
405
406
407
408
# File 'lib/ews/service.rb', line 403

def add_delegate!
  soap_action = 'http://schemas.microsoft.com/exchange/services/2006/messages/AddDelegate'
  response = invoke('tns:AddDelegate', soap_action) do |message|
    raise "TODO"
  end
end

#apply_namespaces!(doc) ⇒ Object



43
44
45
46
47
# File 'lib/ews/service.rb', line 43

def apply_namespaces!(doc)
  doc.add_namespace 'soap', '"http://schemas.xmlsoap.org/soap/envelope'
  doc.add_namespace 't', 'http://schemas.microsoft.com/exchange/services/2006/types'
  doc.add_namespace 'm', 'http://schemas.microsoft.com/exchange/services/2006/messages'
end

#convert_id!Object



133
134
135
136
137
138
# File 'lib/ews/service.rb', line 133

def convert_id!
  soap_action = 'http://schemas.microsoft.com/exchange/services/2006/messages/ConvertId'
  response = invoke('tns:ConvertId', soap_action) do |message|
    raise "TODO"
  end
end

#copy_folder!Object



168
169
170
171
172
173
# File 'lib/ews/service.rb', line 168

def copy_folder!
  soap_action = 'http://schemas.microsoft.com/exchange/services/2006/messages/CopyFolder'
  response = invoke('tns:CopyFolder', soap_action) do |message|
    raise "TODO"
  end
end

#copy_item!Object



351
352
353
354
355
356
# File 'lib/ews/service.rb', line 351

def copy_item!
  soap_action = 'http://schemas.microsoft.com/exchange/services/2006/messages/CopyItem'
  response = invoke('tns:CopyItem', soap_action) do |message|
    raise "TODO"
  end
end

#create_attachment!Object



358
359
360
361
362
363
# File 'lib/ews/service.rb', line 358

def create_attachment!
  soap_action = 'http://schemas.microsoft.com/exchange/services/2006/messages/CreateAttachment'
  response = invoke('tns:CreateAttachment', soap_action) do |message|
    raise "TODO"
  end
end

#create_folder!Object



140
141
142
143
144
145
# File 'lib/ews/service.rb', line 140

def create_folder!
  soap_action = 'http://schemas.microsoft.com/exchange/services/2006/messages/CreateFolder'
  response = invoke('tns:CreateFolder', soap_action) do |message|
    raise "TODO"
  end
end

#create_item!(item, destination_folder_id, opts = {}) ⇒ Object



290
291
292
293
294
295
296
297
298
# File 'lib/ews/service.rb', line 290

def create_item!(item, destination_folder_id, opts = {})
  soap_action = 'http://schemas.microsoft.com/exchange/services/2006/messages/CreateItem'
  response = invoke('tns:CreateItem', soap_action) do |create_item|
    builder(create_item, opts) do
      folder_id_container! 'SavedItemFolderId', destination_folder_id
    end
    raise 'TODO'
  end
end

#create_managed_folder!Object



210
211
212
213
214
215
# File 'lib/ews/service.rb', line 210

def create_managed_folder!
  soap_action = 'http://schemas.microsoft.com/exchange/services/2006/messages/CreateManagedFolder'
  response = invoke('tns:CreateManagedFolder', soap_action) do |message|
    raise "TODO"
  end
end

#delete_attachment!Object



365
366
367
368
369
370
# File 'lib/ews/service.rb', line 365

def delete_attachment!
  soap_action = 'http://schemas.microsoft.com/exchange/services/2006/messages/DeleteAttachment'
  response = invoke('tns:DeleteAttachment', soap_action) do |message|
    raise "TODO"
  end
end

#delete_folder!Object



147
148
149
150
151
152
# File 'lib/ews/service.rb', line 147

def delete_folder!
  soap_action = 'http://schemas.microsoft.com/exchange/services/2006/messages/DeleteFolder'
  response = invoke('tns:DeleteFolder', soap_action) do |message|
    raise "TODO"
  end
end

#delete_item!Object



300
301
302
303
304
305
# File 'lib/ews/service.rb', line 300

def delete_item!
  soap_action = 'http://schemas.microsoft.com/exchange/services/2006/messages/DeleteItem'
  response = invoke('tns:DeleteItem', soap_action) do |message|
    raise "TODO"
  end
end

#expand_dl!Object



61
62
63
64
65
66
# File 'lib/ews/service.rb', line 61

def expand_dl!
  soap_action = 'http://schemas.microsoft.com/exchange/services/2006/messages/ExpandDL'
  response = invoke('tns:ExpandDL', soap_action) do |message|
    raise "TODO"
  end
end

#find_folder(folder_ids = :root, opts = {}) ⇒ Object

TODO:

Support options Traversal: Shallow, Deep, SoftDeleted FolderShape: IdOnly, Default, AllProperties

Finds folders for the given parent folder.

FindFolder

FolderShape

Examples:

Request

<FindFolder Traversal="Shallow" xmlns="http://schemas.microsoft.com/exchange/services/2006/messages">
  <FolderShape>
    <t:BaseShape>Default</t:BaseShape>
  </FolderShape>
  <ParentFolderIds>
    <t:DistinguishedFolderId Id="inbox"/>
  </ParentFolderIds>
</FindFolder>

Parameters:

  • opts (Hash) (defaults to: {})

    Options to manipulate the FindFolder response

Options Hash (opts):

  • :base_shape (String, Symbol) — default: Default

    IdOnly, Default, AllProperties

See Also:



92
93
94
95
96
97
98
99
100
101
102
# File 'lib/ews/service.rb', line 92

def find_folder(folder_ids = :root, opts = {})
  soap_action = 'http://schemas.microsoft.com/exchange/services/2006/messages/FindFolder'     
  response = invoke('tns:FindFolder', soap_action) do |find_folder|
    builder(find_folder, opts) do
      traversal!
      folder_shape!
      folder_id_container! 'tns:ParentFolderIds', folder_ids
    end        
  end
  parser.parse_find_folder response.document
end

#find_item(folder_ids = :root, opts = {}) ⇒ Object

FindItem - Exchange 2007

FindItem - Exchange 2010

BaseShape

Examples:

Request

<FindItem xmlns="http://schemas.microsoft.com/exchange/services/2006/messages"
          xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types"
        Traversal="Shallow">
  <ItemShape>
    <t:BaseShape>IdOnly</t:BaseShape>
  </ItemShape>
  <ParentFolderIds>
    <t:DistinguishedFolderId Id="deleteditems"/>
  </ParentFolderIds>
</FindItem>

Parameters:

  • opts (Hash) (defaults to: {})

    Options to manipulate the FindItem response

Options Hash (opts):

  • :base_shape (String, Symbol) — default: Default

    IdOnly, Default, AllProperties

See Also:



241
242
243
244
245
246
247
248
249
250
251
# File 'lib/ews/service.rb', line 241

def find_item(folder_ids = :root, opts = {})
  soap_action = 'http://schemas.microsoft.com/exchange/services/2006/messages/FindItem'
  response = invoke('tns:FindItem', soap_action) do |find_item|
    builder(find_item, opts) do
      traversal!
      item_shape!
      folder_id_container! 'tns:ParentFolderIds', folder_ids         
    end
  end
  parser.parse_find_item response.document
end

#get_attachment(attachment_id, opts = {}) ⇒ Object

GetAttachment

Examples:

Request

<GetAttachment xmlns="http://schemas.microsoft.com/exchange/services/2006/messages"
               xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">
  <AttachmentShape/>
  <AttachmentIds>
    <t:AttachmentId Id="AAAtAEFkbWluaX..."/>
  </AttachmentIds>
</GetAttachment>

Raises:

See Also:



383
384
385
386
387
388
389
390
391
392
393
394
# File 'lib/ews/service.rb', line 383

def get_attachment(attachment_id, opts = {})
  raise PreconditionFailed, "Id must be non-empty" if attachment_id.nil?
  
  soap_action = 'http://schemas.microsoft.com/exchange/services/2006/messages/GetAttachment'
  response = invoke('tns:GetAttachment', soap_action) do |get_attachment|
    builder(get_attachment, opts) do
      attachment_shape!
      attachment_ids! attachment_id
    end
  end
  parser.parse_get_attachment response.document
end

#get_delegateObject



396
397
398
399
400
401
# File 'lib/ews/service.rb', line 396

def get_delegate
  soap_action = 'http://schemas.microsoft.com/exchange/services/2006/messages/GetDelegate'
  response = invoke('tns:GetDelegate', soap_action) do |message|
    raise "TODO"
  end
end

#get_eventsObject



189
190
191
192
193
194
# File 'lib/ews/service.rb', line 189

def get_events
  soap_action = 'http://schemas.microsoft.com/exchange/services/2006/messages/GetEvents'
  response = invoke('tns:GetEvents', soap_action) do |message|
    raise "TODO"
  end
end

#get_folder(folder_id = :root, opts = {}) ⇒ Object

MSDN - GetFolder operation

Examples:

Request


<GetFolder xmlns="http://schemas.microsoft.com/exchange/services/2006/messages"
           xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">
  <FolderShape>
    <t:BaseShape>Default</t:BaseShape>
  </FolderShape>
  <FolderIds>
    <t:DistinguishedFolderId Id="inbox"/>
  </FolderIds>
</GetFolder>

Parameters:

  • opts (Hash) (defaults to: {})

    Options to manipulate the FindFolder response

Options Hash (opts):

  • :base_shape (String, Symbol) — default: Default

    IdOnly, Default, AllProperties

See Also:



122
123
124
125
126
127
128
129
130
131
# File 'lib/ews/service.rb', line 122

def get_folder(folder_id = :root, opts = {})
  soap_action = 'http://schemas.microsoft.com/exchange/services/2006/messages/GetFolder'      
  response = invoke('tns:GetFolder', soap_action) do |get_folder|
    builder(get_folder, opts) do 
      folder_shape!
      folder_id_container! 'tns:FolderIds', folder_id
    end
  end
  parser.parse_get_folder response.document
end

#get_item(item_id, opts = {}) ⇒ Object

GetItem (E-mail Message)

ItemShape

ItmeIds

Examples:

Request for getting a mail message

<GetItem xmlns="http://schemas.microsoft.com/exchange/services/2006/messages"
         xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">
  <ItemShape>
    <t:BaseShape>Default</t:BaseShape>
    <t:IncludeMimeContent>true</t:IncludeMimeContent>
  </ItemShape>
  <ItemIds>
    <t:ItemId Id="AAAlAF" ChangeKey="CQAAAB" />
  </ItemIds>
</GetItem>

Parameters:

  • opts (Hash) (defaults to: {})

    Options to manipulate the FindFolder response

Options Hash (opts):

  • :base_shape (String, Symbol) — default: Default

    IdOnly, Default, AllProperties

  • :change_key (String)

Raises:

See Also:



277
278
279
280
281
282
283
284
285
286
287
288
# File 'lib/ews/service.rb', line 277

def get_item(item_id, opts = {})
  raise PreconditionFailed, "Id must be non-empty" if item_id.nil?
  
  soap_action = 'http://schemas.microsoft.com/exchange/services/2006/messages/GetItem'
  response = invoke('tns:GetItem', soap_action) do |get_item|
    builder(get_item, opts) do
      item_shape!
      item_id_container! 'tns:ItemIds', item_id
    end
  end
  parser.parse_get_item response.document
end

#get_user_availabilityObject



424
425
426
427
428
429
# File 'lib/ews/service.rb', line 424

def get_user_availability
  soap_action = 'http://schemas.microsoft.com/exchange/services/2006/messages/GetUserAvailability'
  response = invoke('tns:GetUserAvailability', soap_action) do |message|
    raise "TODO"
  end
end

#get_user_oof_settingsObject



431
432
433
434
435
436
# File 'lib/ews/service.rb', line 431

def get_user_oof_settings
  soap_action = 'http://schemas.microsoft.com/exchange/services/2006/messages/GetUserOofSettings'
  response = invoke('tns:GetUserOofSettings', soap_action) do |message|
    raise "TODO"
  end
end

#move_folder!Object



161
162
163
164
165
166
# File 'lib/ews/service.rb', line 161

def move_folder!
  soap_action = 'http://schemas.microsoft.com/exchange/services/2006/messages/MoveFolder'
  response = invoke('tns:MoveFolder', soap_action) do |message|
    raise "TODO"
  end
end

#move_item!(folder_id, item_id, opts = {}) ⇒ Object

</MoveItem>

MoveItem

DistinguishedFolderId

Examples:

Request

<MoveItem xmlns="http://schemas.microsoft.com/exchange/services/2006/messages"
         xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">
 <ToFolderId>
   <t:FolderId Id="drafts"/>
 </ToFolderId>
 <ItemIds>
   <t:ItemId Id="AAAtAEF/swbAAA=" ChangeKey="EwAAABYA/s4b"/>
 </ItemIds>

Parameters:

  • folder_id

    Name of the destination folder

  • item_ids (Array)

    List of item ids to be moved

See Also:



341
342
343
344
345
346
347
348
349
# File 'lib/ews/service.rb', line 341

def move_item!(folder_id, item_id, opts = {})
  soap_action = 'http://schemas.microsoft.com/exchange/services/2006/messages/MoveItem'
  response = invoke('tns:MoveItem', soap_action) do |move_item|
    builder(move_item, opts) do
      folder_id_container! 'tns:ToFolderId', folder_id
      item_id_container! 'tns:ItemIds', item_id
    end
  end
end

#on_after_create_http_request(req) ⇒ Object



23
24
25
26
27
# File 'lib/ews/service.rb', line 23

def on_after_create_http_request(req)
  if @@username && @@password 
    req.set_auth @@username, @@password
  end
end

#on_create_document(doc) ⇒ Object



29
30
31
# File 'lib/ews/service.rb', line 29

def on_create_document(doc)
  register_aliases! doc    
end

#on_response_document(doc) ⇒ Object



33
34
35
36
# File 'lib/ews/service.rb', line 33

def on_response_document(doc)
  apply_namespaces! doc
  parser.parse_response_message doc
end

#register_aliases!(doc) ⇒ Object



38
39
40
41
# File 'lib/ews/service.rb', line 38

def register_aliases!(doc)
  doc.alias 'tns', 'http://schemas.microsoft.com/exchange/services/2006/messages'
  doc.alias 't', 'http://schemas.microsoft.com/exchange/services/2006/types'
end

#remove_delegate!Object



410
411
412
413
414
415
# File 'lib/ews/service.rb', line 410

def remove_delegate!
  soap_action = 'http://schemas.microsoft.com/exchange/services/2006/messages/RemoveDelegate'
  response = invoke('tns:RemoveDelegate', soap_action) do |message|
    raise "TODO"
  end
end

#resolve_names!(unresolved_entry, return_full_contact_data = true) ⇒ Object

public methods



50
51
52
53
54
55
56
57
58
59
# File 'lib/ews/service.rb', line 50

def resolve_names!(unresolved_entry, return_full_contact_data = true)
  soap_action = 'http://schemas.microsoft.com/exchange/services/2006/messages/ResolveNames'
  response = invoke('tns:ResolveNames', soap_action) do |resolve_names|
    builder(resolve_names) do
      unresolved_entry! unresolved_entry
      return_full_contact_data! return_full_contact_data
    end
  end
  parser.parse_resolve_names response.document
end

#send_item!Object



314
315
316
317
318
319
# File 'lib/ews/service.rb', line 314

def send_item!
  soap_action = 'http://schemas.microsoft.com/exchange/services/2006/messages/SendItem'
  response = invoke('tns:SendItem', soap_action) do |message|
    raise "TODO"
  end
end

#set_auth(username, password) ⇒ Object



19
20
21
# File 'lib/ews/service.rb', line 19

def set_auth(username, password)
  @@username, @@password = username, password
end

#set_user_oof_settings!Object



438
439
440
441
442
443
# File 'lib/ews/service.rb', line 438

def set_user_oof_settings!
  soap_action = 'http://schemas.microsoft.com/exchange/services/2006/messages/SetUserOofSettings'
  response = invoke('tns:SetUserOofSettings', soap_action) do |message|
    raise "TODO"
  end
end

#subscribe!Object



175
176
177
178
179
180
# File 'lib/ews/service.rb', line 175

def subscribe!
  soap_action = 'http://schemas.microsoft.com/exchange/services/2006/messages/Subscribe'
  response = invoke('tns:Subscribe', soap_action) do |message|
    raise "TODO"
  end
end

#sync_folder_hierarchy!Object



196
197
198
199
200
201
# File 'lib/ews/service.rb', line 196

def sync_folder_hierarchy!
  soap_action = 'http://schemas.microsoft.com/exchange/services/2006/messages/SyncFolderHierarchy'
  response = invoke('tns:SyncFolderHierarchy', soap_action) do |message|
    raise "TODO"
  end
end

#sync_folder_items!Object



203
204
205
206
207
208
# File 'lib/ews/service.rb', line 203

def sync_folder_items!
  soap_action = 'http://schemas.microsoft.com/exchange/services/2006/messages/SyncFolderItems'
  response = invoke('tns:SyncFolderItems', soap_action) do |message|
    raise "TODO"
  end
end

#unsubscribe!Object



182
183
184
185
186
187
# File 'lib/ews/service.rb', line 182

def unsubscribe!
  soap_action = 'http://schemas.microsoft.com/exchange/services/2006/messages/Unsubscribe'
  response = invoke('tns:Unsubscribe', soap_action) do |message|
    raise "TODO"
  end
end

#update_delegate!Object



417
418
419
420
421
422
# File 'lib/ews/service.rb', line 417

def update_delegate!
  soap_action = 'http://schemas.microsoft.com/exchange/services/2006/messages/UpdateDelegate'
  response = invoke('tns:UpdateDelegate', soap_action) do |message|
    raise "TODO"
  end
end

#update_folder!Object



154
155
156
157
158
159
# File 'lib/ews/service.rb', line 154

def update_folder!
  soap_action = 'http://schemas.microsoft.com/exchange/services/2006/messages/UpdateFolder'
  response = invoke('tns:UpdateFolder', soap_action) do |message|
    raise "TODO"
  end
end

#update_item!Object



307
308
309
310
311
312
# File 'lib/ews/service.rb', line 307

def update_item!
  soap_action = 'http://schemas.microsoft.com/exchange/services/2006/messages/UpdateItem'
  response = invoke('tns:UpdateItem', soap_action) do |message|
    raise "TODO"
  end
end