zm-ruby-client 2.2.8 → 3.0.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 (202) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +6 -0
  3. data/.ruby-version +1 -0
  4. data/CHANGELOG.md +10 -6
  5. data/Gemfile +1 -6
  6. data/README.md +10 -15
  7. data/VERSION +1 -1
  8. data/lib/zm/client/account/account.rb +35 -22
  9. data/lib/zm/client/account/account_aliases_collection.rb +14 -6
  10. data/lib/zm/client/account/account_dls_membership_collection.rb +10 -4
  11. data/lib/zm/client/account/account_dls_owner_collection.rb +8 -5
  12. data/lib/zm/client/account/account_jsns_builder.rb +31 -19
  13. data/lib/zm/client/account/account_jsns_initializer.rb +4 -14
  14. data/lib/zm/client/account/accounts_builder.rb +1 -1
  15. data/lib/zm/client/account/accounts_collection.rb +15 -8
  16. data/lib/zm/client/ace/ace.rb +5 -5
  17. data/lib/zm/client/ace/ace_jsns_builder.rb +8 -8
  18. data/lib/zm/client/ace/ace_jsns_initializer.rb +7 -7
  19. data/lib/zm/client/ace/aces_builder.rb +1 -1
  20. data/lib/zm/client/ace/aces_collection.rb +2 -2
  21. data/lib/zm/client/appointment/appointment.rb +27 -24
  22. data/lib/zm/client/appointment/appointment_jsns_builder.rb +29 -20
  23. data/lib/zm/client/appointment/appointment_jsns_initializer.rb +14 -13
  24. data/lib/zm/client/appointment/appointments_builder.rb +1 -1
  25. data/lib/zm/client/appointment/appointments_collection.rb +8 -7
  26. data/lib/zm/client/backup/backup.rb +6 -2
  27. data/lib/zm/client/backup/backup_jsns_initializer.rb +14 -12
  28. data/lib/zm/client/backup/backups_builder.rb +1 -1
  29. data/lib/zm/client/backup/backups_collection.rb +2 -1
  30. data/lib/zm/client/base/account_search_objects_collection.rb +46 -20
  31. data/lib/zm/client/base/admin_objects_collection.rb +22 -27
  32. data/lib/zm/client/base/base_account_jsns_builder.rb +1 -4
  33. data/lib/zm/client/base/base_jsns_initializer.rb +8 -8
  34. data/lib/zm/client/base/mailbox_infos_collection.rb +23 -15
  35. data/lib/zm/client/base/mailbox_object.rb +174 -69
  36. data/lib/zm/client/base/mailbox_prefs_collection.rb +4 -8
  37. data/lib/zm/client/base/object.rb +2 -2
  38. data/lib/zm/client/base/objects_builder.rb +7 -3
  39. data/lib/zm/client/base/objects_collection.rb +4 -13
  40. data/lib/zm/client/base/zimbra_attribute.rb +4 -17
  41. data/lib/zm/client/base/zimbra_attributes_collection.rb +16 -9
  42. data/lib/zm/client/base.rb +0 -1
  43. data/lib/zm/client/cluster/batch_request.rb +50 -0
  44. data/lib/zm/client/cluster/cluster.rb +49 -27
  45. data/lib/zm/client/cluster/cluster_config.rb +129 -40
  46. data/lib/zm/client/common/recipients.rb +2 -2
  47. data/lib/zm/client/common/utils.rb +1 -13
  48. data/lib/zm/client/common.rb +0 -1
  49. data/lib/zm/client/connector/{rest_account.rb → rest_connector.rb} +40 -50
  50. data/lib/zm/client/connector/soap_account.rb +19 -15
  51. data/lib/zm/client/connector/soap_admin.rb +9 -9
  52. data/lib/zm/client/connector/soap_base.rb +24 -17
  53. data/lib/zm/client/connector/soap_error.rb +3 -23
  54. data/lib/zm/client/constant.rb +18 -16
  55. data/lib/zm/client/contact/contact.rb +21 -40
  56. data/lib/zm/client/contact/contact_jsns_builder.rb +1 -1
  57. data/lib/zm/client/contact/contact_jsns_initializer.rb +4 -26
  58. data/lib/zm/client/contact/contacts_builder.rb +1 -1
  59. data/lib/zm/client/contact/contacts_collection.rb +4 -24
  60. data/lib/zm/client/contact/group_contact_jsns_builder.rb +18 -13
  61. data/lib/zm/client/contact/mod_group_contact.rb +6 -2
  62. data/lib/zm/client/cos/cos.rb +35 -11
  63. data/lib/zm/client/cos/cos_domains_collection.rb +1 -1
  64. data/lib/zm/client/cos/cos_jsns_builder.rb +22 -9
  65. data/lib/zm/client/cos/cos_jsns_initializer.rb +2 -6
  66. data/lib/zm/client/cos/cos_servers_collection.rb +5 -6
  67. data/lib/zm/client/cos/coses_builder.rb +1 -1
  68. data/lib/zm/client/cos/coses_collection.rb +6 -4
  69. data/lib/zm/client/datasource/datasource.rb +27 -34
  70. data/lib/zm/client/datasource/datasource_jsns_builder.rb +1 -1
  71. data/lib/zm/client/datasource/datasource_jsns_initializer.rb +5 -6
  72. data/lib/zm/client/datasource/datasources_builder.rb +6 -9
  73. data/lib/zm/client/datasource/datasources_collection.rb +6 -5
  74. data/lib/zm/client/distributionlist/distributionlist.rb +22 -42
  75. data/lib/zm/client/distributionlist/distributionlist_aliases_collection.rb +14 -6
  76. data/lib/zm/client/distributionlist/distributionlist_jsns_builder.rb +20 -16
  77. data/lib/zm/client/distributionlist/distributionlist_jsns_initializer.rb +2 -11
  78. data/lib/zm/client/distributionlist/distributionlist_members_collection.rb +20 -12
  79. data/lib/zm/client/distributionlist/distributionlist_owners_collection.rb +16 -5
  80. data/lib/zm/client/distributionlist/distributionlists_builder.rb +1 -1
  81. data/lib/zm/client/distributionlist/distributionlists_collection.rb +12 -6
  82. data/lib/zm/client/distributionlist/dls_membership_collection.rb +12 -6
  83. data/lib/zm/client/document/document.rb +16 -8
  84. data/lib/zm/client/document/document_jsns_builder.rb +1 -1
  85. data/lib/zm/client/document/document_jsns_initializer.rb +27 -26
  86. data/lib/zm/client/document/documents_builder.rb +1 -1
  87. data/lib/zm/client/document/documents_collection.rb +1 -1
  88. data/lib/zm/client/domain/domain.rb +18 -37
  89. data/lib/zm/client/domain/domain_accounts_collection.rb +1 -1
  90. data/lib/zm/client/domain/domain_distributionlists_collection.rb +1 -1
  91. data/lib/zm/client/domain/domain_jsns_builder.rb +18 -9
  92. data/lib/zm/client/domain/domain_jsns_initializer.rb +2 -6
  93. data/lib/zm/client/domain/domain_resources_collection.rb +1 -1
  94. data/lib/zm/client/domain/domains_builder.rb +1 -1
  95. data/lib/zm/client/domain/domains_collection.rb +12 -6
  96. data/lib/zm/client/filter_rules/filter_rule.rb +0 -9
  97. data/lib/zm/client/filter_rules/filter_rule_jsns_initializer.rb +7 -6
  98. data/lib/zm/client/filter_rules/filter_rules_builder.rb +1 -1
  99. data/lib/zm/client/filter_rules/filter_rules_collection.rb +5 -15
  100. data/lib/zm/client/filter_rules/outgoing_filter_rules_collection.rb +5 -2
  101. data/lib/zm/client/folder/folder.rb +74 -56
  102. data/lib/zm/client/folder/folder_grant.rb +7 -5
  103. data/lib/zm/client/folder/folder_grant_jsns_builder.rb +6 -3
  104. data/lib/zm/client/folder/folder_grants_collection.rb +2 -4
  105. data/lib/zm/client/folder/folder_jsns_builder.rb +14 -7
  106. data/lib/zm/client/folder/folder_jsns_initializer.rb +59 -42
  107. data/lib/zm/client/folder/folder_retention_policies_collection.rb +4 -2
  108. data/lib/zm/client/folder/folders_builder.rb +1 -1
  109. data/lib/zm/client/folder/folders_collection.rb +21 -18
  110. data/lib/zm/client/folder/folders_jsns_builder.rb +4 -2
  111. data/lib/zm/client/folder/mod_document_folder.rb +5 -4
  112. data/lib/zm/client/identity/identities_builder.rb +1 -1
  113. data/lib/zm/client/identity/identities_collection.rb +6 -5
  114. data/lib/zm/client/identity/identity.rb +9 -29
  115. data/lib/zm/client/identity/identity_jsns_builder.rb +8 -4
  116. data/lib/zm/client/identity/identity_jsns_initializer.rb +5 -4
  117. data/lib/zm/client/license/license.rb +7 -1
  118. data/lib/zm/client/license/license_jsns_initializer.rb +8 -5
  119. data/lib/zm/client/license/licenses_collection.rb +1 -1
  120. data/lib/zm/client/mailbox/mailbox_item_concern.rb +33 -0
  121. data/lib/zm/client/mailbox/mailbox_item_id.rb +7 -0
  122. data/lib/zm/client/message/attachments_collection.rb +2 -2
  123. data/lib/zm/client/message/message.rb +56 -52
  124. data/lib/zm/client/message/message_flags.rb +21 -13
  125. data/lib/zm/client/message/message_jsns_builder.rb +11 -6
  126. data/lib/zm/client/message/message_jsns_initializer.rb +24 -23
  127. data/lib/zm/client/message/messages_builder.rb +1 -1
  128. data/lib/zm/client/message/messages_collection.rb +1 -15
  129. data/lib/zm/client/mountpoint/mountpoint.rb +17 -25
  130. data/lib/zm/client/mountpoint/mountpoint_jsns_builder.rb +6 -3
  131. data/lib/zm/client/mountpoint/mountpoint_jsns_initializer.rb +25 -24
  132. data/lib/zm/client/mountpoint/mountpoints_builder.rb +1 -1
  133. data/lib/zm/client/mountpoint/mountpoints_collection.rb +13 -9
  134. data/lib/zm/client/mta_queue/mta_queue.rb +6 -2
  135. data/lib/zm/client/mta_queue/mta_queue_jsns_initializer.rb +3 -7
  136. data/lib/zm/client/mta_queue/mta_queues_builder.rb +3 -1
  137. data/lib/zm/client/mta_queue_item/mta_queue_item.rb +5 -3
  138. data/lib/zm/client/mta_queue_item/mta_queue_item_jsns_initializer.rb +1 -5
  139. data/lib/zm/client/mta_queue_item/mta_queue_items_builder.rb +3 -1
  140. data/lib/zm/client/mta_queue_item/mta_queue_items_collection.rb +3 -1
  141. data/lib/zm/client/resource/resource.rb +6 -18
  142. data/lib/zm/client/resource/resource_jsns_builder.rb +20 -13
  143. data/lib/zm/client/resource/resource_jsns_initializer.rb +4 -14
  144. data/lib/zm/client/resource/resources_builder.rb +1 -1
  145. data/lib/zm/client/resource/resources_collection.rb +12 -7
  146. data/lib/zm/client/search_folder/search_folder.rb +13 -29
  147. data/lib/zm/client/search_folder/search_folder_jsns_builder.rb +6 -6
  148. data/lib/zm/client/search_folder/search_folder_jsns_initializer.rb +19 -18
  149. data/lib/zm/client/search_folder/search_folders_builder.rb +1 -1
  150. data/lib/zm/client/search_folder/search_folders_collection.rb +6 -5
  151. data/lib/zm/client/server/server.rb +9 -3
  152. data/lib/zm/client/server/server_accounts_collection.rb +4 -2
  153. data/lib/zm/client/server/server_jsns_initializer.rb +1 -5
  154. data/lib/zm/client/server/servers_builder.rb +1 -1
  155. data/lib/zm/client/server/servers_collection.rb +17 -9
  156. data/lib/zm/client/share/share.rb +5 -3
  157. data/lib/zm/client/share/share_jsns_initializer.rb +15 -14
  158. data/lib/zm/client/share/share_mountpoints_collection.rb +3 -6
  159. data/lib/zm/client/share/shares_builder.rb +1 -1
  160. data/lib/zm/client/share/shares_collection.rb +6 -3
  161. data/lib/zm/client/signature/signature.rb +6 -21
  162. data/lib/zm/client/signature/signature_jsns_builder.rb +12 -7
  163. data/lib/zm/client/signature/signature_jsns_initializer.rb +5 -4
  164. data/lib/zm/client/signature/signatures_builder.rb +1 -1
  165. data/lib/zm/client/signature/signatures_collection.rb +6 -5
  166. data/lib/zm/client/soap_request/request_methods_admin.rb +56 -0
  167. data/lib/zm/client/soap_request/request_methods_mailbox.rb +60 -0
  168. data/lib/zm/client/soap_request/soap_constants.rb +7 -0
  169. data/lib/zm/client/soap_request/soap_context.rb +11 -2
  170. data/lib/zm/client/soap_request.rb +3 -0
  171. data/lib/zm/client/tag/account_object_tags_collection.rb +11 -9
  172. data/lib/zm/client/tag/tag.rb +8 -44
  173. data/lib/zm/client/tag/tag_jsns_builder.rb +4 -2
  174. data/lib/zm/client/tag/tag_jsns_initializer.rb +7 -6
  175. data/lib/zm/client/tag/tags_builder.rb +1 -1
  176. data/lib/zm/client/tag/tags_collection.rb +6 -5
  177. data/lib/zm/client/task/task.rb +6 -5
  178. data/lib/zm/client/task/task_jsns_initializer.rb +28 -27
  179. data/lib/zm/client/task/tasks_builder.rb +1 -1
  180. data/lib/zm/client/task/tasks_collection.rb +2 -2
  181. data/lib/zm/client/token.rb +52 -0
  182. data/lib/zm/client/upload/upload.rb +101 -95
  183. data/lib/zm/client/zm_logger.rb +83 -0
  184. data/lib/zm/client.rb +6 -1
  185. data/lib/zm/modules/base.rb +0 -1
  186. data/lib/zm/modules/belongs_to_folder.rb +6 -7
  187. data/lib/zm/modules/belongs_to_tag.rb +3 -1
  188. data/lib/zm/modules/common/zimbra-attrs.csv +3 -4
  189. data/lib/zm/modules/inspector.rb +2 -2
  190. data/lib/zm/modules/missing_method_static_collection.rb +2 -2
  191. data/lib/zm/support/cache/entry.rb +63 -0
  192. data/lib/zm/support/cache/file_store.rb +141 -0
  193. data/lib/zm/support/cache/null_store.rb +43 -0
  194. data/lib/zm/support/cache/request_strategy.rb +10 -0
  195. data/lib/zm/support/cache/store.rb +197 -0
  196. data/lib/zm/support/cache/strategy.rb +13 -0
  197. data/lib/zm/support/cache.rb +26 -0
  198. data/lib/zm-ruby-client.rb +0 -3
  199. data/zm-ruby-client.gemspec +10 -15
  200. metadata +36 -35
  201. data/lib/zm/client/common/token_metadata.rb +0 -44
  202. data/lib/zm/modules/zm_logger.rb +0 -26
@@ -5,77 +5,74 @@ module Zm
5
5
  # class for account folder
6
6
  class Folder < Base::Object
7
7
  include BelongsToFolder
8
- # include Zm::Model::AttributeChangeObserver
8
+ include RequestMethodsMailbox
9
+ include MailboxItemConcern
9
10
 
10
- attr_accessor :type, :id, :uuid, :name, :absFolderPath, :l, :url, :luuid, :f, :view, :rev, :ms,
11
+ attr_accessor :type, :uuid, :name, :absFolderPath, :url, :luuid, :f, :view, :rev, :ms,
11
12
  :webOfflineSyncDays, :activesyncdisabled, :n, :s, :i4ms, :i4next, :zid, :rid, :ruuid,
12
- :owner, :reminder, :acl, :itemCount, :broken, :deletable, :color, :rgb, :fb, :folders,
13
- :grants, :retention_policies,
14
- :name, :color, :rgb, :l, :url, :f, :view
13
+ :owner, :reminder, :itemCount, :broken, :deletable, :color, :rgb, :fb, :folders
15
14
 
16
15
  alias nb_messages n
17
16
  alias nb_items n
18
17
  alias size s
19
18
 
20
19
  def initialize(parent)
21
- super(parent)
20
+ super
22
21
 
23
- @l = FolderDefault::ROOT[:id]
24
22
  @type = :folder
25
23
  @folders = []
26
- @grants = FolderGrantsCollection.new(self)
27
- @retention_policies = FolderRetentionPoliciesCollection.new(self)
28
24
 
29
25
  yield(self) if block_given?
30
26
  end
31
27
 
32
- def is_immutable?
33
- @is_immutable ||= Zm::Client::FolderDefault::IDS.include?(@id.to_i)
34
- end
28
+ def l
29
+ return @l if defined? @l
35
30
 
36
- def to_query
37
- "inid:#{id}"
31
+ FolderDefault::ROOT.id
38
32
  end
33
+ alias folder_id l
39
34
 
40
- def create!
41
- rep = @parent.sacc.invoke(jsns_builder.to_jsns)
42
- json = rep[:CreateFolderResponse][:folder].first
43
- FolderJsnsInitializer.update(self, json)
44
- @id
35
+ def grants
36
+ return @grants if defined? @grants
37
+
38
+ @grants = FolderGrantsCollection.new(self)
45
39
  end
40
+ alias acl grants
46
41
 
47
- def modify!
48
- @parent.sacc.invoke(jsns_builder.to_update)
49
- true
42
+ def retention_policies
43
+ return @retention_policies if defined? @retention_policies
44
+
45
+ @retention_policies = FolderRetentionPoliciesCollection.new(self)
50
46
  end
51
47
 
52
- def update!(hash)
53
- return false if hash.delete_if { |k, v| v.nil? || !respond_to?(k) }.empty?
48
+ def is_immutable?
49
+ return @is_immutable if defined? @is_immutable
54
50
 
55
- do_update!(hash)
51
+ @is_immutable = Zm::Client::FolderDefault::IDS.include?(id.to_i)
52
+ end
56
53
 
57
- hash.each do |key, value|
58
- update_attribute(key, value)
59
- end
54
+ def to_query
55
+ "inid:#{id}"
56
+ end
60
57
 
61
- true
58
+ def create!
59
+ rep = @parent.soap_connector.invoke(build_create)
60
+ json = rep[:CreateFolderResponse][:folder].first
61
+ FolderJsnsInitializer.update(self, json)
62
+ id
62
63
  end
63
64
 
64
65
  def color!
65
- @parent.sacc.invoke(jsns_builder.to_color)
66
-
66
+ @parent.soap_connector.invoke(build_color)
67
67
  true
68
68
  end
69
69
 
70
- def rename!(new_name)
71
- return false if new_name == @name
72
-
73
- @parent.sacc.invoke(jsns_builder.to_rename(new_name))
74
- @name = new_name
70
+ def build_color
71
+ jsns_builder.to_color
75
72
  end
76
73
 
77
74
  def reload!
78
- rep = @parent.sacc.invoke(jsns_builder.to_find)
75
+ rep = @parent.soap_connector.invoke(jsns_builder.to_find)
79
76
  json = rep[:GetFolderResponse][:folder].first
80
77
  FolderJsnsInitializer.update(self, json)
81
78
  true
@@ -88,16 +85,19 @@ module Zm
88
85
  def empty!
89
86
  return false if empty?
90
87
 
91
- @parent.sacc.invoke(jsns_builder.to_empty)
88
+ @parent.soap_connector.invoke(build_empty)
92
89
  @n = 0
93
90
  end
94
91
  alias clear empty!
95
92
 
93
+ def build_empty
94
+ jsns_builder.to_empty
95
+ end
96
+
96
97
  def delete!
97
- return false if is_immutable? || @id.nil?
98
+ return false if is_immutable? || id.nil?
98
99
 
99
- @parent.sacc.invoke(jsns_builder.to_delete)
100
- @id = nil
100
+ @parent.soap_connector.invoke(build_delete)
101
101
  end
102
102
 
103
103
  def remove_flag!(pattern)
@@ -106,47 +106,65 @@ module Zm
106
106
  end
107
107
 
108
108
  def add_message(eml, d = nil, f = nil, tn = nil)
109
+ @parent.soap_connector.invoke(build_add_message(eml, d, f, tn))
110
+ end
111
+
112
+ def build_add_message(eml, d = nil, f = nil, tn = nil)
109
113
  m = {
110
114
  l: id,
111
115
  d: d,
112
116
  f: f,
113
117
  tn: tn,
114
118
  content: { _content: eml }
115
- }.reject { |_, v| v.nil? }
119
+ }
120
+ m.compact!
116
121
 
117
122
  attrs = { m: m }
118
123
 
119
- soap_request = SoapElement.mail(SoapMailConstants::ADD_MSG_REQUEST).add_attributes(attrs)
120
- @parent.sacc.invoke(soap_request)
124
+ SoapElement.mail(SoapMailConstants::ADD_MSG_REQUEST)
125
+ .add_attributes(attrs)
121
126
  end
122
127
 
123
128
  def add_appointments(ics)
129
+ @parent.soap_connector.invoke(build_add_appointments(ics)).dig(:ImportAppointmentsResponse, :appt)
130
+ end
131
+
132
+ def build_add_appointments(ics)
124
133
  attrs = { l: id, ct: SoapConstants::TEXT_CALENDAR }
125
134
  soap_request = SoapElement.mail(SoapMailConstants::IMPORT_APPOINTMENTS_REQUEST).add_attributes(attrs)
126
135
  node_content = SoapElement.create(SoapConstants::CONTENT).add_content(ics)
127
136
  soap_request.add_node(node_content)
128
- @parent.sacc.invoke(soap_request).dig(:ImportAppointmentsResponse, :appt)
137
+ soap_request
129
138
  end
130
139
 
131
- def download(dest_file_path, fmt = 'tgz')
132
- uploader = Upload.new(@parent, RestAccountConnector.new)
133
- uploader.download_folder(@id, fmt, dest_file_path)
140
+ def add_contacts(csv)
141
+ @parent.soap_connector.invoke(build_add_contacts(csv)).dig(:ImportContactsResponse, :cn)
134
142
  end
135
143
 
136
- def upload(file_path, fmt = nil, types = nil, resolve = 'replace')
137
- fmt ||= File.extname(file_path)[1..]
138
- uploader = Upload.new(@parent, RestAccountConnector.new)
139
- uploader.send_file(absFolderPath, fmt, types, resolve, file_path)
144
+ def build_add_contacts(csv)
145
+ attrs = { l: id, ct: SoapConstants::CSV }
146
+ soap_request = SoapElement.mail(SoapMailConstants::IMPORT_CONTACTS_REQUEST).add_attributes(attrs)
147
+ node_content = SoapElement.create(SoapConstants::CONTENT).add_content(csv)
148
+ soap_request.add_node(node_content)
149
+ soap_request
140
150
  end
141
151
 
142
- private
152
+ def download(dest_file_path, fmt: nil)
153
+ uploader = @parent.build_uploader
154
+ uploader.download_folder(dest_file_path, id, fmt:)
155
+ end
143
156
 
144
- def do_update!(hash)
145
- @parent.sacc.invoke(jsns_builder.to_patch(hash))
157
+ def upload(src_file_path, fmt: nil, resolve: nil)
158
+ uploader = @parent.build_uploader
159
+ uploader.send_file(src_file_path, id, fmt:, type: view, resolve:)
146
160
  end
147
161
 
162
+ private
163
+
148
164
  def jsns_builder
149
- @jsns_builder ||= FolderJsnsBuilder.new(self)
165
+ return @jsns_builder if defined? @jsns_builder
166
+
167
+ @jsns_builder = FolderJsnsBuilder.new(self)
150
168
  end
151
169
  end
152
170
  end
@@ -54,11 +54,11 @@ module Zm
54
54
  end
55
55
 
56
56
  def save!
57
- @parent.sacc.invoke(jsns_builder.to_create)
57
+ @parent.soap_connector.invoke(jsns_builder.to_create)
58
58
  end
59
59
 
60
60
  def delete!
61
- @parent.sacc.invoke(jsns_builder.to_delete)
61
+ @parent.soap_connector.invoke(jsns_builder.to_delete)
62
62
  @parent.all.delete(self)
63
63
  end
64
64
 
@@ -67,12 +67,12 @@ module Zm
67
67
  end
68
68
 
69
69
  def to_h
70
- Hash[instance_variables_map]
70
+ instance_variables_map.to_h
71
71
  end
72
72
 
73
73
  def inspect
74
74
  keys_str = to_h.map { |k, v| "#{k}: #{v}" }.join(', ')
75
- "#{self.class}:#{format('0x00%x', (object_id << 1))} #{keys_str}"
75
+ "#{self.class}:#{format('0x00%x', object_id << 1)} #{keys_str}"
76
76
  end
77
77
 
78
78
  def instance_variables_map
@@ -84,7 +84,9 @@ module Zm
84
84
  private
85
85
 
86
86
  def jsns_builder
87
- @jsns_builder ||= FolderGrantJsnsBuilder.new(self)
87
+ return @jsns_builder if defined? @jsns_builder
88
+
89
+ @jsns_builder = FolderGrantJsnsBuilder.new(self)
88
90
  end
89
91
 
90
92
  def get_token(target = self)
@@ -12,7 +12,8 @@ module Zm
12
12
  d: @item.d,
13
13
  expiry: @item.expiry,
14
14
  key: @item.key
15
- }.delete_if { |_, v| v.nil? }
15
+ }
16
+ grant.compact!
16
17
 
17
18
  attrs = {
18
19
  action: {
@@ -22,7 +23,8 @@ module Zm
22
23
  }
23
24
  }
24
25
 
25
- SoapElement.mail(SoapMailConstants::FOLDER_ACTION_REQUEST).add_attributes(attrs)
26
+ SoapElement.mail(SoapMailConstants::FOLDER_ACTION_REQUEST)
27
+ .add_attributes(attrs)
26
28
  end
27
29
 
28
30
  alias to_create to_jsns
@@ -39,7 +41,8 @@ module Zm
39
41
  }
40
42
  }
41
43
 
42
- SoapElement.mail(SoapMailConstants::FOLDER_ACTION_REQUEST).add_attributes(attrs)
44
+ SoapElement.mail(SoapMailConstants::FOLDER_ACTION_REQUEST)
45
+ .add_attributes(attrs)
43
46
  end
44
47
 
45
48
  def delete_zid
@@ -59,10 +59,8 @@ module Zm
59
59
  @parent.parent.soap_account_connector
60
60
  end
61
61
 
62
- alias sacc soap_account_connector
63
-
64
- def to_s
65
- @all.map(&:to_s)
62
+ def soap_connector
63
+ @parent.parent.soap_connector
66
64
  end
67
65
  end
68
66
  end
@@ -19,11 +19,13 @@ module Zm
19
19
  url: @item.url,
20
20
  fb: @item.fb,
21
21
  view: @item.view
22
- }.delete_if { |_, v| v.nil? }
22
+ }
23
+ folder.compact!
23
24
 
24
25
  attrs = { folder: folder }
25
26
 
26
- SoapElement.mail(SoapMailConstants::CREATE_FOLDER_REQUEST).add_attributes(attrs)
27
+ SoapElement.mail(SoapMailConstants::CREATE_FOLDER_REQUEST)
28
+ .add_attributes(attrs)
27
29
  end
28
30
 
29
31
  alias to_create to_jsns
@@ -40,7 +42,8 @@ module Zm
40
42
  url: @item.url,
41
43
  fb: @item.fb,
42
44
  view: @item.view
43
- }.delete_if { |_, v| v.nil? }
45
+ }
46
+ action.compact!
44
47
 
45
48
  if @item.is_immutable?
46
49
  action.delete(:name)
@@ -49,7 +52,8 @@ module Zm
49
52
 
50
53
  attrs = { action: action }
51
54
 
52
- SoapElement.mail(SoapMailConstants::FOLDER_ACTION_REQUEST).add_attributes(attrs)
55
+ SoapElement.mail(SoapMailConstants::FOLDER_ACTION_REQUEST)
56
+ .add_attributes(attrs)
53
57
  end
54
58
 
55
59
  def to_patch(options)
@@ -60,7 +64,8 @@ module Zm
60
64
 
61
65
  attrs = { action: action }
62
66
 
63
- SoapElement.mail(SoapMailConstants::FOLDER_ACTION_REQUEST).add_attributes(attrs)
67
+ SoapElement.mail(SoapMailConstants::FOLDER_ACTION_REQUEST)
68
+ .add_attributes(attrs)
64
69
  end
65
70
 
66
71
  def to_retentionpolicy
@@ -74,7 +79,8 @@ module Zm
74
79
  }
75
80
  }
76
81
 
77
- SoapElement.mail(SoapMailConstants::FOLDER_ACTION_REQUEST).add_attributes(attrs)
82
+ SoapElement.mail(SoapMailConstants::FOLDER_ACTION_REQUEST)
83
+ .add_attributes(attrs)
78
84
  end
79
85
 
80
86
  def to_empty
@@ -86,7 +92,8 @@ module Zm
86
92
 
87
93
  attrs = { action: action }
88
94
 
89
- SoapElement.mail(SoapMailConstants::FOLDER_ACTION_REQUEST).add_attributes(attrs)
95
+ SoapElement.mail(SoapMailConstants::FOLDER_ACTION_REQUEST)
96
+ .add_attributes(attrs)
90
97
  end
91
98
 
92
99
  private
@@ -6,54 +6,51 @@ module Zm
6
6
  class FolderJsnsInitializer
7
7
  class << self
8
8
  def create(parent, json)
9
- item = Folder.new(parent)
10
- update(item, json)
9
+ Folder.new(parent).tap do |item|
10
+ update(item, json)
11
+ end
11
12
  end
12
13
 
13
14
  def update(item, json)
14
- item.type = json[:type]
15
- item.id = json[:id].to_i
16
- item.uuid = json[:uuid]
17
- item.name = json[:name]
18
- item.absFolderPath = json[:absFolderPath]
19
- item.l = json[:l].to_i
20
- item.url = json[:url]
21
- item.luuid = json[:luuid]
22
- item.f = json[:f]
23
- item.view = json[:view]
24
- item.rev = json[:rev]
25
- item.ms = json[:ms]
26
- item.webOfflineSyncDays = json[:webOfflineSyncDays]
27
- item.activesyncdisabled = json[:activesyncdisabled]
28
- item.n = json[:n]
29
- item.s = json[:s]
30
- item.i4ms = json[:i4ms]
31
- item.i4next = json[:i4next]
32
- item.zid = json[:zid]
33
- item.rid = json[:rid]
34
- item.ruuid = json[:ruuid]
35
- item.owner = json[:owner]
36
- item.reminder = json[:reminder]
37
- item.acl = json[:acl]
38
- item.itemCount = json[:itemCount]
39
- item.broken = json[:broken]
40
- item.deletable = json[:deletable]
41
- item.color = json[:color]
42
- item.rgb = json[:rgb]
43
- item.fb = json[:fb]
15
+ item.type = json.delete(:type)
16
+ item.id = json.delete(:id)
17
+ item.uuid = json.delete(:uuid)
18
+ item.name = json.delete(:name)
19
+ item.absFolderPath = json.delete(:absFolderPath)
20
+ item.l = json.delete(:l)
21
+ item.url = json.delete(:url)
22
+ item.luuid = json.delete(:luuid)
23
+ item.f = json.delete(:f)
24
+ item.view = json.delete(:view)
25
+ item.rev = json.delete(:rev)
26
+ item.ms = json.delete(:ms)
27
+ item.webOfflineSyncDays = json.delete(:webOfflineSyncDays)
28
+ item.activesyncdisabled = json.delete(:activesyncdisabled)
29
+ item.n = json.delete(:n)
30
+ item.s = json.delete(:s)
31
+ item.i4ms = json.delete(:i4ms)
32
+ item.i4next = json.delete(:i4next)
33
+ item.zid = json.delete(:zid)
34
+ item.rid = json.delete(:rid)
35
+ item.ruuid = json.delete(:ruuid)
36
+ item.owner = json.delete(:owner)
37
+ item.reminder = json.delete(:reminder)
38
+ item.itemCount = json.delete(:itemCount)
39
+ item.broken = json.delete(:broken)
40
+ item.deletable = json.delete(:deletable)
41
+ item.color = json.delete(:color)
42
+ item.rgb = json.delete(:rgb)
43
+ item.fb = json.delete(:fb)
44
44
 
45
- if !json[:acl].nil? && json[:acl][:grant].is_a?(Array)
46
- json[:acl][:grant].each do |json|
47
- item.grants.create(json[:zid], json[:gt], json[:perm], json[:d])
48
- end
49
- end
45
+ update_grants(item, json)
50
46
 
51
- if json[:retentionPolicy].is_a?(Array)
52
- json[:retentionPolicy].first.map do |policy, v|
53
- next if v.first[:policy].nil?
47
+ if (policies = json.fetch(:retentionPolicy, []).first).is_a?(Array)
48
+ policies.each do |policy, v|
49
+ params = v.first[:policy]&.first
50
+ next if params.nil?
54
51
 
55
- type = v.first[:policy].first[:type]
56
- lifetime = v.first[:policy].first[:lifetime]
52
+ type = params.delete(:type)
53
+ lifetime = params.delete(:lifetime)
57
54
  item.retention_policies.create(policy, lifetime, type)
58
55
  end
59
56
  end
@@ -62,6 +59,26 @@ module Zm
62
59
 
63
60
  item
64
61
  end
62
+
63
+ private
64
+
65
+ def update_grants(item, json)
66
+ acl = json.delete(:acl)
67
+ return unless acl.is_a?(Hash)
68
+
69
+ grants = acl[:grant]
70
+ grants = [grants] unless grants.is_a?(Array)
71
+ grants.compact!
72
+
73
+ grants.each do |grant|
74
+ item.grants.create(
75
+ grant.delete(:zid),
76
+ grant.delete(:gt),
77
+ grant.delete(:perm),
78
+ grant.delete(:d)
79
+ )
80
+ end
81
+ end
65
82
  end
66
83
  end
67
84
  end
@@ -25,14 +25,16 @@ module Zm
25
25
  end
26
26
 
27
27
  def save!
28
- @parent.sacc.invoke(jsns_builder.to_retentionpolicy)
28
+ @parent.soap_connector.invoke(jsns_builder.to_retentionpolicy)
29
29
  true
30
30
  end
31
31
 
32
32
  private
33
33
 
34
34
  def jsns_builder
35
- @jsns_builder ||= FolderJsnsBuilder.new(@parent)
35
+ return @jsns_builder if defined? @jsns_builder
36
+
37
+ @jsns_builder = FolderJsnsBuilder.new(@parent)
36
38
  end
37
39
  end
38
40
  end
@@ -5,7 +5,7 @@ module Zm
5
5
  # class factory [folders]
6
6
  class FoldersBuilder < Base::ObjectsBuilder
7
7
  def initialize(parent, json)
8
- super(parent, json)
8
+ super
9
9
  @key = :folder
10
10
  @root_folder = nil
11
11
  @list = []
@@ -4,18 +4,17 @@ module Zm
4
4
  module Client
5
5
  # collection of folders
6
6
  class FoldersCollection < Base::AccountObjectsCollection
7
- attr_reader :root
8
-
9
7
  attr_accessor :view, :tr, :visible, :needGranteeName, :depth
10
8
 
11
9
  def initialize(parent)
12
10
  @child_class = Folder
13
11
  @builder_class = FoldersBuilder
14
- super(parent)
12
+ super
15
13
  @root = nil
16
14
  reset_query_params
17
15
  end
18
16
 
17
+ # TODO: forcer id en string
19
18
  def find(id)
20
19
  folder = @child_class.new(@parent) do |f|
21
20
  f.id = id
@@ -31,7 +30,6 @@ module Zm
31
30
  def where(view: nil, tr: nil)
32
31
  @view = view
33
32
  @tr = tr
34
- @all = nil
35
33
  self
36
34
  end
37
35
 
@@ -40,48 +38,57 @@ module Zm
40
38
  end
41
39
 
42
40
  def clear
43
- @all = nil
44
41
  @root = nil
45
42
  reset_query_params
46
43
  end
47
44
 
48
45
  def document
49
- @view = FolderDefault::BRIEFCASE[:type]
46
+ @view = FolderDefault::BRIEFCASE.type
50
47
  self
51
48
  end
52
49
 
53
50
  def appointment
54
- @view = FolderDefault::CALENDAR[:type]
51
+ @view = FolderDefault::CALENDAR.type
55
52
  self
56
53
  end
57
54
 
58
55
  def contact
59
- @view = FolderDefault::CONTACTS[:type]
56
+ @view = FolderDefault::CONTACTS.type
60
57
  self
61
58
  end
62
59
 
63
60
  def message
64
- @view = FolderDefault::INBOX[:type]
61
+ @view = FolderDefault::INBOX.type
65
62
  self
66
63
  end
67
64
 
68
65
  def task
69
- @view = FolderDefault::TASKS[:type]
66
+ @view = FolderDefault::TASKS.type
70
67
  self
71
68
  end
72
69
 
70
+ def jsns_builder
71
+ return @jsns_builder if defined? @jsns_builder
72
+
73
+ @jsns_builder = FoldersJsnsBuilder.new(self)
74
+ end
75
+
76
+ def build_query
77
+ jsns_builder.to_jsns
78
+ end
79
+
73
80
  private
74
81
 
75
82
  def build_response
76
83
  fb = @builder_class.new(@parent, make_query)
77
84
  @root = fb.make
78
- @all = fb.flatten
79
- @all.select! { |folder| folder.view == @view } unless @view.nil?
80
- @all
85
+ folders = fb.flatten
86
+ folders.select! { |folder| folder.view == @view } unless @view.nil?
87
+ folders
81
88
  end
82
89
 
83
90
  def make_query
84
- @parent.sacc.invoke(jsns_builder.to_jsns)
91
+ @parent.soap_connector.invoke(jsns_builder.to_jsns)
85
92
  end
86
93
 
87
94
  def reset_query_params
@@ -91,10 +98,6 @@ module Zm
91
98
  @needGranteeName = nil
92
99
  @depth = nil
93
100
  end
94
-
95
- def jsns_builder
96
- @jsns_builder ||= FoldersJsnsBuilder.new(self)
97
- end
98
101
  end
99
102
  end
100
103
  end
@@ -15,9 +15,11 @@ module Zm
15
15
  view: @item.view,
16
16
  depth: @item.depth,
17
17
  tr: @item.tr
18
- }.delete_if { |_, v| v.nil? }
18
+ }
19
+ attrs.compact!
19
20
 
20
- SoapElement.mail(SoapMailConstants::GET_FOLDER_REQUEST).add_attributes(attrs)
21
+ SoapElement.mail(SoapMailConstants::GET_FOLDER_REQUEST)
22
+ .add_attributes(attrs)
21
23
  end
22
24
  end
23
25
  end
@@ -1,10 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module DocumentFolder
4
- UUID_REGEX = /[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}:[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}/.freeze
4
+ UUID_REGEX = /[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}:[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}/
5
5
 
6
6
  def upload(file_path)
7
- uploader = Zm::Client::Upload.new(@parent, Zm::Client::RestAccountConnector.new)
7
+ uploader = @parent.build_uploader
8
8
  str = uploader.upload_attachment(file_path)
9
9
 
10
10
  uuid = str.scan(UUID_REGEX).first
@@ -13,8 +13,9 @@ module DocumentFolder
13
13
 
14
14
  jsns = { doc: { l: @id, upload: { id: uuid } } }
15
15
 
16
- soap_request = Zm::Client::SoapElement.mail(Zm::Client::SoapMailConstants::SAVE_DOCUMENT_REQUEST).add_attributes(jsns)
17
- rep = @parent.sacc.invoke(soap_request)
16
+ soap_request = Zm::Client::SoapElement.mail(Zm::Client::SoapMailConstants::SAVE_DOCUMENT_REQUEST)
17
+ .add_attributes(jsns)
18
+ rep = @parent.soap_connector.invoke(soap_request)
18
19
 
19
20
  Zm::Client::DocumentJsnsInitializer.create(@parent, rep[:SaveDocumentResponse][:doc].first)
20
21
  end
@@ -5,7 +5,7 @@ module Zm
5
5
  # class factory [identities]
6
6
  class IdentitiesBuilder < Base::ObjectsBuilder
7
7
  def initialize(parent, json)
8
- super(parent, json)
8
+ super
9
9
  @json_item_key = :identity
10
10
  end
11
11