zm-ruby-client 2.2.7 → 3.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 (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 +73 -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 +58 -40
  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 +2 -2
  199. data/zm-ruby-client.gemspec +10 -15
  200. metadata +37 -36
  201. data/lib/zm/client/common/token_metadata.rb +0 -44
  202. data/lib/zm/modules/zm_logger.rb +0 -26
@@ -5,77 +5,73 @@ 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, :acl, :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
46
40
 
47
- def modify!
48
- @parent.sacc.invoke(jsns_builder.to_update)
49
- true
41
+ def retention_policies
42
+ return @retention_policies if defined? @retention_policies
43
+
44
+ @retention_policies = FolderRetentionPoliciesCollection.new(self)
50
45
  end
51
46
 
52
- def update!(hash)
53
- return false if hash.delete_if { |k, v| v.nil? || !respond_to?(k) }.empty?
47
+ def is_immutable?
48
+ return @is_immutable if defined? @is_immutable
54
49
 
55
- do_update!(hash)
50
+ @is_immutable = Zm::Client::FolderDefault::IDS.include?(id.to_i)
51
+ end
56
52
 
57
- hash.each do |key, value|
58
- update_attribute(key, value)
59
- end
53
+ def to_query
54
+ "inid:#{id}"
55
+ end
60
56
 
61
- true
57
+ def create!
58
+ rep = @parent.soap_connector.invoke(build_create)
59
+ json = rep[:CreateFolderResponse][:folder].first
60
+ FolderJsnsInitializer.update(self, json)
61
+ id
62
62
  end
63
63
 
64
64
  def color!
65
- @parent.sacc.invoke(jsns_builder.to_color)
66
-
65
+ @parent.soap_connector.invoke(build_color)
67
66
  true
68
67
  end
69
68
 
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
69
+ def build_color
70
+ jsns_builder.to_color
75
71
  end
76
72
 
77
73
  def reload!
78
- rep = @parent.sacc.invoke(jsns_builder.to_find)
74
+ rep = @parent.soap_connector.invoke(jsns_builder.to_find)
79
75
  json = rep[:GetFolderResponse][:folder].first
80
76
  FolderJsnsInitializer.update(self, json)
81
77
  true
@@ -88,16 +84,19 @@ module Zm
88
84
  def empty!
89
85
  return false if empty?
90
86
 
91
- @parent.sacc.invoke(jsns_builder.to_empty)
87
+ @parent.soap_connector.invoke(build_empty)
92
88
  @n = 0
93
89
  end
94
90
  alias clear empty!
95
91
 
92
+ def build_empty
93
+ jsns_builder.to_empty
94
+ end
95
+
96
96
  def delete!
97
- return false if is_immutable? || @id.nil?
97
+ return false if is_immutable? || id.nil?
98
98
 
99
- @parent.sacc.invoke(jsns_builder.to_delete)
100
- @id = nil
99
+ @parent.soap_connector.invoke(build_delete)
101
100
  end
102
101
 
103
102
  def remove_flag!(pattern)
@@ -106,47 +105,65 @@ module Zm
106
105
  end
107
106
 
108
107
  def add_message(eml, d = nil, f = nil, tn = nil)
108
+ @parent.soap_connector.invoke(build_add_message(eml, d, f, tn))
109
+ end
110
+
111
+ def build_add_message(eml, d = nil, f = nil, tn = nil)
109
112
  m = {
110
113
  l: id,
111
114
  d: d,
112
115
  f: f,
113
116
  tn: tn,
114
117
  content: { _content: eml }
115
- }.reject { |_, v| v.nil? }
118
+ }
119
+ m.compact!
116
120
 
117
121
  attrs = { m: m }
118
122
 
119
- soap_request = SoapElement.mail(SoapMailConstants::ADD_MSG_REQUEST).add_attributes(attrs)
120
- @parent.sacc.invoke(soap_request)
123
+ SoapElement.mail(SoapMailConstants::ADD_MSG_REQUEST)
124
+ .add_attributes(attrs)
121
125
  end
122
126
 
123
127
  def add_appointments(ics)
128
+ @parent.soap_connector.invoke(build_add_appointments(ics)).dig(:ImportAppointmentsResponse, :appt)
129
+ end
130
+
131
+ def build_add_appointments(ics)
124
132
  attrs = { l: id, ct: SoapConstants::TEXT_CALENDAR }
125
133
  soap_request = SoapElement.mail(SoapMailConstants::IMPORT_APPOINTMENTS_REQUEST).add_attributes(attrs)
126
134
  node_content = SoapElement.create(SoapConstants::CONTENT).add_content(ics)
127
135
  soap_request.add_node(node_content)
128
- @parent.sacc.invoke(soap_request).dig(:ImportAppointmentsResponse, :appt)
136
+ soap_request
129
137
  end
130
138
 
131
- def download(dest_file_path, fmt = 'tgz')
132
- uploader = Upload.new(@parent, RestAccountConnector.new)
133
- uploader.download_folder(@id, fmt, dest_file_path)
139
+ def add_contacts(csv)
140
+ @parent.soap_connector.invoke(build_add_contacts(csv)).dig(:ImportContactsResponse, :cn)
134
141
  end
135
142
 
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)
143
+ def build_add_contacts(csv)
144
+ attrs = { l: id, ct: SoapConstants::CSV }
145
+ soap_request = SoapElement.mail(SoapMailConstants::IMPORT_CONTACTS_REQUEST).add_attributes(attrs)
146
+ node_content = SoapElement.create(SoapConstants::CONTENT).add_content(csv)
147
+ soap_request.add_node(node_content)
148
+ soap_request
140
149
  end
141
150
 
142
- private
151
+ def download(dest_file_path, fmt: nil)
152
+ uploader = @parent.build_uploader
153
+ uploader.download_folder(dest_file_path, id, fmt:)
154
+ end
143
155
 
144
- def do_update!(hash)
145
- @parent.sacc.invoke(jsns_builder.to_patch(hash))
156
+ def upload(src_file_path, fmt: nil, resolve: nil)
157
+ uploader = @parent.build_uploader
158
+ uploader.send_file(src_file_path, id, fmt:, type: view, resolve:)
146
159
  end
147
160
 
161
+ private
162
+
148
163
  def jsns_builder
149
- @jsns_builder ||= FolderJsnsBuilder.new(self)
164
+ return @jsns_builder if defined? @jsns_builder
165
+
166
+ @jsns_builder = FolderJsnsBuilder.new(self)
150
167
  end
151
168
  end
152
169
  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,58 +6,76 @@ 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.acl = json.delete(:acl)
39
+ item.itemCount = json.delete(:itemCount)
40
+ item.broken = json.delete(:broken)
41
+ item.deletable = json.delete(:deletable)
42
+ item.color = json.delete(:color)
43
+ item.rgb = json.delete(:rgb)
44
+ item.fb = json.delete(:fb)
44
45
 
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])
46
+ grants = json.dig(:acl, :grant)
47
+ if grants.is_a?(Array)
48
+ grants.each do |grant|
49
+ item.grants.create(
50
+ grant.delete(:zid),
51
+ grant.delete(:gt),
52
+ grant.delete(:perm),
53
+ grant.delete(:d)
54
+ )
48
55
  end
49
56
  end
50
57
 
51
- if json[:retentionPolicy].is_a?(Array)
52
- json[:retentionPolicy].first.map do |policy, v|
53
- next if v.first[:policy].nil?
58
+ if (policies = json.fetch(:retentionPolicy, []).first).is_a?(Array)
59
+ policies.each do |policy, v|
60
+ params = v.first[:policy]&.first
61
+ next if params.nil?
54
62
 
55
- type = v.first[:policy].first[:type]
56
- lifetime = v.first[:policy].first[:lifetime]
63
+ type = params.delete(:type)
64
+ lifetime = params.delete(:lifetime)
57
65
  item.retention_policies.create(policy, lifetime, type)
58
66
  end
59
67
  end
60
68
 
69
+ # if json[:retentionPolicy].is_a?(Array)
70
+ # json[:retentionPolicy].first.each do |policy, v|
71
+ # next if v.first[:policy].nil?
72
+ #
73
+ # type = v.first[:policy].first[:type]
74
+ # lifetime = v.first[:policy].first[:lifetime]
75
+ # item.retention_policies.create(policy, lifetime, type)
76
+ # end
77
+ # end
78
+
61
79
  item.extend(DocumentFolder) if item.view == Zm::Client::FolderView::DOCUMENT
62
80
 
63
81
  item
@@ -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