viewpoint 0.1.26 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (112) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +203 -0
  3. data/lib/ews/calendar_accessors.rb +34 -0
  4. data/lib/ews/connection.rb +140 -0
  5. data/lib/ews/connection_helper.rb +35 -0
  6. data/lib/ews/convert_accessors.rb +56 -0
  7. data/lib/{exceptions/exceptions.rb → ews/errors.rb} +29 -19
  8. data/lib/ews/ews_client.rb +105 -0
  9. data/lib/ews/exceptions/exceptions.rb +61 -0
  10. data/lib/ews/folder_accessors.rb +264 -0
  11. data/lib/ews/impersonation.rb +30 -0
  12. data/lib/ews/item_accessors.rb +242 -0
  13. data/lib/ews/mailbox_accessors.rb +92 -0
  14. data/lib/ews/meeting_accessors.rb +39 -0
  15. data/lib/ews/message_accessors.rb +93 -0
  16. data/lib/ews/push_subscription_accessors.rb +33 -0
  17. data/lib/ews/room_accessors.rb +48 -0
  18. data/lib/ews/roomlist_accessors.rb +47 -0
  19. data/lib/ews/soap.rb +64 -0
  20. data/lib/ews/soap/builders/ews_builder.rb +1384 -0
  21. data/lib/ews/soap/ews_response.rb +84 -0
  22. data/lib/ews/soap/ews_soap_availability_response.rb +58 -0
  23. data/lib/ews/soap/ews_soap_free_busy_response.rb +119 -0
  24. data/lib/ews/soap/ews_soap_response.rb +103 -0
  25. data/lib/ews/soap/ews_soap_room_response.rb +53 -0
  26. data/lib/ews/soap/ews_soap_roomlist_response.rb +54 -0
  27. data/lib/ews/soap/exchange_availability.rb +61 -0
  28. data/lib/ews/soap/exchange_data_services.rb +780 -0
  29. data/lib/ews/soap/exchange_notification.rb +146 -0
  30. data/lib/ews/soap/exchange_synchronization.rb +93 -0
  31. data/lib/ews/soap/exchange_time_zones.rb +56 -0
  32. data/lib/ews/soap/exchange_user_configuration.rb +33 -0
  33. data/lib/ews/soap/exchange_web_service.rb +264 -0
  34. data/lib/{model/item_attachment.rb → ews/soap/parsers/ews_parser.rb} +24 -14
  35. data/lib/ews/soap/parsers/ews_sax_document.rb +70 -0
  36. data/lib/ews/soap/response_message.rb +80 -0
  37. data/lib/ews/soap/responses/create_attachment_response_message.rb +47 -0
  38. data/lib/{model/meeting_message.rb → ews/soap/responses/create_item_response_message.rb} +7 -10
  39. data/lib/ews/soap/responses/find_item_response_message.rb +80 -0
  40. data/lib/ews/soap/responses/get_events_response_message.rb +53 -0
  41. data/lib/ews/soap/responses/send_notification_response_message.rb +59 -0
  42. data/lib/{model/attachment.rb → ews/soap/responses/subscribe_response_message.rb} +17 -13
  43. data/lib/{model/attendee.rb → ews/soap/responses/sync_folder_hierarchy_response_message.rb} +14 -15
  44. data/lib/ews/soap/responses/sync_folder_items_response_message.rb +36 -0
  45. data/lib/ews/templates/calendar_item.rb +79 -0
  46. data/lib/ews/templates/forward_item.rb +24 -0
  47. data/lib/ews/templates/message.rb +85 -0
  48. data/lib/ews/templates/reply_to_item.rb +25 -0
  49. data/lib/ews/templates/task.rb +74 -0
  50. data/lib/ews/types.rb +194 -0
  51. data/lib/ews/types/attachment.rb +77 -0
  52. data/lib/{model/meeting_cancellation.rb → ews/types/attendee.rb} +9 -8
  53. data/lib/ews/types/calendar_folder.rb +50 -0
  54. data/lib/ews/types/calendar_item.rb +130 -0
  55. data/lib/ews/types/contact.rb +7 -0
  56. data/lib/ews/types/contacts_folder.rb +8 -0
  57. data/lib/ews/types/copied_event.rb +51 -0
  58. data/lib/{soap/handsoap/builder.rb → ews/types/created_event.rb} +5 -2
  59. data/lib/ews/types/deleted_event.rb +24 -0
  60. data/lib/ews/types/distribution_list.rb +7 -0
  61. data/lib/ews/types/event.rb +62 -0
  62. data/lib/ews/types/export_items_response_message.rb +52 -0
  63. data/lib/ews/types/file_attachment.rb +65 -0
  64. data/lib/ews/types/folder.rb +60 -0
  65. data/lib/ews/types/free_busy_changed_event.rb +24 -0
  66. data/lib/ews/types/generic_folder.rb +418 -0
  67. data/lib/ews/types/item.rb +447 -0
  68. data/lib/ews/types/item_attachment.rb +84 -0
  69. data/lib/{model → ews/types}/item_field_uri_map.rb +2 -18
  70. data/lib/ews/types/mailbox_user.rb +156 -0
  71. data/lib/ews/types/meeting_cancellation.rb +7 -0
  72. data/lib/ews/types/meeting_message.rb +7 -0
  73. data/lib/ews/types/meeting_request.rb +7 -0
  74. data/lib/ews/types/meeting_response.rb +7 -0
  75. data/lib/ews/types/message.rb +7 -0
  76. data/lib/ews/types/modified_event.rb +48 -0
  77. data/lib/{extensions/string.rb → ews/types/moved_event.rb} +31 -15
  78. data/lib/ews/types/new_mail_event.rb +24 -0
  79. data/lib/ews/types/out_of_office.rb +147 -0
  80. data/lib/ews/types/post_item.rb +7 -0
  81. data/lib/ews/types/search_folder.rb +8 -0
  82. data/lib/ews/types/status_event.rb +39 -0
  83. data/lib/ews/types/task.rb +41 -0
  84. data/lib/ews/types/tasks_folder.rb +27 -0
  85. data/lib/viewpoint.rb +85 -108
  86. data/lib/{model/distribution_list.rb → viewpoint/logging.rb} +6 -3
  87. data/lib/{model/meeting_response.rb → viewpoint/logging/config.rb} +3 -3
  88. data/lib/viewpoint/string_utils.rb +76 -0
  89. metadata +156 -123
  90. data/README +0 -114
  91. data/lib/model/calendar_folder.rb +0 -67
  92. data/lib/model/calendar_item.rb +0 -267
  93. data/lib/model/contact.rb +0 -238
  94. data/lib/model/contacts_folder.rb +0 -46
  95. data/lib/model/event.rb +0 -116
  96. data/lib/model/file_attachment.rb +0 -53
  97. data/lib/model/folder.rb +0 -47
  98. data/lib/model/generic_folder.rb +0 -461
  99. data/lib/model/item.rb +0 -312
  100. data/lib/model/mailbox_user.rb +0 -146
  101. data/lib/model/meeting_request.rb +0 -39
  102. data/lib/model/message.rb +0 -142
  103. data/lib/model/model.rb +0 -269
  104. data/lib/model/search_folder.rb +0 -48
  105. data/lib/model/task.rb +0 -121
  106. data/lib/model/tasks_folder.rb +0 -44
  107. data/lib/soap/handsoap/builders/ews_build_helpers.rb +0 -383
  108. data/lib/soap/handsoap/builders/ews_builder.rb +0 -146
  109. data/lib/soap/handsoap/ews_service.rb +0 -790
  110. data/lib/soap/handsoap/parser.rb +0 -104
  111. data/lib/soap/handsoap/parsers/ews_parser.rb +0 -245
  112. data/lib/soap/soap_provider.rb +0 -64
@@ -1,39 +0,0 @@
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
20
- module EWS
21
- class MeetingRequest < Item
22
-
23
-
24
- private
25
-
26
- def init_methods
27
- super()
28
- define_str_var :conversation_index, :conversation_topic, :internet_message_id, :references
29
- define_mbox_users :to_recipients, :cc_recipients, :bcc_recipients, :reply_to, :required_attendees, :optional_attendees
30
- define_mbox_user :from, :sender, :received_by, :received_representing, :organizer
31
- define_bool_var :is_read, :is_read_receipt_requested, :is_response_requested, :is_delivery_receipt_requested, :is_draft, :is_from_me
32
- define_bool_var :is_all_day_event, :is_cancelled, :is_delegated, :is_meeting, :is_out_of_date, :is_recurring, :is_resend
33
- define_bool_var :is_submitted, :is_unmodified, :allow_new_time_proposal
34
- define_int_var :adjacent_meeting_count, :appointment_sequence_number, :appointment_state, :conflicting_meeting_count
35
- define_datetime_var :start, :end
36
- end
37
- end # MeetingRequest
38
- end # EWS
39
- end # Viewpoint
data/lib/model/message.rb DELETED
@@ -1,142 +0,0 @@
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
20
- module EWS
21
- class Message < Item
22
-
23
- # Send an E-mail message
24
- #
25
- # @param [String] subject The message subject
26
- # @param [String] body The message body
27
- # @param [Array] to_recipients An array of e-mail addresses to send to
28
- # @param [Array] cc_recipients An array of e-mail addresses to send to
29
- # @param [Array] bcc_recipients An array of e-mail addresses to send to
30
- # @param [Array<File>] file_attachments An array of File objects to read data from that
31
- # will attach to this message.
32
- # @return [Message,true] Returns true if the message is sent, if draft is true it will return the Message object
33
- # or it raises an error with a message stating why the e-mail could not be sent.
34
- def self.send(subject, body, to_recipients, cc_recipients=[], bcc_recipients=[], file_attachments=nil, draft=false)
35
- item = {}
36
- item[:subject] = {:text => subject}
37
- item[:body] = {:text => body, :body_type => 'Text'} unless body.nil?
38
- to_recipients.each do |a|
39
- item[:to_recipients] = [] unless item[:to_recipients].is_a?(Array)
40
- item[:to_recipients] << {:mailbox => {:email_address => {:text => a}}}
41
- end
42
- cc_recipients.each do |a|
43
- item[:cc_recipients] = [] unless item[:cc_recipients].is_a?(Array)
44
- item[:cc_recipients] << {:mailbox => {:email_address => {:text => a}}}
45
- end unless cc_recipients.nil?
46
- bcc_recipients.each do |a|
47
- item[:bcc_recipients] = [] unless item[:bcc_recipients].is_a?(Array)
48
- item[:bcc_recipients] << {:mailbox => {:email_address => {:text => a}}}
49
- end unless bcc_recipients.nil?
50
-
51
- conn = Viewpoint::EWS::EWS.instance
52
- resp = conn.ews.create_message_item(:drafts, item, 'SaveOnly')
53
- (resp.status == 'Success') || (raise EwsError, "Could not send message. #{resp.code}: #{resp.message}")
54
- msg_key = resp.items.first.keys.first
55
- msg_id = resp.items.first[msg_key][:item_id]
56
- msg_id = add_attachments(msg_id, file_attachments) unless (file_attachments.nil? || file_attachments.empty?)
57
- if !draft
58
- resp = conn.ews.send_item([msg_id])
59
- (resp.status == 'Success') || (raise EwsError, "Could not send message. #{resp.code}: #{resp.message}")
60
- else
61
- self.new({:item_id => msg_id})
62
- end
63
- end
64
-
65
- # Initialize an Exchange Web Services item of type Message
66
- def initialize(ews_item, opts={})
67
- super(ews_item, opts)
68
- end
69
-
70
- def headers
71
- deepen! if @shallow
72
- return @headers if defined?(@headers) && !@headers.empty?
73
- return nil unless @ews_item.has_key?(:internet_message_headers)
74
- @headers = {}
75
- # @todo When ruby 1.9 becomes more pervasive the Enumerator#each_with_object
76
- #@headers ||= @ews_item[:internet_message_headers][:internet_message_header].each_with_object({}) do |h,obj|
77
- @ews_item[:internet_message_headers][:internet_message_header].each do |h|
78
- @headers[h[:header_name]] = h[:text]
79
- end
80
- @headers
81
- end
82
-
83
-
84
- # This creates an object of type Mail (mail gem) and allows us to
85
- # manipulate and output Message Items in standards compliant ways.
86
- # @see http://www.ietf.org/rfc/rfc2822.txt
87
- def to_mail
88
- mail = Mail.new
89
- unless(headers.nil?)
90
- mail.received headers['Received']
91
- mail.content_type headers['Content-Type']
92
- mail.content_transfer_encoding headers['Content-Transfer-Encoding']
93
- end
94
- mail.date date_time_sent unless date_time_sent.nil?
95
- mail.message_id internet_message_id unless internet_message_id.nil?
96
- mail.in_reply_to in_reply_to unless in_reply_to.nil?
97
- mail.references references unless references.nil?
98
- mail.subject subject unless subject.nil?
99
- mail.return_path = sender.email_address unless(sender.nil? || ! sender.respond_to?(:email_address))
100
- mail.to to_recipients.map {|r| r.email_address if r.respond_to?(:email_address) } unless to_recipients.nil?
101
- mail.cc cc_recipients.map {|r| r.email_address if r.respond_to?(:email_address) } unless cc_recipients.nil?
102
- mail.from from.email_address unless(from.nil? || ! from.respond_to?(:email_address))
103
- # Because the mail gem does not pass an object to the block there are some issues with using self
104
- msg = self
105
- if(body_type == "HTML")
106
- mail.html_part do
107
- body msg.body
108
- end
109
- mail.text_part do
110
- body Nokogiri::HTML(msg.body).content
111
- end
112
- else
113
- mail.text_part do
114
- body msg.body
115
- end
116
- end
117
-
118
- # add attachments
119
- if(self.has_attachments?)
120
- self.attachments.each do |att|
121
- if(att.is_a?(FileAttachment))
122
- mail.attachments[att.file_name] = Base64.decode64(att.content)
123
- end
124
- end
125
- end
126
- mail
127
- end
128
-
129
-
130
- private
131
-
132
- def init_methods
133
- super()
134
- define_str_var :conversation_index, :conversation_topic, :internet_message_id, :references
135
- define_mbox_users :to_recipients, :cc_recipients, :bcc_recipients, :reply_to
136
- define_mbox_user :from, :sender, :received_by, :received_representing
137
- define_bool_var :is_read, :is_read_receipt_requested, :is_response_requested, :is_delivery_receipt_requested
138
- end
139
-
140
- end # Message
141
- end # EWS
142
- end # Viewpoint
data/lib/model/model.rb DELETED
@@ -1,269 +0,0 @@
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
- # This class is inherited by all Item subtypes such as Message, Event,
20
- # and Task. It will serve as the brain for all of the methods that
21
- # each of these Item types have in common.
22
- module Viewpoint
23
- module EWS
24
- # This is the base model Module for shared code among all Model classes.
25
- # @attr_reader [Array] :ews_methods The EWS methods created for this Model.
26
- module Model
27
-
28
- # These are convenience methods to quickly create instance methods for
29
- # the various Model types when passed a Hash from the SOAP parser.
30
- # These functions depend on each model type saving the passed Hash
31
- # in an instance variable called @ews_item.
32
-
33
- attr_reader :ews_methods, :ews_methods_undef
34
-
35
- def initialize
36
- # Defined EWS methods
37
- @ews_methods = []
38
- # Undefined EWS methods
39
- @ews_methods_undef = []
40
- end
41
-
42
- protected
43
-
44
- # Define a method that returns a string. The vars are the keys in the
45
- # hash that contain a :text key. In the original SOAP packet this would
46
- # look something like this:
47
- # @param [Array<Symbol,Hash>] *vars the symbols to map to methods. If the
48
- # last item is a hash it will be used to map methods names. For instance
49
- # UID comes through like this :u_i_d so we can map it like so {:u_i_d => :uid}
50
- # @example
51
- # <method_name>
52
- # This is the text
53
- # </method_name>
54
- def define_str_var(*vars)
55
- map = ( vars.last.is_a?(Hash) ? vars.pop : {})
56
- vars.each do |var|
57
- mname = ( map.has_key?(var) ? map[var] : var )
58
- if(@ews_item[var])
59
- @ews_methods << mname
60
- self.instance_eval <<-EOF
61
- def #{mname}
62
- @ews_item[:#{var}][:text]
63
- end
64
- EOF
65
- else
66
- @ews_methods_undef << var
67
- end
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}] = {} unless @ews_item[:#{var}]
72
- @ews_item[:#{var}][:text] = newtext
73
- @updates[:#{var}] = @ews_item[:#{var}]
74
- end
75
- EOF
76
- end
77
- end
78
- end
79
-
80
- # This is similar to the #define_str_var method except of the text value
81
- # is from an XML attribute in the original SOAP so the text won't be pointed
82
- # to by :text. In the orignal SOAP it may have looked like this:
83
- # @example
84
- # <node my_method='this is the text'/>
85
- # so you would specify this...
86
- # define_attr_str_var :node, :my_method
87
- def define_attr_str_var(parent, *vars)
88
- return unless @ews_item[parent]
89
- vars.each do |var|
90
- @ews_methods << var
91
- if(@ews_item[parent][var].is_a?(Hash) && @ews_item[parent][var].has_key?(:text))
92
- self.instance_eval <<-EOF
93
- def #{var}
94
- @ews_item[:#{parent}][:#{var}][:text]
95
- end
96
- EOF
97
- elsif(@ews_item[parent][var])
98
- self.instance_eval <<-EOF
99
- def #{var}
100
- @ews_item[:#{parent}][:#{var}]
101
- end
102
- EOF
103
- else
104
- @ews_methods_undef << var
105
- end
106
- end
107
- end
108
-
109
-
110
- def define_int_var(*vars)
111
- vars.each do |var|
112
- if(@ews_item[var])
113
- @ews_methods << var
114
- self.instance_eval <<-EOF
115
- def #{var}
116
- @ews_item[:#{var}][:text].to_i
117
- end
118
- EOF
119
- else
120
- @ews_methods_undef << var
121
- end
122
- if(Item::FIELD_URIS.has_key?(var.to_sym) && Item::FIELD_URIS[var.to_sym][:writable])
123
- self.instance_eval <<-EOF
124
- def #{var}=(newint)
125
- @ews_item[:#{var}] = {} unless @ews_item[:#{var}]
126
- @ews_item[:#{var}][:text] = newint.to_s
127
- @updates[:#{var}] = @ews_item[:#{var}]
128
- end
129
- EOF
130
- end
131
- end
132
- end
133
-
134
- def define_bool_var(*vars)
135
- vars.each do |var|
136
- if(@ews_item[var])
137
- @ews_methods << "#{var}?".to_sym
138
- self.instance_eval <<-EOF
139
- def #{var}?
140
- (@ews_item[:#{var}][:text] == 'true') ? true : false
141
- end
142
- EOF
143
- else
144
- @ews_methods_undef << "#{var}?".to_sym
145
- end
146
- if(Item::FIELD_URIS.has_key?(var.to_sym) && Item::FIELD_URIS[var.to_sym][:writable])
147
- self.instance_eval <<-EOF
148
- def #{var}=(newbool)
149
- raise EwsError, "Value not boolean for method #{var}=" unless(newbool.is_a?(TrueClass) || newbool.is_a?(FalseClass))
150
- @ews_item[:#{var}] = {} unless @ews_item[:#{var}]
151
- @ews_item[:#{var}][:text] = newbool.to_s
152
- @updates[:#{var}] = @ews_item[:#{var}]
153
- end
154
- EOF
155
- end
156
- end
157
- end
158
-
159
- def define_datetime_var(*vars)
160
- vars.each do |var|
161
- if(@ews_item[var])
162
- @ews_methods << var
163
- self.instance_eval <<-EOF
164
- def #{var}
165
- DateTime.parse(@ews_item[:#{var}][:text])
166
- end
167
- EOF
168
- else
169
- @ews_methods_undef << var
170
- end
171
- if(Item::FIELD_URIS.has_key?(var.to_sym) && Item::FIELD_URIS[var.to_sym][:writable])
172
- self.instance_eval <<-EOF
173
- def #{var}=(newdate)
174
- @ews_item[:#{var}] = {} unless @ews_item[:#{var}]
175
- @ews_item[:#{var}][:text] = newdate.to_s
176
- @updates[:#{var}] = @ews_item[:#{var}]
177
- end
178
- EOF
179
- end
180
- end
181
- end
182
-
183
- def define_mbox_users(*vars)
184
- vars.each do |var|
185
- if(@ews_item[var])
186
- @ews_methods << var
187
- self.instance_eval <<-EOF
188
- def #{var}
189
- return @#{var} if defined?(@#{var})
190
- deepen!
191
- if( (@ews_item[:#{var}][:mailbox]).is_a?(Hash) )
192
- @#{var} = [MailboxUser.new(@ews_item[:#{var}][:mailbox])]
193
- elsif( (@ews_item[:#{var}][:mailbox]).is_a?(Array) )
194
- @#{var} = []
195
- @ews_item[:#{var}][:mailbox].each do |i|
196
- @#{var} << MailboxUser.new(i)
197
- end
198
- else
199
- raise EwsError, "Bad value for mailbox: " + @ews_item[:#{var}][:mailbox]
200
- end
201
- @#{var}
202
- end
203
- EOF
204
- else
205
- @ews_methods_undef << var
206
- end
207
- end
208
- end
209
-
210
-
211
- def define_mbox_user(*vars)
212
- vars.each do |var|
213
- if(@ews_item[var])
214
- @ews_methods << var
215
- self.instance_eval <<-EOF
216
- def #{var}
217
- deepen!
218
- @#{var} ||= MailboxUser.new(@ews_item[:#{var}][:mailbox])
219
- end
220
- EOF
221
- else
222
- @ews_methods_undef << var
223
- end
224
- end
225
- end
226
-
227
-
228
- # Define meeting attendees
229
- # @param [String] *attendee_types the type of attendee we are defining :required_attendees, :optional_attendees
230
- def define_attendees(*attendee_types)
231
- attendee_types.each do |attendee_type|
232
- if(@ews_item.has_key?(attendee_type))
233
- @ews_methods << attendee_type
234
- self.instance_eval <<-EOF
235
- def #{attendee_type}
236
- return @#{attendee_type} if(defined?(@#{attendee_type}) && !@#{attendee_type}.nil?)
237
- if( (@ews_item[:#{attendee_type}][:attendee]).is_a?(Hash) )
238
- @#{attendee_type} = [Attendee.new(@ews_item[:#{attendee_type}][:attendee])]
239
- elsif( (@ews_item[:#{attendee_type}][:attendee]).is_a?(Array) )
240
- @#{attendee_type} = []
241
- @ews_item[:#{attendee_type}][:attendee].each do |i|
242
- @#{attendee_type} << Attendee.new(i)
243
- end
244
- else
245
- raise EwsError, "Bad value for mailbox: " + @ews_item[:#{attendee_type}][:attendee]
246
- end
247
- @#{attendee_type}
248
- end
249
- EOF
250
- else
251
- @ews_methods_undef << attendee_type
252
- end
253
- end
254
- end
255
-
256
- # After a delete is called on an object this method will clear
257
- # out all of the defined EWS methods so they can't be called on the
258
- # instantiated object.
259
- def clear_object!
260
- @ews_methods.each do |m|
261
- self.instance_variables.each do |iv|
262
- self.instance_variable_set("#{iv}",nil)
263
- end
264
- end
265
- end
266
-
267
- end # Model
268
- end # EWS
269
- end # Viewpoint