viewpoint 0.1.9 → 0.1.10
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/field_hash.txt +197 -0
- data/lib/field_hash2.txt +1 -0
- data/lib/model/calendar_folder.rb +13 -15
- data/lib/model/contact.rb +83 -0
- data/lib/model/generic_folder.rb +12 -11
- data/lib/model/item.rb +44 -5
- data/lib/model/item_attachment.rb +2 -1
- data/lib/model/item_field_uri_map.rb +206 -0
- data/lib/model/message.rb +4 -4
- data/lib/model/model.rb +41 -3
- data/lib/model/task.rb +7 -9
- data/lib/soap/handsoap/ews_service.rb +7 -3
- data/lib/soap/handsoap/parsers/ews_parser.rb +4 -1
- data/lib/viewpoint.rb +3 -0
- metadata +32 -38
- data/Rakefile +0 -79
- data/VERSION +0 -1
- data/preamble +0 -19
- data/test/.rspec +0 -7
- data/test/spec/basic_functions.spec +0 -69
- data/test/spec/folder_subscriptions.spec +0 -35
- data/test/spec/folder_synchronization.spec +0 -36
- data/test/spec/item_tests.spec +0 -44
- data/utils/ewsWSDL2rb.rb +0 -29
@@ -26,7 +26,8 @@ module Viewpoint
|
|
26
26
|
|
27
27
|
# @param [String] attachment_id The unique ID for the attachment.
|
28
28
|
def initialize(attachment_id)
|
29
|
-
raise EwsNotImplemented, "ItemAttachments are not yet implemented in Viewpoint"
|
29
|
+
#raise EwsNotImplemented, "ItemAttachments are not yet implemented in Viewpoint"
|
30
|
+
warn "ItemAttachments are not yet implemented in Viewpoint"
|
30
31
|
end
|
31
32
|
|
32
33
|
end # ItemAttachment
|
@@ -0,0 +1,206 @@
|
|
1
|
+
module Viewpoint
|
2
|
+
module EWS
|
3
|
+
module ItemFieldUriMap
|
4
|
+
|
5
|
+
FIELD_URIS= {:folder_id => {:text => 'older:FolderId', :writable => true},
|
6
|
+
:parent_folder_id => {:text => 'folder:ParentFolderId', :writable => true},
|
7
|
+
:display_name => {:text => 'folder:DisplayName', :writable => true},
|
8
|
+
:unread_count => {:text => 'folder:UnreadCount', :writable => true},
|
9
|
+
:total_count => {:text => 'folder:TotalCount', :writable => true},
|
10
|
+
:child_folder_count => {:text => 'folder:ChildFolderCount', :writable => true},
|
11
|
+
:folder_class => {:text => 'folder:FolderClass', :writable => true},
|
12
|
+
:search_parameters => {:text => 'folder:SearchParameters', :writable => true},
|
13
|
+
:managed_folder_information => {:text => 'folder:ManagedFolderInformation', :writable => true},
|
14
|
+
:permission_set => {:text => 'folder:PermissionSet', :writable => true},
|
15
|
+
:effective_rights => {:text => 'folder:EffectiveRights', :writable => true},
|
16
|
+
:sharing_effective_rights => {:text => 'folder:SharingEffectiveRights', :writable => true},
|
17
|
+
:item_id => {:text => 'item:ItemId', :writable => true},
|
18
|
+
:parent_folder_id => {:text => 'item:ParentFolderId', :writable => true},
|
19
|
+
:item_class => {:text => 'item:ItemClass', :writable => true},
|
20
|
+
:mime_content => {:text => 'item:MimeContent', :writable => true},
|
21
|
+
:attachments => {:text => 'item:Attachments', :writable => true},
|
22
|
+
:subject => {:text => 'item:Subject', :writable => true},
|
23
|
+
:date_time_received => {:text => 'item:DateTimeReceived', :writable => true},
|
24
|
+
:size => {:text => 'item:Size', :writable => true},
|
25
|
+
:categories => {:text => 'item:Categories', :writable => true},
|
26
|
+
:has_attachments => {:text => 'item:HasAttachments', :writable => true},
|
27
|
+
:importance => {:text => 'item:Importance', :writable => true},
|
28
|
+
:in_reply_to => {:text => 'item:InReplyTo', :writable => true},
|
29
|
+
:internet_message_headers => {:text => 'item:InternetMessageHeaders', :writable => true},
|
30
|
+
:is_associated => {:text => 'item:IsAssociated', :writable => true},
|
31
|
+
:is_draft => {:text => 'item:IsDraft', :writable => true},
|
32
|
+
:is_from_me => {:text => 'item:IsFromMe', :writable => true},
|
33
|
+
:is_resend => {:text => 'item:IsResend', :writable => true},
|
34
|
+
:is_submitted => {:text => 'item:IsSubmitted', :writable => true},
|
35
|
+
:is_unmodified => {:text => 'item:IsUnmodified', :writable => true},
|
36
|
+
:date_time_sent => {:text => 'item:DateTimeSent', :writable => true},
|
37
|
+
:date_time_created => {:text => 'item:DateTimeCreated', :writable => true},
|
38
|
+
:body => {:text => 'item:Body', :writable => true},
|
39
|
+
:response_objects => {:text => 'item:ResponseObjects', :writable => true},
|
40
|
+
:sensitivity => {:text => 'item:Sensitivity', :writable => true},
|
41
|
+
:reminder_due_by => {:text => 'item:ReminderDueBy', :writable => true},
|
42
|
+
:reminder_is_set => {:text => 'item:ReminderIsSet', :writable => true},
|
43
|
+
:reminder_minutes_before_start => {:text => 'item:ReminderMinutesBeforeStart', :writable => true},
|
44
|
+
:display_to => {:text => 'item:DisplayTo', :writable => true},
|
45
|
+
:display_cc => {:text => 'item:DisplayCc', :writable => true},
|
46
|
+
:culture => {:text => 'item:Culture', :writable => true},
|
47
|
+
:effective_rights => {:text => 'item:EffectiveRights', :writable => true},
|
48
|
+
:last_modified_name => {:text => 'item:LastModifiedName', :writable => true},
|
49
|
+
:last_modified_time => {:text => 'item:LastModifiedTime', :writable => true},
|
50
|
+
:conversation_id => {:text => 'item:ConversationId', :writable => true},
|
51
|
+
:unique_body => {:text => 'item:UniqueBody', :writable => true},
|
52
|
+
:web_client_read_form_query_string => {:text => 'item:WebClientReadFormQueryString', :writable => true},
|
53
|
+
:web_client_edit_form_query_string => {:text => 'item:WebClientEditFormQueryString', :writable => true},
|
54
|
+
:conversation_index => {:text => 'message:ConversationIndex', :writable => true},
|
55
|
+
:conversation_topic => {:text => 'message:ConversationTopic', :writable => true},
|
56
|
+
:internet_message_id => {:text => 'message:InternetMessageId', :writable => true},
|
57
|
+
:is_read => {:text => 'message:IsRead', :writable => true},
|
58
|
+
:is_response_requested => {:text => 'message:IsResponseRequested', :writable => true},
|
59
|
+
:is_read_receipt_requested => {:text => 'message:IsReadReceiptRequested', :writable => true},
|
60
|
+
:is_delivery_receipt_requested => {:text => 'message:IsDeliveryReceiptRequested', :writable => true},
|
61
|
+
:references => {:text => 'message:References', :writable => true},
|
62
|
+
:reply_to => {:text => 'message:ReplyTo', :writable => true},
|
63
|
+
:from => {:text => 'message:From', :writable => true},
|
64
|
+
:sender => {:text => 'message:Sender', :writable => true},
|
65
|
+
:to_recipients => {:text => 'message:ToRecipients', :writable => true},
|
66
|
+
:cc_recipients => {:text => 'message:CcRecipients', :writable => true},
|
67
|
+
:bcc_recipients => {:text => 'message:BccRecipients', :writable => true},
|
68
|
+
:associated_calendar_item_id => {:text => 'meeting:AssociatedCalendarItemId', :writable => true},
|
69
|
+
:is_delegated => {:text => 'meeting:IsDelegated', :writable => true},
|
70
|
+
:is_out_of_date => {:text => 'meeting:IsOutOfDate', :writable => true},
|
71
|
+
:has_been_processed => {:text => 'meeting:HasBeenProcessed', :writable => true},
|
72
|
+
:response_type => {:text => 'meeting:ResponseType', :writable => true},
|
73
|
+
:meeting_request_type => {:text => 'meetingRequest:MeetingRequestType', :writable => true},
|
74
|
+
:intended_free_busy_status => {:text => 'meetingRequest:IntendedFreeBusyStatus', :writable => true},
|
75
|
+
:start => {:text => 'calendar:Start', :writable => true},
|
76
|
+
:end => {:text => 'calendar:End', :writable => true},
|
77
|
+
:original_start => {:text => 'calendar:OriginalStart', :writable => true},
|
78
|
+
:is_all_day_event => {:text => 'calendar:IsAllDayEvent', :writable => true},
|
79
|
+
:legacy_free_busy_status => {:text => 'calendar:LegacyFreeBusyStatus', :writable => true},
|
80
|
+
:location => {:text => 'calendar:Location', :writable => true},
|
81
|
+
:when => {:text => 'calendar:When', :writable => true},
|
82
|
+
:is_meeting => {:text => 'calendar:IsMeeting', :writable => true},
|
83
|
+
:is_cancelled => {:text => 'calendar:IsCancelled', :writable => true},
|
84
|
+
:is_recurring => {:text => 'calendar:IsRecurring', :writable => true},
|
85
|
+
:meeting_request_was_sent => {:text => 'calendar:MeetingRequestWasSent', :writable => true},
|
86
|
+
:is_response_requested => {:text => 'calendar:IsResponseRequested', :writable => true},
|
87
|
+
:calendar_item_type => {:text => 'calendar:CalendarItemType', :writable => true},
|
88
|
+
:my_response_type => {:text => 'calendar:MyResponseType', :writable => true},
|
89
|
+
:organizer => {:text => 'calendar:Organizer', :writable => true},
|
90
|
+
:required_attendees => {:text => 'calendar:RequiredAttendees', :writable => true},
|
91
|
+
:optional_attendees => {:text => 'calendar:OptionalAttendees', :writable => true},
|
92
|
+
:resources => {:text => 'calendar:Resources', :writable => true},
|
93
|
+
:conflicting_meeting_count => {:text => 'calendar:ConflictingMeetingCount', :writable => true},
|
94
|
+
:adjacent_meeting_count => {:text => 'calendar:AdjacentMeetingCount', :writable => true},
|
95
|
+
:conflicting_meetings => {:text => 'calendar:ConflictingMeetings', :writable => true},
|
96
|
+
:adjacent_meetings => {:text => 'calendar:AdjacentMeetings', :writable => true},
|
97
|
+
:duration => {:text => 'calendar:Duration', :writable => true},
|
98
|
+
:time_zone => {:text => 'calendar:TimeZone', :writable => true},
|
99
|
+
:appointment_reply_time => {:text => 'calendar:AppointmentReplyTime', :writable => true},
|
100
|
+
:appointment_sequence_number => {:text => 'calendar:AppointmentSequenceNumber', :writable => true},
|
101
|
+
:appointment_state => {:text => 'calendar:AppointmentState', :writable => true},
|
102
|
+
:recurrence => {:text => 'calendar:Recurrence', :writable => true},
|
103
|
+
:first_occurrence => {:text => 'calendar:FirstOccurrence', :writable => true},
|
104
|
+
:last_occurrence => {:text => 'calendar:LastOccurrence', :writable => true},
|
105
|
+
:modified_occurrences => {:text => 'calendar:ModifiedOccurrences', :writable => true},
|
106
|
+
:deleted_occurrences => {:text => 'calendar:DeletedOccurrences', :writable => true},
|
107
|
+
:meeting_time_zone => {:text => 'calendar:MeetingTimeZone', :writable => true},
|
108
|
+
:conference_type => {:text => 'calendar:ConferenceType', :writable => true},
|
109
|
+
:allow_new_time_proposal => {:text => 'calendar:AllowNewTimeProposal', :writable => true},
|
110
|
+
:is_online_meeting => {:text => 'calendar:IsOnlineMeeting', :writable => true},
|
111
|
+
:meeting_workspace_url => {:text => 'calendar:MeetingWorkspaceUrl', :writable => true},
|
112
|
+
:net_show_url => {:text => 'calendar:NetShowUrl', :writable => true},
|
113
|
+
:u_i_d => {:text => 'calendar:UID', :writable => true},
|
114
|
+
:recurrence_id => {:text => 'calendar:RecurrenceId', :writable => true},
|
115
|
+
:date_time_stamp => {:text => 'calendar:DateTimeStamp', :writable => true},
|
116
|
+
:start_time_zone => {:text => 'calendar:StartTimeZone', :writable => true},
|
117
|
+
:end_time_zone => {:text => 'calendar:EndTimeZone', :writable => true},
|
118
|
+
:actual_work => {:text => 'task:ActualWork', :writable => true},
|
119
|
+
:assigned_time => {:text => 'task:AssignedTime', :writable => true},
|
120
|
+
:billing_information => {:text => 'task:BillingInformation', :writable => true},
|
121
|
+
:change_count => {:text => 'task:ChangeCount', :writable => true},
|
122
|
+
:companies => {:text => 'task:Companies', :writable => true},
|
123
|
+
:complete_date => {:text => 'task:CompleteDate', :writable => true},
|
124
|
+
:contacts => {:text => 'task:Contacts', :writable => true},
|
125
|
+
:delegation_state => {:text => 'task:DelegationState', :writable => true},
|
126
|
+
:delegator => {:text => 'task:Delegator', :writable => true},
|
127
|
+
:due_date => {:text => 'task:DueDate', :writable => true},
|
128
|
+
:is_assignment_editable => {:text => 'task:IsAssignmentEditable', :writable => true},
|
129
|
+
:is_complete => {:text => 'task:IsComplete', :writable => true},
|
130
|
+
:is_recurring => {:text => 'task:IsRecurring', :writable => true},
|
131
|
+
:is_team_task => {:text => 'task:IsTeamTask', :writable => true},
|
132
|
+
:mileage => {:text => 'task:Mileage', :writable => true},
|
133
|
+
:owner => {:text => 'task:Owner', :writable => true},
|
134
|
+
:percent_complete => {:text => 'task:PercentComplete', :writable => true},
|
135
|
+
:recurrence => {:text => 'task:Recurrence', :writable => true},
|
136
|
+
:start_date => {:text => 'task:StartDate', :writable => true},
|
137
|
+
:status => {:text => 'task:Status', :writable => true},
|
138
|
+
:status_description => {:text => 'task:StatusDescription', :writable => true},
|
139
|
+
:total_work => {:text => 'task:TotalWork', :writable => true},
|
140
|
+
:assistant_name => {:text => 'contacts:AssistantName', :writable => true},
|
141
|
+
:birthday => {:text => 'contacts:Birthday', :writable => true},
|
142
|
+
:business_home_page => {:text => 'contacts:BusinessHomePage', :writable => true},
|
143
|
+
:children => {:text => 'contacts:Children', :writable => true},
|
144
|
+
:companies => {:text => 'contacts:Companies', :writable => true},
|
145
|
+
:company_name => {:text => 'contacts:CompanyName', :writable => true},
|
146
|
+
:complete_name => {:text => 'contacts:CompleteName', :writable => true},
|
147
|
+
:contact_source => {:text => 'contacts:ContactSource', :writable => true},
|
148
|
+
:culture => {:text => 'contacts:Culture', :writable => true},
|
149
|
+
:department => {:text => 'contacts:Department', :writable => true},
|
150
|
+
:display_name => {:text => 'contacts:DisplayName', :writable => true},
|
151
|
+
:email_addresses => {:text => 'contacts:EmailAddresses', :writable => true},
|
152
|
+
:file_as => {:text => 'contacts:FileAs', :writable => true},
|
153
|
+
:file_as_mapping => {:text => 'contacts:FileAsMapping', :writable => true},
|
154
|
+
:generation => {:text => 'contacts:Generation', :writable => true},
|
155
|
+
:given_name => {:text => 'contacts:GivenName', :writable => true},
|
156
|
+
:has_picture => {:text => 'contacts:HasPicture', :writable => true},
|
157
|
+
:im_addresses => {:text => 'contacts:ImAddresses', :writable => true},
|
158
|
+
:initials => {:text => 'contacts:Initials', :writable => true},
|
159
|
+
:job_title => {:text => 'contacts:JobTitle', :writable => true},
|
160
|
+
:manager => {:text => 'contacts:Manager', :writable => true},
|
161
|
+
:middle_name => {:text => 'contacts:MiddleName', :writable => true},
|
162
|
+
:mileage => {:text => 'contacts:Mileage', :writable => true},
|
163
|
+
:nickname => {:text => 'contacts:Nickname', :writable => true},
|
164
|
+
:office_location => {:text => 'contacts:OfficeLocation', :writable => true},
|
165
|
+
:phone_numbers => {:text => 'contacts:PhoneNumbers', :writable => true},
|
166
|
+
:physical_addresses => {:text => 'contacts:PhysicalAddresses', :writable => true},
|
167
|
+
:postal_address_index => {:text => 'contacts:PostalAddressIndex', :writable => true},
|
168
|
+
:profession => {:text => 'contacts:Profession', :writable => true},
|
169
|
+
:spouse_name => {:text => 'contacts:SpouseName', :writable => true},
|
170
|
+
:surname => {:text => 'contacts:Surname', :writable => true},
|
171
|
+
:wedding_anniversary => {:text => 'contacts:WeddingAnniversary', :writable => true},
|
172
|
+
:members => {:text => 'distributionlist:Members', :writable => true},
|
173
|
+
:posted_time => {:text => 'postitem:PostedTime', :writable => true},
|
174
|
+
:conversation_id => {:text => 'conversation:ConversationId', :writable => true},
|
175
|
+
:conversation_topic => {:text => 'conversation:ConversationTopic', :writable => true},
|
176
|
+
:unique_recipients => {:text => 'conversation:UniqueRecipients', :writable => true},
|
177
|
+
:global_unique_recipients => {:text => 'conversation:GlobalUniqueRecipients', :writable => true},
|
178
|
+
:unique_unread_senders => {:text => 'conversation:UniqueUnreadSenders', :writable => true},
|
179
|
+
:global_unique_unread_senders => {:text => 'conversation:GlobalUniqueUnreadSenders', :writable => true},
|
180
|
+
:unique_senders => {:text => 'conversation:UniqueSenders', :writable => true},
|
181
|
+
:global_unique_senders => {:text => 'conversation:GlobalUniqueSenders', :writable => true},
|
182
|
+
:last_delivery_time => {:text => 'conversation:LastDeliveryTime', :writable => true},
|
183
|
+
:global_last_delivery_time => {:text => 'conversation:GlobalLastDeliveryTime', :writable => true},
|
184
|
+
:categories => {:text => 'conversation:Categories', :writable => true},
|
185
|
+
:global_categories => {:text => 'conversation:GlobalCategories', :writable => true},
|
186
|
+
:flag_status => {:text => 'conversation:FlagStatus', :writable => true},
|
187
|
+
:global_flag_status => {:text => 'conversation:GlobalFlagStatus', :writable => true},
|
188
|
+
:has_attachments => {:text => 'conversation:HasAttachments', :writable => true},
|
189
|
+
:global_has_attachments => {:text => 'conversation:GlobalHasAttachments', :writable => true},
|
190
|
+
:message_count => {:text => 'conversation:MessageCount', :writable => true},
|
191
|
+
:global_message_count => {:text => 'conversation:GlobalMessageCount', :writable => true},
|
192
|
+
:unread_count => {:text => 'conversation:UnreadCount', :writable => true},
|
193
|
+
:global_unread_count => {:text => 'conversation:GlobalUnreadCount', :writable => true},
|
194
|
+
:size => {:text => 'conversation:Size', :writable => true},
|
195
|
+
:global_size => {:text => 'conversation:GlobalSize', :writable => true},
|
196
|
+
:item_classes => {:text => 'conversation:ItemClasses', :writable => true},
|
197
|
+
:global_item_classes => {:text => 'conversation:GlobalItemClasses', :writable => true},
|
198
|
+
:importance => {:text => 'conversation:Importance', :writable => true},
|
199
|
+
:global_importance => {:text => 'conversation:GlobalImportance', :writable => true},
|
200
|
+
:item_ids => {:text => 'conversation:ItemIds', :writable => true},
|
201
|
+
:global_item_ids => {:text => 'conversation:GlobalItemIds', :writable => true}
|
202
|
+
}
|
203
|
+
|
204
|
+
end
|
205
|
+
end
|
206
|
+
end
|
data/lib/model/message.rb
CHANGED
@@ -97,10 +97,10 @@ module Viewpoint
|
|
97
97
|
mail.in_reply_to in_reply_to unless in_reply_to.nil?
|
98
98
|
mail.references references unless references.nil?
|
99
99
|
mail.subject subject unless subject.nil?
|
100
|
-
mail.return_path = sender.email_address unless
|
101
|
-
mail.to to_recipients.map {|r| r.email_address} unless to_recipients.nil?
|
102
|
-
mail.cc cc_recipients.map {|r| r.email_address} unless cc_recipients.nil?
|
103
|
-
mail.from from.email_address unless
|
100
|
+
mail.return_path = sender.email_address unless(sender.nil? || ! sender.respond_to?(:email_address))
|
101
|
+
mail.to to_recipients.map {|r| r.email_address if r.respond_to?(:email_address) } unless to_recipients.nil?
|
102
|
+
mail.cc cc_recipients.map {|r| r.email_address if r.respond_to?(:email_address) } unless cc_recipients.nil?
|
103
|
+
mail.from from.email_address unless(from.nil? || ! from.respond_to?(:email_address))
|
104
104
|
# Because the mail gem does not pass an object to the block there are some issues with using self
|
105
105
|
msg = self
|
106
106
|
if(body_type == "HTML")
|
data/lib/model/model.rb
CHANGED
@@ -65,6 +65,14 @@ module Viewpoint
|
|
65
65
|
@ews_item[:#{var}][:text]
|
66
66
|
end
|
67
67
|
EOF
|
68
|
+
if(Item::FIELD_URIS.has_key?(var.to_sym) && Item::FIELD_URIS[var.to_sym][:writable])
|
69
|
+
self.instance_eval <<-EOF
|
70
|
+
def #{mname}=(newtext)
|
71
|
+
@ews_item[:#{var}][:text] = newtext
|
72
|
+
@updates[:#{var}] = @ews_item[:#{var}]
|
73
|
+
end
|
74
|
+
EOF
|
75
|
+
end
|
68
76
|
else
|
69
77
|
@ews_methods_undef << var
|
70
78
|
end
|
@@ -81,8 +89,14 @@ module Viewpoint
|
|
81
89
|
def define_attr_str_var(parent, *vars)
|
82
90
|
return unless @ews_item[parent]
|
83
91
|
vars.each do |var|
|
84
|
-
|
85
|
-
|
92
|
+
@ews_methods << var
|
93
|
+
if(@ews_item[parent][var].is_a?(Hash) && @ews_item[parent][var].has_key?(:text))
|
94
|
+
self.instance_eval <<-EOF
|
95
|
+
def #{var}
|
96
|
+
@ews_item[:#{parent}][:#{var}][:text]
|
97
|
+
end
|
98
|
+
EOF
|
99
|
+
elsif(@ews_item[parent][var])
|
86
100
|
self.instance_eval <<-EOF
|
87
101
|
def #{var}
|
88
102
|
@ews_item[:#{parent}][:#{var}]
|
@@ -104,6 +118,14 @@ module Viewpoint
|
|
104
118
|
@#{var} ||= @ews_item[:#{var}][:text].to_i
|
105
119
|
end
|
106
120
|
EOF
|
121
|
+
if(Item::FIELD_URIS.has_key?(var.to_sym) && Item::FIELD_URIS[var.to_sym][:writable])
|
122
|
+
self.instance_eval <<-EOF
|
123
|
+
def #{var}=(newint)
|
124
|
+
@ews_item[:#{var}][:text] = newint.to_s
|
125
|
+
@updates[:#{var}] = @ews_item[:#{var}]
|
126
|
+
end
|
127
|
+
EOF
|
128
|
+
end
|
107
129
|
else
|
108
130
|
@ews_methods_undef << var
|
109
131
|
end
|
@@ -119,6 +141,15 @@ module Viewpoint
|
|
119
141
|
@#{var} ||= (@ews_item[:#{var}][:text] == 'true') ? true : false
|
120
142
|
end
|
121
143
|
EOF
|
144
|
+
if(Item::FIELD_URIS.has_key?(var.to_sym) && Item::FIELD_URIS[var.to_sym][:writable])
|
145
|
+
self.instance_eval <<-EOF
|
146
|
+
def #{var}=(newbool)
|
147
|
+
raise EwsError, "Value not boolean for method #{var}=" unless(newbool.is_a?(TrueClass) || newbool.is_a?(FalseClass))
|
148
|
+
@ews_item[:#{var}][:text] = newbool.to_s
|
149
|
+
@updates[:#{var}] = @ews_item[:#{var}]
|
150
|
+
end
|
151
|
+
EOF
|
152
|
+
end
|
122
153
|
else
|
123
154
|
@ews_methods_undef << "#{var}?".to_sym
|
124
155
|
end
|
@@ -134,6 +165,14 @@ module Viewpoint
|
|
134
165
|
@#{var} ||= DateTime.parse(@ews_item[:#{var}][:text])
|
135
166
|
end
|
136
167
|
EOF
|
168
|
+
if(Item::FIELD_URIS.has_key?(var.to_sym) && Item::FIELD_URIS[var.to_sym][:writable])
|
169
|
+
self.instance_eval <<-EOF
|
170
|
+
def #{var}=(newdate)
|
171
|
+
@ews_item[:#{var}][:text] = newdate.to_s
|
172
|
+
@updates[:#{var}] = @ews_item[:#{var}]
|
173
|
+
end
|
174
|
+
EOF
|
175
|
+
end
|
137
176
|
else
|
138
177
|
@ews_methods_undef << var
|
139
178
|
end
|
@@ -211,7 +250,6 @@ module Viewpoint
|
|
211
250
|
end
|
212
251
|
end
|
213
252
|
|
214
|
-
|
215
253
|
# After a delete is called on an object this method will clear
|
216
254
|
# out all of the defined EWS methods so they can't be called on the
|
217
255
|
# instantiated object.
|
data/lib/model/task.rb
CHANGED
@@ -65,14 +65,7 @@ module Viewpoint
|
|
65
65
|
item[:start_date] = {:text => v_start.to_s} unless v_start.nil?
|
66
66
|
item[:due_date] = {:text => v_end.to_s} unless v_end.nil?
|
67
67
|
|
68
|
-
|
69
|
-
resp = conn.ews.create_task_item(folder, item, 'SaveOnly')
|
70
|
-
if(resp.status == 'Success')
|
71
|
-
resp = resp.items.shift
|
72
|
-
self.new(resp[resp.keys.first])
|
73
|
-
else
|
74
|
-
raise EwsError, "Could not create task. #{resp.code}: #{resp.message}"
|
75
|
-
end
|
68
|
+
self.create_item_from_hash(item, folder)
|
76
69
|
end
|
77
70
|
|
78
71
|
|
@@ -115,7 +108,12 @@ module Viewpoint
|
|
115
108
|
private
|
116
109
|
|
117
110
|
def init_methods
|
118
|
-
super
|
111
|
+
super
|
112
|
+
|
113
|
+
define_str_var :status, :owner
|
114
|
+
define_bool_var :is_complete, :is_recurring, :is_team_task
|
115
|
+
define_int_var :percent_complete, :actual_work, :change_count
|
116
|
+
define_datetime_var :start_date, :due_date, :complete_date
|
119
117
|
end
|
120
118
|
|
121
119
|
end # Task
|
@@ -544,12 +544,15 @@ module Viewpoint
|
|
544
544
|
# Used to modify the properties of an existing item in the Exchange store
|
545
545
|
# @see http://msdn.microsoft.com/en-us/library/aa581084.aspx
|
546
546
|
# @param [Array] item_ids An Array of item ids
|
547
|
-
|
547
|
+
# @param [Hash] changes a Hash of changes to be fed to auto_hierarchy!
|
548
|
+
# @param [Hash] opts various attributes to set for this update. See the Technet docs for more info
|
549
|
+
def update_item(item_ids, changes, opts = {:message_disposition => 'SaveOnly', :conflict_resolution => 'AutoResolve'})
|
548
550
|
action = "#{SOAP_ACTION_PREFIX}/UpdateItem"
|
549
551
|
resp = invoke("#{NS_EWS_MESSAGES}:UpdateItem", action) do |root|
|
550
552
|
build!(root) do
|
551
|
-
root.set_attr('MessageDisposition',
|
552
|
-
root.set_attr('ConflictResolution',
|
553
|
+
root.set_attr('MessageDisposition', opts[:message_disposition]) if opts.has_key?(:message_disposition)
|
554
|
+
root.set_attr('ConflictResolution', opts[:conflict_resolution]) if opts.has_key?(:message_disposition)
|
555
|
+
root.set_attr('SendMeetingInvitationsOrCancellations', opts[:send_meeting_invitations_or_cancellations]) if opts.has_key?(:send_meeting_invitations_or_cancellations)
|
553
556
|
item_changes!(root, item_ids, changes)
|
554
557
|
end
|
555
558
|
end
|
@@ -771,6 +774,7 @@ module Viewpoint
|
|
771
774
|
|
772
775
|
# Override the superclasses' invoke so we can add http_options to each request
|
773
776
|
def invoke(msg, action)
|
777
|
+
raise EwsError, "EWS Endpoint not set." if uri.nil?
|
774
778
|
begin
|
775
779
|
super(msg, {:soap_action => action, :http_options => @@http_options})
|
776
780
|
rescue SocketError
|
@@ -127,6 +127,10 @@ module Viewpoint
|
|
127
127
|
raise EwsError, "#{@response_message.code}: #{@response_message.message}"
|
128
128
|
end
|
129
129
|
end
|
130
|
+
|
131
|
+
def update_item_response(opts)
|
132
|
+
create_item_response(opts)
|
133
|
+
end
|
130
134
|
|
131
135
|
def send_item_response(opts)
|
132
136
|
if(@response_message.status == 'Success')
|
@@ -153,7 +157,6 @@ module Viewpoint
|
|
153
157
|
end
|
154
158
|
end
|
155
159
|
|
156
|
-
|
157
160
|
def create_attachment_response(opts)
|
158
161
|
if(@response_message.status == 'Success')
|
159
162
|
att_id = (@response/"//#{NS_EWS_TYPES}:FileAttachment/*").last
|
data/lib/viewpoint.rb
CHANGED
@@ -22,6 +22,8 @@
|
|
22
22
|
require 'singleton'
|
23
23
|
require 'date'
|
24
24
|
require 'base64'
|
25
|
+
require 'kconv' if(RUBY_VERSION.start_with? '1.9') # bug in rubyntlm with ruby 1.9.x
|
26
|
+
|
25
27
|
|
26
28
|
# Class Extensions
|
27
29
|
require 'extensions/string'
|
@@ -35,6 +37,7 @@ require 'model/model'
|
|
35
37
|
require 'model/mailbox_user'
|
36
38
|
require 'model/attendee'
|
37
39
|
require 'model/generic_folder'
|
40
|
+
require 'model/item_field_uri_map' # supports Item
|
38
41
|
require 'model/item'
|
39
42
|
# Specific Models
|
40
43
|
# Folders
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 1
|
8
|
-
-
|
9
|
-
version: 0.1.
|
8
|
+
- 10
|
9
|
+
version: 0.1.10
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Dan Wanek
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-
|
17
|
+
date: 2010-12-16 00:00:00 -06:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -99,7 +99,7 @@ dependencies:
|
|
99
99
|
version: 2.2.5
|
100
100
|
type: :runtime
|
101
101
|
version_requirements: *id006
|
102
|
-
description: "
|
102
|
+
description: "A Ruby client access library for Microsoft Exchange Web Services (EWS). Examples can be found here: http://distributed-frostbite.blogspot.com"
|
103
103
|
email: dan.wanek@gmail.com
|
104
104
|
executables: []
|
105
105
|
|
@@ -109,52 +109,46 @@ extra_rdoc_files:
|
|
109
109
|
- README
|
110
110
|
- COPYING.txt
|
111
111
|
files:
|
112
|
-
- COPYING.txt
|
113
112
|
- Changelog.txt
|
114
113
|
- README
|
115
|
-
-
|
114
|
+
- COPYING.txt
|
116
115
|
- TODO
|
117
|
-
- VERSION
|
118
116
|
- lib/exceptions/exceptions.rb
|
119
|
-
- lib/
|
120
|
-
- lib/
|
121
|
-
- lib/
|
122
|
-
- lib/
|
117
|
+
- lib/field_hash2.txt
|
118
|
+
- lib/field_hash.txt
|
119
|
+
- lib/soap/soap_provider.rb
|
120
|
+
- lib/soap/handsoap/builder.rb
|
121
|
+
- lib/soap/handsoap/ews_service.rb
|
122
|
+
- lib/soap/handsoap/builders/ews_builder.rb
|
123
|
+
- lib/soap/handsoap/builders/ews_build_helpers.rb
|
124
|
+
- lib/soap/handsoap/parsers/ews_parser.rb
|
125
|
+
- lib/soap/handsoap/parser.rb
|
126
|
+
- lib/viewpoint.rb
|
127
|
+
- lib/model/distribution_list.rb
|
123
128
|
- lib/model/calendar_item.rb
|
124
|
-
- lib/model/
|
129
|
+
- lib/model/attendee.rb
|
130
|
+
- lib/model/meeting_request.rb
|
131
|
+
- lib/model/search_folder.rb
|
132
|
+
- lib/model/model.rb
|
125
133
|
- lib/model/contacts_folder.rb
|
126
|
-
- lib/model/distribution_list.rb
|
127
|
-
- lib/model/event.rb
|
128
|
-
- lib/model/file_attachment.rb
|
129
134
|
- lib/model/folder.rb
|
130
|
-
- lib/model/generic_folder.rb
|
131
135
|
- lib/model/item.rb
|
132
|
-
- lib/model/item_attachment.rb
|
133
|
-
- lib/model/mailbox_user.rb
|
134
136
|
- lib/model/meeting_cancellation.rb
|
135
|
-
- lib/model/
|
136
|
-
- lib/model/
|
137
|
+
- lib/model/event.rb
|
138
|
+
- lib/model/item_field_uri_map.rb
|
139
|
+
- lib/model/task.rb
|
140
|
+
- lib/model/calendar_folder.rb
|
141
|
+
- lib/model/generic_folder.rb
|
142
|
+
- lib/model/file_attachment.rb
|
137
143
|
- lib/model/meeting_response.rb
|
138
144
|
- lib/model/message.rb
|
139
|
-
- lib/model/
|
140
|
-
- lib/model/
|
141
|
-
- lib/model/
|
145
|
+
- lib/model/contact.rb
|
146
|
+
- lib/model/attachment.rb
|
147
|
+
- lib/model/item_attachment.rb
|
142
148
|
- lib/model/tasks_folder.rb
|
143
|
-
- lib/
|
144
|
-
- lib/
|
145
|
-
- lib/
|
146
|
-
- lib/soap/handsoap/ews_service.rb
|
147
|
-
- lib/soap/handsoap/parser.rb
|
148
|
-
- lib/soap/handsoap/parsers/ews_parser.rb
|
149
|
-
- lib/soap/soap_provider.rb
|
150
|
-
- lib/viewpoint.rb
|
151
|
-
- preamble
|
152
|
-
- test/.rspec
|
153
|
-
- test/spec/basic_functions.spec
|
154
|
-
- test/spec/folder_subscriptions.spec
|
155
|
-
- test/spec/folder_synchronization.spec
|
156
|
-
- test/spec/item_tests.spec
|
157
|
-
- utils/ewsWSDL2rb.rb
|
149
|
+
- lib/model/mailbox_user.rb
|
150
|
+
- lib/model/meeting_message.rb
|
151
|
+
- lib/extensions/string.rb
|
158
152
|
has_rdoc: true
|
159
153
|
homepage: http://github.com/zenchild/Viewpoint
|
160
154
|
licenses: []
|