viewpoint 0.1.26 → 1.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/README.md +203 -0
- data/lib/ews/calendar_accessors.rb +34 -0
- data/lib/ews/connection.rb +140 -0
- data/lib/ews/connection_helper.rb +35 -0
- data/lib/ews/convert_accessors.rb +56 -0
- data/lib/{exceptions/exceptions.rb → ews/errors.rb} +29 -19
- data/lib/ews/ews_client.rb +105 -0
- data/lib/ews/exceptions/exceptions.rb +61 -0
- data/lib/ews/folder_accessors.rb +264 -0
- data/lib/ews/impersonation.rb +30 -0
- data/lib/ews/item_accessors.rb +242 -0
- data/lib/ews/mailbox_accessors.rb +92 -0
- data/lib/ews/meeting_accessors.rb +39 -0
- data/lib/ews/message_accessors.rb +93 -0
- data/lib/ews/push_subscription_accessors.rb +33 -0
- data/lib/ews/room_accessors.rb +48 -0
- data/lib/ews/roomlist_accessors.rb +47 -0
- data/lib/ews/soap.rb +64 -0
- data/lib/ews/soap/builders/ews_builder.rb +1384 -0
- data/lib/ews/soap/ews_response.rb +84 -0
- data/lib/ews/soap/ews_soap_availability_response.rb +58 -0
- data/lib/ews/soap/ews_soap_free_busy_response.rb +119 -0
- data/lib/ews/soap/ews_soap_response.rb +103 -0
- data/lib/ews/soap/ews_soap_room_response.rb +53 -0
- data/lib/ews/soap/ews_soap_roomlist_response.rb +54 -0
- data/lib/ews/soap/exchange_availability.rb +61 -0
- data/lib/ews/soap/exchange_data_services.rb +780 -0
- data/lib/ews/soap/exchange_notification.rb +146 -0
- data/lib/ews/soap/exchange_synchronization.rb +93 -0
- data/lib/ews/soap/exchange_time_zones.rb +56 -0
- data/lib/ews/soap/exchange_user_configuration.rb +33 -0
- data/lib/ews/soap/exchange_web_service.rb +264 -0
- data/lib/{model/item_attachment.rb → ews/soap/parsers/ews_parser.rb} +24 -14
- data/lib/ews/soap/parsers/ews_sax_document.rb +70 -0
- data/lib/ews/soap/response_message.rb +80 -0
- data/lib/ews/soap/responses/create_attachment_response_message.rb +47 -0
- data/lib/{model/meeting_message.rb → ews/soap/responses/create_item_response_message.rb} +7 -10
- data/lib/ews/soap/responses/find_item_response_message.rb +80 -0
- data/lib/ews/soap/responses/get_events_response_message.rb +53 -0
- data/lib/ews/soap/responses/send_notification_response_message.rb +59 -0
- data/lib/{model/attachment.rb → ews/soap/responses/subscribe_response_message.rb} +17 -13
- data/lib/{model/attendee.rb → ews/soap/responses/sync_folder_hierarchy_response_message.rb} +14 -15
- data/lib/ews/soap/responses/sync_folder_items_response_message.rb +36 -0
- data/lib/ews/templates/calendar_item.rb +79 -0
- data/lib/ews/templates/forward_item.rb +24 -0
- data/lib/ews/templates/message.rb +85 -0
- data/lib/ews/templates/reply_to_item.rb +25 -0
- data/lib/ews/templates/task.rb +74 -0
- data/lib/ews/types.rb +194 -0
- data/lib/ews/types/attachment.rb +77 -0
- data/lib/{model/meeting_cancellation.rb → ews/types/attendee.rb} +9 -8
- data/lib/ews/types/calendar_folder.rb +50 -0
- data/lib/ews/types/calendar_item.rb +130 -0
- data/lib/ews/types/contact.rb +7 -0
- data/lib/ews/types/contacts_folder.rb +8 -0
- data/lib/ews/types/copied_event.rb +51 -0
- data/lib/{soap/handsoap/builder.rb → ews/types/created_event.rb} +5 -2
- data/lib/ews/types/deleted_event.rb +24 -0
- data/lib/ews/types/distribution_list.rb +7 -0
- data/lib/ews/types/event.rb +62 -0
- data/lib/ews/types/export_items_response_message.rb +52 -0
- data/lib/ews/types/file_attachment.rb +65 -0
- data/lib/ews/types/folder.rb +60 -0
- data/lib/ews/types/free_busy_changed_event.rb +24 -0
- data/lib/ews/types/generic_folder.rb +418 -0
- data/lib/ews/types/item.rb +447 -0
- data/lib/ews/types/item_attachment.rb +84 -0
- data/lib/{model → ews/types}/item_field_uri_map.rb +2 -18
- data/lib/ews/types/mailbox_user.rb +156 -0
- data/lib/ews/types/meeting_cancellation.rb +7 -0
- data/lib/ews/types/meeting_message.rb +7 -0
- data/lib/ews/types/meeting_request.rb +7 -0
- data/lib/ews/types/meeting_response.rb +7 -0
- data/lib/ews/types/message.rb +7 -0
- data/lib/ews/types/modified_event.rb +48 -0
- data/lib/{extensions/string.rb → ews/types/moved_event.rb} +31 -15
- data/lib/ews/types/new_mail_event.rb +24 -0
- data/lib/ews/types/out_of_office.rb +147 -0
- data/lib/ews/types/post_item.rb +7 -0
- data/lib/ews/types/search_folder.rb +8 -0
- data/lib/ews/types/status_event.rb +39 -0
- data/lib/ews/types/task.rb +41 -0
- data/lib/ews/types/tasks_folder.rb +27 -0
- data/lib/viewpoint.rb +85 -108
- data/lib/{model/distribution_list.rb → viewpoint/logging.rb} +6 -3
- data/lib/{model/meeting_response.rb → viewpoint/logging/config.rb} +3 -3
- data/lib/viewpoint/string_utils.rb +76 -0
- metadata +156 -123
- data/README +0 -114
- data/lib/model/calendar_folder.rb +0 -67
- data/lib/model/calendar_item.rb +0 -267
- data/lib/model/contact.rb +0 -238
- data/lib/model/contacts_folder.rb +0 -46
- data/lib/model/event.rb +0 -116
- data/lib/model/file_attachment.rb +0 -53
- data/lib/model/folder.rb +0 -47
- data/lib/model/generic_folder.rb +0 -461
- data/lib/model/item.rb +0 -312
- data/lib/model/mailbox_user.rb +0 -146
- data/lib/model/meeting_request.rb +0 -39
- data/lib/model/message.rb +0 -142
- data/lib/model/model.rb +0 -269
- data/lib/model/search_folder.rb +0 -48
- data/lib/model/task.rb +0 -121
- data/lib/model/tasks_folder.rb +0 -44
- data/lib/soap/handsoap/builders/ews_build_helpers.rb +0 -383
- data/lib/soap/handsoap/builders/ews_builder.rb +0 -146
- data/lib/soap/handsoap/ews_service.rb +0 -790
- data/lib/soap/handsoap/parser.rb +0 -104
- data/lib/soap/handsoap/parsers/ews_parser.rb +0 -245
- data/lib/soap/soap_provider.rb +0 -64
@@ -20,17 +20,14 @@ module Viewpoint
|
|
20
20
|
module EWS
|
21
21
|
module ItemFieldUriMap
|
22
22
|
|
23
|
-
FIELD_URIS= {
|
24
|
-
:
|
25
|
-
:display_name => {:text => 'folder:DisplayName', :writable => true},
|
26
|
-
:unread_count => {:text => 'folder:UnreadCount', :writable => true},
|
23
|
+
FIELD_URIS= {
|
24
|
+
:folder_id => {:text => 'folder:FolderId', :writable => true},
|
27
25
|
:total_count => {:text => 'folder:TotalCount', :writable => true},
|
28
26
|
:child_folder_count => {:text => 'folder:ChildFolderCount', :writable => true},
|
29
27
|
:folder_class => {:text => 'folder:FolderClass', :writable => true},
|
30
28
|
:search_parameters => {:text => 'folder:SearchParameters', :writable => true},
|
31
29
|
:managed_folder_information => {:text => 'folder:ManagedFolderInformation', :writable => true},
|
32
30
|
:permission_set => {:text => 'folder:PermissionSet', :writable => true},
|
33
|
-
:effective_rights => {:text => 'folder:EffectiveRights', :writable => true},
|
34
31
|
:sharing_effective_rights => {:text => 'folder:SharingEffectiveRights', :writable => true},
|
35
32
|
:item_id => {:text => 'item:ItemId', :writable => true},
|
36
33
|
:parent_folder_id => {:text => 'item:ParentFolderId', :writable => true},
|
@@ -39,10 +36,6 @@ module Viewpoint
|
|
39
36
|
:attachments => {:text => 'item:Attachments', :writable => true},
|
40
37
|
:subject => {:text => 'item:Subject', :writable => true},
|
41
38
|
:date_time_received => {:text => 'item:DateTimeReceived', :writable => true},
|
42
|
-
:size => {:text => 'item:Size', :writable => true},
|
43
|
-
:categories => {:text => 'item:Categories', :writable => true},
|
44
|
-
:has_attachments => {:text => 'item:HasAttachments', :writable => true},
|
45
|
-
:importance => {:text => 'item:Importance', :writable => true},
|
46
39
|
:in_reply_to => {:text => 'item:InReplyTo', :writable => true},
|
47
40
|
:internet_message_headers => {:text => 'item:InternetMessageHeaders', :writable => true},
|
48
41
|
:is_associated => {:text => 'item:IsAssociated', :writable => true},
|
@@ -61,19 +54,15 @@ module Viewpoint
|
|
61
54
|
:reminder_minutes_before_start => {:text => 'item:ReminderMinutesBeforeStart', :writable => true},
|
62
55
|
:display_to => {:text => 'item:DisplayTo', :writable => true},
|
63
56
|
:display_cc => {:text => 'item:DisplayCc', :writable => true},
|
64
|
-
:culture => {:text => 'item:Culture', :writable => true},
|
65
57
|
:effective_rights => {:text => 'item:EffectiveRights', :writable => true},
|
66
58
|
:last_modified_name => {:text => 'item:LastModifiedName', :writable => true},
|
67
59
|
:last_modified_time => {:text => 'item:LastModifiedTime', :writable => true},
|
68
|
-
:conversation_id => {:text => 'item:ConversationId', :writable => true},
|
69
60
|
:unique_body => {:text => 'item:UniqueBody', :writable => true},
|
70
61
|
:web_client_read_form_query_string => {:text => 'item:WebClientReadFormQueryString', :writable => true},
|
71
62
|
:web_client_edit_form_query_string => {:text => 'item:WebClientEditFormQueryString', :writable => true},
|
72
63
|
:conversation_index => {:text => 'message:ConversationIndex', :writable => true},
|
73
|
-
:conversation_topic => {:text => 'message:ConversationTopic', :writable => true},
|
74
64
|
:internet_message_id => {:text => 'message:InternetMessageId', :writable => true},
|
75
65
|
:is_read => {:text => 'message:IsRead', :writable => true},
|
76
|
-
:is_response_requested => {:text => 'message:IsResponseRequested', :writable => true},
|
77
66
|
:is_read_receipt_requested => {:text => 'message:IsReadReceiptRequested', :writable => true},
|
78
67
|
:is_delivery_receipt_requested => {:text => 'message:IsDeliveryReceiptRequested', :writable => true},
|
79
68
|
:references => {:text => 'message:References', :writable => true},
|
@@ -99,7 +88,6 @@ module Viewpoint
|
|
99
88
|
:when => {:text => 'calendar:When', :writable => true},
|
100
89
|
:is_meeting => {:text => 'calendar:IsMeeting', :writable => true},
|
101
90
|
:is_cancelled => {:text => 'calendar:IsCancelled', :writable => true},
|
102
|
-
:is_recurring => {:text => 'calendar:IsRecurring', :writable => true},
|
103
91
|
:meeting_request_was_sent => {:text => 'calendar:MeetingRequestWasSent', :writable => true},
|
104
92
|
:is_response_requested => {:text => 'calendar:IsResponseRequested', :writable => true},
|
105
93
|
:calendar_item_type => {:text => 'calendar:CalendarItemType', :writable => true},
|
@@ -117,7 +105,6 @@ module Viewpoint
|
|
117
105
|
:appointment_reply_time => {:text => 'calendar:AppointmentReplyTime', :writable => true},
|
118
106
|
:appointment_sequence_number => {:text => 'calendar:AppointmentSequenceNumber', :writable => true},
|
119
107
|
:appointment_state => {:text => 'calendar:AppointmentState', :writable => true},
|
120
|
-
:recurrence => {:text => 'calendar:Recurrence', :writable => true},
|
121
108
|
:first_occurrence => {:text => 'calendar:FirstOccurrence', :writable => true},
|
122
109
|
:last_occurrence => {:text => 'calendar:LastOccurrence', :writable => true},
|
123
110
|
:modified_occurrences => {:text => 'calendar:ModifiedOccurrences', :writable => true},
|
@@ -137,7 +124,6 @@ module Viewpoint
|
|
137
124
|
:assigned_time => {:text => 'task:AssignedTime', :writable => true},
|
138
125
|
:billing_information => {:text => 'task:BillingInformation', :writable => true},
|
139
126
|
:change_count => {:text => 'task:ChangeCount', :writable => true},
|
140
|
-
:companies => {:text => 'task:Companies', :writable => true},
|
141
127
|
:complete_date => {:text => 'task:CompleteDate', :writable => true},
|
142
128
|
:contacts => {:text => 'task:Contacts', :writable => true},
|
143
129
|
:delegation_state => {:text => 'task:DelegationState', :writable => true},
|
@@ -147,7 +133,6 @@ module Viewpoint
|
|
147
133
|
:is_complete => {:text => 'task:IsComplete', :writable => true},
|
148
134
|
:is_recurring => {:text => 'task:IsRecurring', :writable => true},
|
149
135
|
:is_team_task => {:text => 'task:IsTeamTask', :writable => true},
|
150
|
-
:mileage => {:text => 'task:Mileage', :writable => true},
|
151
136
|
:owner => {:text => 'task:Owner', :writable => true},
|
152
137
|
:percent_complete => {:text => 'task:PercentComplete', :writable => true},
|
153
138
|
:recurrence => {:text => 'task:Recurrence', :writable => true},
|
@@ -218,7 +203,6 @@ module Viewpoint
|
|
218
203
|
:item_ids => {:text => 'conversation:ItemIds', :writable => true},
|
219
204
|
:global_item_ids => {:text => 'conversation:GlobalItemIds', :writable => true}
|
220
205
|
}
|
221
|
-
|
222
206
|
end
|
223
207
|
end
|
224
208
|
end
|
@@ -0,0 +1,156 @@
|
|
1
|
+
=begin
|
2
|
+
This file is part of Viewpoint; the Ruby library for Microsoft Exchange Web Services.
|
3
|
+
|
4
|
+
Copyright © 2011 Dan Wanek <dan.wanek@gmail.com>
|
5
|
+
|
6
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
+
you may not use this file except in compliance with the License.
|
8
|
+
You may obtain a copy of the License at
|
9
|
+
|
10
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
11
|
+
|
12
|
+
Unless required by applicable law or agreed to in writing, software
|
13
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
+
See the License for the specific language governing permissions and
|
16
|
+
limitations under the License.
|
17
|
+
=end
|
18
|
+
|
19
|
+
module Viewpoint::EWS::Types
|
20
|
+
|
21
|
+
# This represents a Mailbox object in the Exchange data store
|
22
|
+
# @see http://msdn.microsoft.com/en-us/library/aa565036.aspx MSDN docs
|
23
|
+
# @todo Design a Class method that resolves to an Array of MailboxUsers
|
24
|
+
class MailboxUser
|
25
|
+
include Viewpoint::EWS
|
26
|
+
include Viewpoint::EWS::Types
|
27
|
+
|
28
|
+
MAILBOX_KEY_PATHS = {
|
29
|
+
name: [:name],
|
30
|
+
email_address: [:email_address],
|
31
|
+
}
|
32
|
+
MAILBOX_KEY_TYPES = {}
|
33
|
+
MAILBOX_KEY_ALIAS = {
|
34
|
+
email: :email_address,
|
35
|
+
}
|
36
|
+
|
37
|
+
def initialize(ews, mbox_user)
|
38
|
+
@ews = ews
|
39
|
+
@ews_item = mbox_user
|
40
|
+
simplify!
|
41
|
+
end
|
42
|
+
|
43
|
+
def out_of_office_settings
|
44
|
+
mailbox = {:address => self.email_address}
|
45
|
+
resp = @ews.get_user_oof_settings(mailbox)
|
46
|
+
ewsi = resp.response.clone
|
47
|
+
ewsi.delete(:response_message)
|
48
|
+
return OutOfOffice.new(self,ewsi)
|
49
|
+
s = resp[:oof_settings]
|
50
|
+
@oof_state = s[:oof_state][:text]
|
51
|
+
@oof_ext_audience = s[:external_audience][:text]
|
52
|
+
@oof_start = DateTime.parse(s[:duration][:start_time][:text])
|
53
|
+
@oof_end = DateTime.parse(s[:duration][:end_time][:text])
|
54
|
+
@oof_internal_reply = s[:internal_reply][:message][:text]
|
55
|
+
@oof_external_reply = s[:internal_reply][:message][:text]
|
56
|
+
true
|
57
|
+
end
|
58
|
+
|
59
|
+
# Get information about when the user with the given email address is available.
|
60
|
+
# @param [String] email_address The email address of the person to find availability for.
|
61
|
+
# @param [DateTime] start_time The start of the time range to check as an xs:dateTime.
|
62
|
+
# @param [DateTime] end_time The end of the time range to check as an xs:dateTime.
|
63
|
+
# @see http://msdn.microsoft.com/en-us/library/aa563800(v=exchg.140)
|
64
|
+
def get_user_availability(email_address, start_time, end_time)
|
65
|
+
opts = {
|
66
|
+
mailbox_data: [ :email =>{:address => email_address} ],
|
67
|
+
free_busy_view_options: {
|
68
|
+
time_window: {start_time: start_time, end_time: end_time},
|
69
|
+
}
|
70
|
+
}
|
71
|
+
resp = (Viewpoint::EWS::EWS.instance).ews.get_user_availability(opts)
|
72
|
+
if(resp.status == 'Success')
|
73
|
+
return resp.items
|
74
|
+
else
|
75
|
+
raise EwsError, "GetUserAvailability produced an error: #{resp.code}: #{resp.message}"
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
# Adds one or more delegates to a principal's mailbox and sets specific access permissions
|
80
|
+
# @see http://msdn.microsoft.com/en-us/library/bb856527.aspx
|
81
|
+
#
|
82
|
+
# @param [String,MailboxUser] delegate_email The user you would like to give delegate access to.
|
83
|
+
# This can either be a simple String e-mail address or you can pass in a MailboxUser object.
|
84
|
+
# @param [Hash] permissions A hash of folder type keys and permission type values. An example
|
85
|
+
# would be {:calendar_folder_permission_level => 'Editor'}. Possible keys are:
|
86
|
+
# :calendar_folder_permission_level, :tasks_folder_permission_level, :inbox_folder_permission_level
|
87
|
+
# :contacts_folder_permission_level, :notes_folder_permission_level, :journal_folder_permission_level
|
88
|
+
# and possible values are: None/Editor/Reviewer/Author/Custom
|
89
|
+
# @return [true] This method either returns true or raises an error with the message
|
90
|
+
# as to why this operation did not succeed.
|
91
|
+
def add_delegate!(delegate_email, permissions)
|
92
|
+
# Use a new hash so the passed hash is not modified in case we are in a loop.
|
93
|
+
# Thanks to Markus Roberts for pointing this out.
|
94
|
+
formatted_perms = {}
|
95
|
+
# Modify permissions so we can pass it to the builders
|
96
|
+
permissions.each_pair do |k,v|
|
97
|
+
formatted_perms[k] = {:text => v}
|
98
|
+
end
|
99
|
+
|
100
|
+
resp = (Viewpoint::EWS::EWS.instance).ews.add_delegate(self.email_address, delegate_email, formatted_perms)
|
101
|
+
if(resp.status == 'Success')
|
102
|
+
return true
|
103
|
+
else
|
104
|
+
raise EwsError, "Could not add delegate access for user #{delegate_email}: #{resp.code}, #{resp.message}"
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
def update_delegate!(delegate_email, permissions)
|
109
|
+
# Modify permissions so we can pass it to the builders
|
110
|
+
formatted_perms = {}
|
111
|
+
permissions.each_pair do |k,v|
|
112
|
+
formatted_perms[k] = {:text => v}
|
113
|
+
end
|
114
|
+
|
115
|
+
resp = (Viewpoint::EWS::EWS.instance).ews.update_delegate(self.email_address, delegate_email, formatted_perms)
|
116
|
+
if(resp.status == 'Success')
|
117
|
+
return true
|
118
|
+
else
|
119
|
+
raise EwsError, "Could not update delegate access for user #{delegate_email}: #{resp.code}, #{resp.message}"
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
def get_delegate_info()
|
124
|
+
resp = (Viewpoint::EWS::EWS.instance).ews.get_delegate(self.email_address)
|
125
|
+
# if(resp.status == 'Success')
|
126
|
+
# return true
|
127
|
+
# else
|
128
|
+
# raise EwsError, "Could not update delegate access for user #{delegate_email}: #{resp.code}, #{resp.message}"
|
129
|
+
# end
|
130
|
+
end
|
131
|
+
|
132
|
+
|
133
|
+
private
|
134
|
+
|
135
|
+
|
136
|
+
def simplify!
|
137
|
+
@ews_item = @ews_item.inject({}){|m,o|
|
138
|
+
m[o.keys.first] = o.values.first[:text];
|
139
|
+
m
|
140
|
+
}
|
141
|
+
end
|
142
|
+
|
143
|
+
def key_paths
|
144
|
+
@key_paths ||= super.merge(MAILBOX_KEY_PATHS)
|
145
|
+
end
|
146
|
+
|
147
|
+
def key_types
|
148
|
+
@key_types ||= super.merge(MAILBOX_KEY_TYPES)
|
149
|
+
end
|
150
|
+
|
151
|
+
def key_alias
|
152
|
+
@key_alias ||= super.merge(MAILBOX_KEY_ALIAS)
|
153
|
+
end
|
154
|
+
|
155
|
+
end # MailboxUser
|
156
|
+
end # Viewpoint::EWS::Types
|
@@ -0,0 +1,48 @@
|
|
1
|
+
=begin
|
2
|
+
This file is part of Viewpoint; the Ruby library for Microsoft Exchange Web Services.
|
3
|
+
|
4
|
+
Copyright © 2011 Dan Wanek <dan.wanek@gmail.com>
|
5
|
+
|
6
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
+
you may not use this file except in compliance with the License.
|
8
|
+
You may obtain a copy of the License at
|
9
|
+
|
10
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
11
|
+
|
12
|
+
Unless required by applicable law or agreed to in writing, software
|
13
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
+
See the License for the specific language governing permissions and
|
16
|
+
limitations under the License.
|
17
|
+
=end
|
18
|
+
|
19
|
+
module Viewpoint::EWS::Types
|
20
|
+
|
21
|
+
class ModifiedEvent < Event
|
22
|
+
|
23
|
+
MODIFIED_EVENT_KEY_PATHS = {
|
24
|
+
}
|
25
|
+
|
26
|
+
MODIFIED_EVENT_KEY_TYPES = {
|
27
|
+
}
|
28
|
+
|
29
|
+
MODIFIED_EVENT_KEY_ALIAS = { }
|
30
|
+
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
|
35
|
+
def key_paths
|
36
|
+
@key_paths ||= super.merge MODIFIED_EVENT_KEY_PATHS
|
37
|
+
end
|
38
|
+
|
39
|
+
def key_types
|
40
|
+
@key_types ||= super.merge MODIFIED_EVENT_KEY_TYPES
|
41
|
+
end
|
42
|
+
|
43
|
+
def key_alias
|
44
|
+
@key_alias ||= super.merge MODIFIED_EVENT_KEY_ALIAS
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
end
|
@@ -16,20 +16,36 @@
|
|
16
16
|
limitations under the License.
|
17
17
|
=end
|
18
18
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
19
|
+
module Viewpoint::EWS::Types
|
20
|
+
|
21
|
+
class MovedEvent < Event
|
22
|
+
|
23
|
+
MOVED_EVENT_KEY_PATHS = {
|
24
|
+
:old_item_id => [:old_item_id, :attribs],
|
25
|
+
:old_folder_id => [:old_folder_id, :attribs],
|
26
|
+
:old_parent_folder_id => [:old_parent_folder_id, :attribs],
|
27
|
+
}
|
28
|
+
|
29
|
+
MOVED_EVENT_KEY_TYPES = {
|
30
|
+
}
|
31
|
+
|
32
|
+
MOVED_EVENT_KEY_ALIAS = { }
|
33
|
+
|
34
|
+
|
35
|
+
private
|
36
|
+
|
37
|
+
|
38
|
+
def key_paths
|
39
|
+
@key_paths ||= super.merge MOVED_EVENT_KEY_PATHS
|
40
|
+
end
|
41
|
+
|
42
|
+
def key_types
|
43
|
+
@key_types ||= super.merge MOVED_EVENT_KEY_TYPES
|
44
|
+
end
|
45
|
+
|
46
|
+
def key_alias
|
47
|
+
@key_alias ||= super.merge MOVED_EVENT_KEY_ALIAS
|
48
|
+
end
|
28
49
|
|
29
|
-
# Change a ruby_cased string to CamelCased
|
30
|
-
def camel_case
|
31
|
-
self.split(/_/).map { |i|
|
32
|
-
i.sub(/^./) { |s| s.upcase }
|
33
|
-
}.join
|
34
50
|
end
|
35
|
-
end
|
51
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
=begin
|
2
|
+
This file is part of Viewpoint; the Ruby library for Microsoft Exchange Web Services.
|
3
|
+
|
4
|
+
Copyright © 2011 Dan Wanek <dan.wanek@gmail.com>
|
5
|
+
|
6
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
+
you may not use this file except in compliance with the License.
|
8
|
+
You may obtain a copy of the License at
|
9
|
+
|
10
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
11
|
+
|
12
|
+
Unless required by applicable law or agreed to in writing, software
|
13
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
+
See the License for the specific language governing permissions and
|
16
|
+
limitations under the License.
|
17
|
+
=end
|
18
|
+
|
19
|
+
module Viewpoint::EWS::Types
|
20
|
+
|
21
|
+
class NewMailEvent < Event
|
22
|
+
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,147 @@
|
|
1
|
+
=begin
|
2
|
+
This file is part of Viewpoint; the Ruby library for Microsoft Exchange Web Services.
|
3
|
+
|
4
|
+
Copyright © 2011 Dan Wanek <dan.wanek@gmail.com>
|
5
|
+
|
6
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
+
you may not use this file except in compliance with the License.
|
8
|
+
You may obtain a copy of the License at
|
9
|
+
|
10
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
11
|
+
|
12
|
+
Unless required by applicable law or agreed to in writing, software
|
13
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
+
See the License for the specific language governing permissions and
|
16
|
+
limitations under the License.
|
17
|
+
=end
|
18
|
+
|
19
|
+
module Viewpoint::EWS::Types
|
20
|
+
|
21
|
+
OOF_KEY_PATHS = {
|
22
|
+
:enabled? => [:oof_settings, :oof_state],
|
23
|
+
:scheduled? => [:oof_settings, :oof_state],
|
24
|
+
:duration => [:oof_settings, :duration],
|
25
|
+
}
|
26
|
+
|
27
|
+
OOF_KEY_TYPES = {
|
28
|
+
:enabled? => ->(str){str == :enabled},
|
29
|
+
:scheduled? => ->(str){str == :scheduled},
|
30
|
+
:duration => ->(hsh){ hsh[:start_time]..hsh[:end_time] },
|
31
|
+
}
|
32
|
+
|
33
|
+
OOF_KEY_ALIAS = {}
|
34
|
+
|
35
|
+
# This represents OutOfOffice settings
|
36
|
+
# @see http://msdn.microsoft.com/en-us/library/aa563465.aspx
|
37
|
+
class OutOfOffice
|
38
|
+
include Viewpoint::EWS
|
39
|
+
include Viewpoint::EWS::Types
|
40
|
+
|
41
|
+
attr_reader :user
|
42
|
+
|
43
|
+
# @param [MailboxUser] user
|
44
|
+
# @param [Hash] ews_item
|
45
|
+
def initialize(user, ews_item)
|
46
|
+
@ews = user.ews
|
47
|
+
@user = user
|
48
|
+
@ews_item = ews_item
|
49
|
+
@changed = false
|
50
|
+
simplify!
|
51
|
+
end
|
52
|
+
|
53
|
+
def changed?
|
54
|
+
@changed
|
55
|
+
end
|
56
|
+
|
57
|
+
def save!
|
58
|
+
return true unless changed?
|
59
|
+
opts = { mailbox: {address: user.email_address} }.merge(@ews_item[:oof_settings])
|
60
|
+
resp = @ews.set_user_oof_settings(opts)
|
61
|
+
if resp.success?
|
62
|
+
@changed = false
|
63
|
+
true
|
64
|
+
else
|
65
|
+
raise SaveFailed, "Could not save #{self.class}. #{resp.code}: #{resp.message}"
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
def enable
|
70
|
+
return true if enabled?
|
71
|
+
@changed = true
|
72
|
+
@ews_item[:oof_settings][:oof_state] = :enabled
|
73
|
+
end
|
74
|
+
|
75
|
+
def disable
|
76
|
+
return true unless enabled? || scheduled?
|
77
|
+
@changed = true
|
78
|
+
@ews_item[:oof_settings][:oof_state] = :disabled
|
79
|
+
end
|
80
|
+
|
81
|
+
# Schedule an out of office.
|
82
|
+
# @param [DateTime] start_time
|
83
|
+
# @param [DateTime] end_time
|
84
|
+
def schedule(start_time, end_time)
|
85
|
+
@changed = true
|
86
|
+
@ews_item[:oof_settings][:oof_state] = :scheduled
|
87
|
+
set_duration start_time, end_time
|
88
|
+
end
|
89
|
+
|
90
|
+
# Specify a duration for this Out Of Office setting
|
91
|
+
# @param [DateTime] start_time
|
92
|
+
# @param [DateTime] end_time
|
93
|
+
def set_duration(start_time, end_time)
|
94
|
+
@changed = true
|
95
|
+
@ews_item[:oof_settings][:duration][:start_time] = start_time
|
96
|
+
@ews_item[:oof_settings][:duration][:end_time] = end_time
|
97
|
+
end
|
98
|
+
|
99
|
+
# A message to send to internal users
|
100
|
+
# @param [String] message
|
101
|
+
def internal_reply=(message)
|
102
|
+
@changed = true
|
103
|
+
@ews_item[:oof_settings][:internal_reply] = message
|
104
|
+
end
|
105
|
+
|
106
|
+
# A message to send to external users
|
107
|
+
# @param [String] message
|
108
|
+
def external_reply=(message)
|
109
|
+
@changed = true
|
110
|
+
@ews_item[:oof_settings][:external_reply] = message
|
111
|
+
end
|
112
|
+
|
113
|
+
|
114
|
+
private
|
115
|
+
|
116
|
+
def key_paths
|
117
|
+
@key_paths ||= super.merge(OOF_KEY_PATHS)
|
118
|
+
end
|
119
|
+
|
120
|
+
def key_types
|
121
|
+
@key_types ||= super.merge(OOF_KEY_TYPES)
|
122
|
+
end
|
123
|
+
|
124
|
+
def key_alias
|
125
|
+
@key_alias ||= super.merge(OOF_KEY_ALIAS)
|
126
|
+
end
|
127
|
+
|
128
|
+
def simplify!
|
129
|
+
oof_settings = @ews_item[:oof_settings][:elems].inject(:merge)
|
130
|
+
oof_settings[:oof_state] = oof_settings[:oof_state][:text].downcase.to_sym
|
131
|
+
oof_settings[:external_audience] = oof_settings[:external_audience][:text]
|
132
|
+
if oof_settings[:duration]
|
133
|
+
dur = oof_settings[:duration][:elems].inject(:merge)
|
134
|
+
oof_settings[:duration] = {
|
135
|
+
start_time: DateTime.iso8601(dur[:start_time][:text]),
|
136
|
+
end_time: DateTime.iso8601(dur[:end_time][:text])
|
137
|
+
}
|
138
|
+
end
|
139
|
+
oof_settings[:internal_reply] = oof_settings[:internal_reply][:elems][0][:message][:text] || ""
|
140
|
+
oof_settings[:external_reply] = oof_settings[:external_reply][:elems][0][:message][:text] || ""
|
141
|
+
@ews_item[:oof_settings] = oof_settings
|
142
|
+
@ews_item[:allow_external_oof] = @ews_item[:allow_external_oof][:text]
|
143
|
+
end
|
144
|
+
|
145
|
+
end #OutOfOffice
|
146
|
+
|
147
|
+
end
|