viewpoint 1.2.0 → 2.0.0

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 (90) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +11 -6
  3. data/lib/ews/calendar_accessors.rb +37 -33
  4. data/lib/ews/connection.rb +152 -125
  5. data/lib/ews/connection_helper.rb +36 -33
  6. data/lib/ews/convert_accessors.rb +58 -54
  7. data/lib/ews/errors.rb +59 -53
  8. data/lib/ews/ews_client.rb +92 -79
  9. data/lib/ews/exceptions/exceptions.rb +61 -61
  10. data/lib/ews/folder_accessors.rb +235 -234
  11. data/lib/ews/impersonation.rb +29 -23
  12. data/lib/ews/item_accessors.rb +215 -213
  13. data/lib/ews/mailbox_accessors.rb +82 -79
  14. data/lib/ews/meeting_accessors.rb +38 -31
  15. data/lib/ews/message_accessors.rb +83 -81
  16. data/lib/ews/push_subscription_accessors.rb +29 -27
  17. data/lib/ews/room_accessors.rb +48 -46
  18. data/lib/ews/roomlist_accessors.rb +47 -45
  19. data/lib/ews/soap/builders/ews_builder.rb +1191 -1176
  20. data/lib/ews/soap/ews_response.rb +68 -73
  21. data/lib/ews/soap/ews_soap_availability_response.rb +57 -57
  22. data/lib/ews/soap/ews_soap_free_busy_response.rb +115 -117
  23. data/lib/ews/soap/ews_soap_response.rb +99 -101
  24. data/lib/ews/soap/ews_soap_room_response.rb +45 -45
  25. data/lib/ews/soap/ews_soap_roomlist_response.rb +45 -46
  26. data/lib/ews/soap/exchange_availability.rb +54 -52
  27. data/lib/ews/soap/exchange_data_services.rb +693 -711
  28. data/lib/ews/soap/exchange_notification.rb +123 -128
  29. data/lib/ews/soap/exchange_synchronization.rb +82 -82
  30. data/lib/ews/soap/exchange_time_zones.rb +41 -44
  31. data/lib/ews/soap/exchange_user_configuration.rb +30 -27
  32. data/lib/ews/soap/exchange_web_service.rb +237 -233
  33. data/lib/ews/soap/parsers/ews_parser.rb +46 -42
  34. data/lib/ews/soap/parsers/ews_sax_document.rb +63 -58
  35. data/lib/ews/soap/response_message.rb +69 -68
  36. data/lib/ews/soap/responses/create_attachment_response_message.rb +45 -45
  37. data/lib/ews/soap/responses/create_item_response_message.rb +26 -25
  38. data/lib/ews/soap/responses/find_item_response_message.rb +76 -78
  39. data/lib/ews/soap/responses/get_events_response_message.rb +52 -51
  40. data/lib/ews/soap/responses/send_notification_response_message.rb +53 -51
  41. data/lib/ews/soap/responses/subscribe_response_message.rb +37 -34
  42. data/lib/ews/soap/responses/sync_folder_hierarchy_response_message.rb +38 -35
  43. data/lib/ews/soap/responses/sync_folder_items_response_message.rb +38 -35
  44. data/lib/ews/soap.rb +27 -26
  45. data/lib/ews/templates/calendar_item.rb +64 -60
  46. data/lib/ews/templates/forward_item.rb +19 -17
  47. data/lib/ews/templates/message.rb +61 -58
  48. data/lib/ews/templates/reply_to_item.rb +20 -18
  49. data/lib/ews/templates/task.rb +55 -55
  50. data/lib/ews/types/attachment.rb +75 -74
  51. data/lib/ews/types/attendee.rb +27 -25
  52. data/lib/ews/types/calendar_folder.rb +58 -59
  53. data/lib/ews/types/calendar_item.rb +133 -131
  54. data/lib/ews/types/contact.rb +11 -5
  55. data/lib/ews/types/contacts_folder.rb +10 -5
  56. data/lib/ews/types/copied_event.rb +47 -48
  57. data/lib/ews/types/created_event.rb +22 -20
  58. data/lib/ews/types/deleted_event.rb +22 -20
  59. data/lib/ews/types/distribution_list.rb +11 -5
  60. data/lib/ews/types/event.rb +60 -59
  61. data/lib/ews/types/export_items_response_message.rb +54 -50
  62. data/lib/ews/types/file_attachment.rb +63 -61
  63. data/lib/ews/types/folder.rb +58 -57
  64. data/lib/ews/types/free_busy_changed_event.rb +22 -20
  65. data/lib/ews/types/generic_folder.rb +348 -372
  66. data/lib/ews/types/item.rb +401 -397
  67. data/lib/ews/types/item_attachment.rb +87 -80
  68. data/lib/ews/types/item_field_uri_map.rb +201 -200
  69. data/lib/ews/types/mailbox_user.rb +146 -154
  70. data/lib/ews/types/meeting_cancellation.rb +11 -5
  71. data/lib/ews/types/meeting_message.rb +11 -5
  72. data/lib/ews/types/meeting_request.rb +11 -5
  73. data/lib/ews/types/meeting_response.rb +11 -5
  74. data/lib/ews/types/message.rb +11 -5
  75. data/lib/ews/types/modified_event.rb +43 -45
  76. data/lib/ews/types/moved_event.rb +47 -48
  77. data/lib/ews/types/new_mail_event.rb +22 -20
  78. data/lib/ews/types/out_of_office.rb +145 -144
  79. data/lib/ews/types/post_item.rb +11 -5
  80. data/lib/ews/types/search_folder.rb +10 -5
  81. data/lib/ews/types/status_event.rb +37 -36
  82. data/lib/ews/types/task.rb +39 -33
  83. data/lib/ews/types/tasks_folder.rb +31 -25
  84. data/lib/ews/types.rb +134 -139
  85. data/lib/viewpoint/logging/config.rb +19 -19
  86. data/lib/viewpoint/logging.rb +23 -17
  87. data/lib/viewpoint/string_utils.rb +31 -32
  88. data/lib/viewpoint.rb +18 -18
  89. metadata +50 -25
  90. data/Changelog.txt +0 -1004
@@ -1,79 +1,83 @@
1
- module Viewpoint::EWS
2
- module Template
3
- # Template for creating CalendarItems
4
- # @see http://msdn.microsoft.com/en-us/library/exchange/aa564765.aspx
5
- class CalendarItem < OpenStruct
1
+ # frozen_string_literal: true
6
2
 
7
- # Available parameters with the required ordering
8
- PARAMETERS = %w{mime_content item_id parent_folder_id item_class subject sensitivity body attachments
9
- date_time_received size categories in_reply_to is_submitted is_draft is_from_me is_resend is_unmodified
10
- internet_message_headers date_time_sent date_time_created response_objects reminder_due_by reminder_is_set
11
- reminder_minutes_before_start display_cc display_to has_attachments extended_property culture start end
12
- original_start is_all_day_event legacy_free_busy_status location when is_meeting is_cancelled is_recurring
13
- meeting_request_was_sent is_response_requested calendar_item_type my_response_type organizer
14
- required_attendees optional_attendees resources conflicting_meeting_count adjacent_meeting_count
15
- conflicting_meetings adjacent_meetings duration time_zone appointment_reply_time appointment_sequence_number
16
- appointment_state recurrence first_occurrence last_occurrence modified_occurrences deleted_occurrences
17
- meeting_time_zone start_time_zone end_time_zone conference_type allow_new_time_proposal is_online_meeting
18
- meeting_workspace_url net_show_url effective_rights last_modified_name last_modified_time is_associated
19
- web_client_read_form_query_string web_client_edit_form_query_string conversation_id unique_body
20
- }.map(&:to_sym).freeze
3
+ module Viewpoint
4
+ module EWS
5
+ module Template
6
+ # Template for creating CalendarItems
7
+ # @see http://msdn.microsoft.com/en-us/library/exchange/aa564765.aspx
8
+ class CalendarItem < OpenStruct
9
+ # Available parameters with the required ordering
10
+ PARAMETERS = %w[mime_content item_id parent_folder_id item_class subject sensitivity body attachments
11
+ date_time_received size categories in_reply_to is_submitted is_draft is_from_me
12
+ is_resend is_unmodified internet_message_headers date_time_sent date_time_created
13
+ response_objects reminder_due_by reminder_is_set reminder_minutes_before_start
14
+ display_cc display_to has_attachments extended_property culture start end original_start
15
+ is_all_day_event legacy_free_busy_status location when is_meeting is_cancelled
16
+ is_recurring meeting_request_was_sent is_response_requested calendar_item_type
17
+ my_response_type organizer required_attendees optional_attendees resources
18
+ conflicting_meeting_count adjacent_meeting_count conflicting_meetings adjacent_meetings
19
+ duration time_zone appointment_reply_time appointment_sequence_number appointment_state
20
+ recurrence first_occurrence last_occurrence modified_occurrences deleted_occurrences
21
+ meeting_time_zone start_time_zone end_time_zone conference_type allow_new_time_proposal
22
+ is_online_meeting meeting_workspace_url net_show_url effective_rights last_modified_name
23
+ last_modified_time is_associated web_client_read_form_query_string
24
+ web_client_edit_form_query_string conversation_id unique_body].map(&:to_sym).freeze
21
25
 
22
- # Returns a new CalendarItem template
23
- def initialize(opts = {})
24
- super opts.dup
25
- end
26
+ # Returns a new CalendarItem template
27
+ def initialize(opts = {})
28
+ super opts.dup
29
+ end
26
30
 
27
- # EWS CreateItem container
28
- # @return [Hash]
29
- def to_ews_create(opts = {})
30
- structure = {}
31
- structure[:message_disposition] = (draft ? 'SaveOnly' : 'SendAndSaveCopy')
32
- # options
33
- structure[:send_meeting_invitations] = (opts.has_key?(:send_meeting_invitations) ? opts[:send_meeting_invitations] : 'SendToNone')
31
+ # EWS CreateItem container
32
+ # @return [Hash]
33
+ def to_ews_create(opts = {})
34
+ structure = {}
35
+ structure[:message_disposition] = (draft ? 'SaveOnly' : 'SendAndSaveCopy')
36
+ # options
37
+ structure[:send_meeting_invitations] =
38
+ (opts.key?(:send_meeting_invitations) ? opts[:send_meeting_invitations] : 'SendToNone')
34
39
 
35
- if self.saved_item_folder_id
36
- if self.saved_item_folder_id.kind_of?(Hash)
37
- structure[:saved_item_folder_id] = saved_item_folder_id
38
- else
39
- structure[:saved_item_folder_id] = {id: saved_item_folder_id}
40
+ if saved_item_folder_id
41
+ structure[:saved_item_folder_id] = if saved_item_folder_id.is_a?(Hash)
42
+ saved_item_folder_id
43
+ else
44
+ { id: saved_item_folder_id }
45
+ end
40
46
  end
41
- end
42
47
 
43
- structure[:items] = [{calendar_item: to_ews_item}]
44
- structure
45
- end
48
+ structure[:items] = [{ calendar_item: to_ews_item }]
49
+ structure
50
+ end
46
51
 
47
- # EWS Item hash
48
- #
49
- # Puts all known parameters in the required ordering and structure
50
- # @return [Hash]
51
- def to_ews_item
52
- item_parameters = {}
53
- PARAMETERS.each do |key|
54
- if !(value = self.send(key)).nil?
52
+ # EWS Item hash
53
+ #
54
+ # Puts all known parameters in the required ordering and structure
55
+ # @return [Hash]
56
+ def to_ews_item
57
+ item_parameters = {}
58
+ PARAMETERS.each do |key|
59
+ next if (value = send(key)).nil?
55
60
 
56
61
  # Convert non duplicable values to String
57
62
  case value
58
- when NilClass, FalseClass, TrueClass, Symbol, Numeric
59
- value = value.to_s
63
+ when NilClass, FalseClass, TrueClass, Symbol, Numeric
64
+ value = value.to_s
60
65
  end
61
66
 
62
67
  # Convert attributes
63
- case key
64
- when :start, :end
65
- item_parameters[key] = {text: value.respond_to?(:iso8601) ? value.iso8601 : value}
66
- when :body
67
- item_parameters[key] = {body_type: self.body_type || 'Text', text: value.to_s}
68
- else
69
- item_parameters[key] = value
70
- end
68
+ item_parameters[key] = case key
69
+ when :start, :end
70
+ { text: value.respond_to?(:iso8601) ? value.iso8601 : value }
71
+ when :body
72
+ { body_type: body_type || 'Text', text: value.to_s }
73
+ else
74
+ value
75
+ end
71
76
  end
72
- end
73
77
 
74
- item_parameters
78
+ item_parameters
79
+ end
75
80
  end
76
-
77
81
  end
78
82
  end
79
83
  end
@@ -1,24 +1,26 @@
1
- module Viewpoint::EWS
2
- module Template
3
- class ForwardItem < Message
1
+ # frozen_string_literal: true
4
2
 
5
- # Format this object for EWS backend consumption.
6
- def to_ews
7
- ews_opts, msg = to_ews_basic
8
- msg[:reference_item_id] = reference_item_id
9
- msg[:new_body_content] = {text: new_body_content, body_type: new_body_type}
10
- ews_opts.merge({items: [{forward_item: msg}]})
11
- end
12
-
13
- private
3
+ module Viewpoint
4
+ module EWS
5
+ module Template
6
+ # Template for building forward-item requests.
7
+ class ForwardItem < Message
8
+ # Format this object for EWS backend consumption.
9
+ def to_ews
10
+ ews_opts, msg = to_ews_basic
11
+ msg[:reference_item_id] = reference_item_id
12
+ msg[:new_body_content] = { text: new_body_content, body_type: new_body_type }
13
+ ews_opts.merge({ items: [{ forward_item: msg }] })
14
+ end
14
15
 
16
+ private
15
17
 
16
- def init_defaults!
17
- super
18
- self.new_body_content ||= ''
19
- self.new_body_type ||= 'Text'
18
+ def init_defaults!
19
+ super
20
+ self.new_body_content ||= ''
21
+ self.new_body_type ||= 'Text'
22
+ end
20
23
  end
21
-
22
24
  end
23
25
  end
24
26
  end
@@ -1,76 +1,79 @@
1
- module Viewpoint::EWS
2
- module Template
3
- class Message < OpenStruct
4
-
5
- def initialize(opts = {})
6
- super opts.clone
7
- init_defaults!
8
- end
9
-
10
- # Format this object for EWS backend consumption.
11
- def to_ews
12
- ews_opts, msg = to_ews_basic
13
- ews_opts.merge({items: [{message: msg}]})
14
- end
15
-
16
- def has_attachments?
17
- !(file_attachments.empty? && item_attachments.empty? && inline_attachments.empty?)
18
- end
19
-
1
+ # frozen_string_literal: true
2
+
3
+ module Viewpoint
4
+ module EWS
5
+ module Template
6
+ # Template for building message requests.
7
+ class Message < OpenStruct
8
+ def initialize(opts = {})
9
+ super opts.clone
10
+ init_defaults!
11
+ end
20
12
 
21
- private
13
+ # Format this object for EWS backend consumption.
14
+ def to_ews
15
+ ews_opts, msg = to_ews_basic
16
+ ews_opts.merge({ items: [{ message: msg }] })
17
+ end
22
18
 
19
+ def has_attachments? # rubocop:disable Naming/PredicatePrefix -- public API name
20
+ !(file_attachments.empty? && item_attachments.empty? && inline_attachments.empty?)
21
+ end
23
22
 
24
- def init_defaults!
25
- self.subject ||= nil
26
- self.body ||= nil
27
- self.body_type ||= 'Text'
28
- self.importance ||= 'Normal'
29
- self.draft ||= false
30
- self.is_read = true if is_read.nil?
31
- self.to_recipients ||= []
32
- self.cc_recipients ||= []
33
- self.bcc_recipients ||= []
34
- self.file_attachments ||= []
35
- self.item_attachments ||= []
36
- self.inline_attachments ||= []
37
- self.extended_properties ||= []
38
- end
23
+ private
24
+
25
+ def init_defaults!
26
+ self.subject ||= nil
27
+ self.body ||= nil
28
+ self.body_type ||= 'Text'
29
+ self.importance ||= 'Normal'
30
+ self.draft ||= false
31
+ self.is_read = true if is_read.nil?
32
+ self.to_recipients ||= []
33
+ self.cc_recipients ||= []
34
+ self.bcc_recipients ||= []
35
+ self.file_attachments ||= []
36
+ self.item_attachments ||= []
37
+ self.inline_attachments ||= []
38
+ self.extended_properties ||= []
39
+ self.mime_content_charset ||= 'UTF-8'
40
+ end
39
41
 
40
- def to_ews_basic
41
- ews_opts = {}
42
- ews_opts[:message_disposition] = (draft ? 'SaveOnly' : 'SendAndSaveCopy')
42
+ def to_ews_basic
43
+ ews_opts = {}
44
+ ews_opts[:message_disposition] = message_disposition || (draft ? 'SaveOnly' : 'SendAndSaveCopy')
43
45
 
44
- if saved_item_folder_id
45
- if saved_item_folder_id.kind_of?(Hash)
46
- ews_opts[:saved_item_folder_id] = saved_item_folder_id
47
- else
48
- ews_opts[:saved_item_folder_id] = {id: saved_item_folder_id}
46
+ if saved_item_folder_id
47
+ ews_opts[:saved_item_folder_id] = if saved_item_folder_id.is_a?(Hash)
48
+ saved_item_folder_id
49
+ else
50
+ { id: saved_item_folder_id }
51
+ end
49
52
  end
50
- end
51
53
 
52
- msg = {}
53
- msg[:subject] = subject if subject
54
- msg[:body] = {text: body, body_type: body_type} if body
54
+ msg = {}
55
+ msg[:mime_content] = { text: mime_content, character_set: mime_content_charset } if mime_content
56
+ msg[:subject] = subject if subject
57
+ msg[:body] = { text: body, body_type: body_type } if body
55
58
 
56
- msg[:importance] = importance if importance
59
+ msg[:importance] = importance if importance
57
60
 
58
- to_r = to_recipients.collect{|r| {mailbox: {email_address: r}}}
59
- msg[:to_recipients] = to_r unless to_r.empty?
61
+ to_r = to_recipients.collect { |r| { mailbox: { email_address: r } } }
62
+ msg[:to_recipients] = to_r unless to_r.empty?
60
63
 
61
- cc_r = cc_recipients.collect{|r| {mailbox: {email_address: r}}}
62
- msg[:cc_recipients] = cc_r unless cc_r.empty?
64
+ cc_r = cc_recipients.collect { |r| { mailbox: { email_address: r } } }
65
+ msg[:cc_recipients] = cc_r unless cc_r.empty?
63
66
 
64
- bcc_r = bcc_recipients.collect{|r| {mailbox: {email_address: r}}}
65
- msg[:bcc_recipients] = bcc_r unless bcc_r.empty?
67
+ bcc_r = bcc_recipients.collect { |r| { mailbox: { email_address: r } } }
68
+ msg[:bcc_recipients] = bcc_r unless bcc_r.empty?
66
69
 
67
- msg[:is_read] = is_read
70
+ msg[:is_read] = is_read
68
71
 
69
- msg[:extended_properties] = extended_properties unless extended_properties.empty?
72
+ msg[:extended_properties] = extended_properties unless extended_properties.empty?
70
73
 
71
- [ews_opts, msg]
74
+ [ews_opts, msg]
75
+ end
72
76
  end
73
-
74
77
  end
75
78
  end
76
79
  end
@@ -1,25 +1,27 @@
1
- module Viewpoint::EWS
2
- module Template
3
- class ReplyToItem < Message
1
+ # frozen_string_literal: true
4
2
 
5
- # Format this object for EWS backend consumption.
6
- def to_ews
7
- ews_opts, msg = to_ews_basic
8
- msg[:reference_item_id] = reference_item_id
9
- msg[:new_body_content] = {text: new_body_content, body_type: new_body_type}
10
- ews_opts.merge({items: [{ews_type => msg}]})
11
- end
12
-
13
- private
3
+ module Viewpoint
4
+ module EWS
5
+ module Template
6
+ # Template for building reply-to-item requests.
7
+ class ReplyToItem < Message
8
+ # Format this object for EWS backend consumption.
9
+ def to_ews
10
+ ews_opts, msg = to_ews_basic
11
+ msg[:reference_item_id] = reference_item_id
12
+ msg[:new_body_content] = { text: new_body_content, body_type: new_body_type }
13
+ ews_opts.merge({ items: [{ ews_type => msg }] })
14
+ end
14
15
 
16
+ private
15
17
 
16
- def init_defaults!
17
- super
18
- self.new_body_content ||= ''
19
- self.new_body_type ||= 'Text'
20
- self.ews_type = :reply_to_item
18
+ def init_defaults!
19
+ super
20
+ self.new_body_content ||= ''
21
+ self.new_body_type ||= 'Text'
22
+ self.ews_type = :reply_to_item
23
+ end
21
24
  end
22
-
23
25
  end
24
26
  end
25
27
  end
@@ -1,74 +1,74 @@
1
- module Viewpoint::EWS
2
- module Template
3
- # Template for creating Tasks
4
- # @see http://msdn.microsoft.com/en-us/library/exchange/aa564765.aspx
5
- class Task < OpenStruct
1
+ # frozen_string_literal: true
6
2
 
7
- # Available parameters with the required ordering
8
- PARAMETERS = %w{mime_content item_id parent_folder_id item_class subject sensitivity body attachments
9
- date_time_received size categories in_reply_to is_submitted is_draft is_from_me is_resend
10
- is_unmodified internet_message_headers date_time_sent date_time_created response_objects
11
- reminder_due_by reminder_is_set reminder_minutes_before_start display_cc display_to
12
- has_attachments extended_property culture actual_work assigned_time billing_information
13
- change_count companies complete_date contacts delegation_state delegator due_date
14
- is_assignment_editable is_complete is_recurring is_team_task mileage owner percent_complete
15
- recurrence start_date status status_description total_work effective_rights last_modified_name
16
- last_modified_time is_associated web_client_read_form_query_string
17
- web_client_edit_form_query_string conversation_id unique_body
18
- }.map(&:to_sym).freeze
3
+ module Viewpoint
4
+ module EWS
5
+ module Template
6
+ # Template for creating Tasks
7
+ # @see http://msdn.microsoft.com/en-us/library/exchange/aa564765.aspx
8
+ class Task < OpenStruct
9
+ # Available parameters with the required ordering
10
+ PARAMETERS = %w[mime_content item_id parent_folder_id item_class subject sensitivity body attachments
11
+ date_time_received size categories in_reply_to is_submitted is_draft is_from_me is_resend
12
+ is_unmodified internet_message_headers date_time_sent date_time_created response_objects
13
+ reminder_due_by reminder_is_set reminder_minutes_before_start display_cc display_to
14
+ has_attachments extended_property culture actual_work assigned_time billing_information
15
+ change_count companies complete_date contacts delegation_state delegator due_date
16
+ is_assignment_editable is_complete is_recurring is_team_task mileage owner percent_complete
17
+ recurrence start_date status status_description total_work effective_rights last_modified_name
18
+ last_modified_time is_associated web_client_read_form_query_string
19
+ web_client_edit_form_query_string conversation_id unique_body].map(&:to_sym).freeze
19
20
 
20
- # Returns a new Task template
21
- def initialize(opts = {})
22
- super opts.dup
23
- end
21
+ # Returns a new Task template
22
+ def initialize(opts = {})
23
+ super opts.dup
24
+ end
24
25
 
25
- # EWS CreateItem container
26
- # @return [Hash]
27
- def to_ews_create
28
- structure = {}
26
+ # EWS CreateItem container
27
+ # @return [Hash]
28
+ def to_ews_create
29
+ structure = {}
29
30
 
30
- if self.saved_item_folder_id
31
- if self.saved_item_folder_id.kind_of?(Hash)
32
- structure[:saved_item_folder_id] = saved_item_folder_id
33
- else
34
- structure[:saved_item_folder_id] = {id: saved_item_folder_id}
31
+ if saved_item_folder_id
32
+ structure[:saved_item_folder_id] = if saved_item_folder_id.is_a?(Hash)
33
+ saved_item_folder_id
34
+ else
35
+ { id: saved_item_folder_id }
36
+ end
35
37
  end
36
- end
37
38
 
38
- structure[:items] = [{task: to_ews_item}]
39
- structure
40
- end
39
+ structure[:items] = [{ task: to_ews_item }]
40
+ structure
41
+ end
41
42
 
42
- # EWS Item hash
43
- #
44
- # Puts all known parameters in the required ordering and structure
45
- # @return [Hash]
46
- def to_ews_item
47
- item_parameters = {}
48
- PARAMETERS.each do |key|
49
- if !(value = self.send(key)).nil?
43
+ # EWS Item hash
44
+ #
45
+ # Puts all known parameters in the required ordering and structure
46
+ # @return [Hash]
47
+ def to_ews_item
48
+ item_parameters = {}
49
+ PARAMETERS.each do |key|
50
+ next if (value = send(key)).nil?
50
51
 
51
52
  # Convert non duplicable values to String
52
53
  case value
53
- when NilClass, FalseClass, TrueClass, Symbol, Numeric
54
- value = value.to_s
54
+ when NilClass, FalseClass, TrueClass, Symbol, Numeric
55
+ value = value.to_s
55
56
  end
56
57
 
57
58
  # Convert attributes
58
- case key
59
- when :start_date, :due_date
60
- item_parameters[key] = {text: value.respond_to?(:iso8601) ? value.iso8601 : value}
61
- when :body
62
- item_parameters[key] = {body_type: self.body_type || 'Text', text: value.to_s}
63
- else
64
- item_parameters[key] = value
65
- end
59
+ item_parameters[key] = case key
60
+ when :start_date, :due_date
61
+ { text: value.respond_to?(:iso8601) ? value.iso8601 : value }
62
+ when :body
63
+ { body_type: body_type || 'Text', text: value.to_s }
64
+ else
65
+ value
66
+ end
66
67
  end
67
- end
68
68
 
69
- item_parameters
69
+ item_parameters
70
+ end
70
71
  end
71
-
72
72
  end
73
73
  end
74
74
  end