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
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: fc00d91e324f3525589fe4aff9db5d55036d3d52881cc4e03a4019d4bd9a3f7c
4
- data.tar.gz: 4429603c4c08dfa045d06fab04e3f1f73d90355b35ced2ebd5228888e26ef5a6
3
+ metadata.gz: 48d8c7101a499388568d4973d639b166246d2872013cd4fba97df7d7c8b7e8e1
4
+ data.tar.gz: 14e6f9537807d2495dcd911eaca7aaacba0726891b02b113e23362f882130c54
5
5
  SHA512:
6
- metadata.gz: ac9161207764343feaaa8f90d64a4ea9d179eaedecfcfdbcdebf2b7e906a8a1f3122d269321dc4b96ee441087a33957fa452f01a2c0cb3a089da887e565e7ba0
7
- data.tar.gz: 00e61ace101d6fd24ec2c57ff9a2cf5e79bc67d612f711199517dade6c9aae779c25ca628252e1cb5e2cb4bd2b5019f1b7384914292ab3dd2fbb0b124d8e2738
6
+ metadata.gz: 1ce2fa7e3ce6c17bd11fef30d57d0402d7c2fcd3d6075cc4f4d94439d2f1cf5ffd4cc428bd391ceda9d55e2602adcc77242fe0225de109868de1eed6bb19360e
7
+ data.tar.gz: 68867b6a6064c36d89b4dc39f456df50edb7445555da17078a5c6d02727cc64bf551977c03871bad87ec1b880654a8022965d6ca58bec26cb9c7f869d9875f48
data/.rubocop.yml ADDED
@@ -0,0 +1,6 @@
1
+ AllCops:
2
+ NewCops: enable
3
+ TargetRubyVersion: 3.2
4
+
5
+ Layout/LineLength:
6
+ Max: 120
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 3.2.9
data/CHANGELOG.md CHANGED
@@ -1,13 +1,17 @@
1
1
  # Changelog
2
2
 
3
- ## Unreleased [3.0.0]
3
+ ## Released [3.0.0]
4
4
 
5
- ### [3.0.0] 2025-04-14
5
+ ### [3.0.0] 2025-12(27)
6
6
 
7
7
  - [Changed] Move token metadata decoder in token class
8
8
  - [Changed] Move logger in ClusterConfig class
9
- - [Added] Add color in logger
10
- - [Added] Add NoOpRequest for Mailbox object as alive? method
9
+ - [Added] Add color in logger
10
+ - [Added] Add NoOpRequest for Mailbox object as alive? method
11
11
  - [Changed] Remove @all memorization
12
- - [Added] Add BatchRequest on Cluster and Account class
13
- - [Changed] Authorize array and undetermined parameters for add! and remove! methods
12
+ - [Added] Add BatchRequest on Cluster and Account class
13
+ - [Changed] Authorize array and undetermined parameters for add! and remove! methods
14
+ - [Changed] Memory optimization in object initializers
15
+ - [Changed] Replace FolderDefault as Data object
16
+ - [Changed] Modify config admin and public url format
17
+ - [Added] Can access mailbox objects without mailbox login
data/Gemfile CHANGED
@@ -1,12 +1,7 @@
1
1
  source 'https://rubygems.org'
2
2
  git_source(:github) { |repo| "https://github.com/#{repo}.git" }
3
3
 
4
- ruby ">= 3.1"
5
-
6
- gem 'addressable', '2.8.7'
7
- gem 'faraday', '~>2.12'
8
- gem 'faraday-multipart', '1.0.4'
9
- gem 'version_sorter', '2.3.0'
4
+ gemspec
10
5
 
11
6
  group :development do
12
7
  gem "rubocop"
data/README.md CHANGED
@@ -8,7 +8,7 @@ Author: Maxime Désécot <maxime.desecot@gmail.com>
8
8
 
9
9
  OS: Linux distribution LTS
10
10
 
11
- Language: Ruby2.7+
11
+ Language: Ruby3.2+
12
12
 
13
13
  ```bash
14
14
  gem install zm-ruby-client
@@ -19,44 +19,39 @@ gem install zm-ruby-client
19
19
  ### Connection:
20
20
 
21
21
  ```ruby
22
- config = Zm::Client::ClusterConfig.new('config.json')
23
- admin = Zm::Client::Cluster.new(config)
24
- admin.login
22
+ cluster = Zm::Client::Cluster.new(Zm::Client::ClusterConfig.new('config.json'))
23
+ cluster.login
25
24
  ````
26
25
  or
27
26
  ```ruby
28
27
  config = Zm::Client::ClusterConfig.new do |cc|
29
- cc.zimbra_admin_host = 'mail.domain.tld'
30
- cc.zimbra_admin_scheme = 'https'
31
- cc.zimbra_admin_port = 7071
28
+ cc.zimbra_admin_url = 'https://mail.domain.tld:7071'
32
29
  cc.zimbra_admin_login = 'admin@domain.tld'
33
30
  cc.zimbra_admin_password = 'secret'
34
31
  end
35
- admin = Zm::Client::Cluster.new(config)
36
- admin.login
32
+ cluster = Zm::Client::Cluster.new(config)
33
+ cluster.login
37
34
  ````
38
35
 
39
36
  ### List all accounts
40
37
 
41
38
  ```ruby
42
39
  filter = '(&(mail=*@domain.tld)(zimbraLastLogonTimestamp<=20190225000000Z))'
43
- accounts = admin.accounts.where(filter).all
40
+ accounts = cluster.accounts.where(filter).all
44
41
  ```
45
42
 
46
43
  ### Find an account
47
44
 
48
45
  ```ruby
49
- account = admin.accounts.find_by name: 'maxime@domain.tld'
46
+ account = cluster.accounts.find_by name: 'maxime@domain.tld'
50
47
  ```
51
48
 
52
49
  ### Create an account
53
50
 
54
51
  ```ruby
55
- account = Zm::Client::Account.new(admin) do |acc|
52
+ account = Zm::Client::Account.new(cluster) do |acc|
56
53
  acc.name = 'maxime@domain.tld'
57
- acc.givenName = 'Maxime'
58
- acc.sn = 'DÉSÉCOT'
59
54
  end
60
-
55
+ account.zimbraMailQuota = 0
61
56
  account.save
62
57
  ```
data/VERSION CHANGED
@@ -1 +1 @@
1
- 2.2.7
1
+ 3.0.0
@@ -6,64 +6,77 @@ module Zm
6
6
  module Client
7
7
  # objectClass: zimbraAccount
8
8
  class Account < Base::MailboxObject
9
+ include RequestMethodsAdmin
10
+
9
11
  # #################################################################
10
12
  # Associations
11
13
  # #################################################################
12
14
 
13
15
  def aliases
14
- @aliases ||= AccountAliasesCollection.new(self)
16
+ return @aliases if defined? @aliases
17
+
18
+ @aliases = AccountAliasesCollection.new(self)
15
19
  end
16
20
 
17
21
  def cos
18
- @cos ||= @parent.coses.find_by(id: zimbraCOSId)
22
+ return @cos if defined? @cos
23
+
24
+ @cos = @parent.coses.find_by(id: zimbraCOSId)
19
25
  end
20
26
 
21
27
  # #################################################################
22
28
  # SOAP Actions
23
29
  # #################################################################
24
30
 
25
- def delete!
26
- sac.invoke(jsns_builder.to_delete)
27
- @id = nil
28
- end
29
-
30
- def modify!
31
- sac.invoke(jsns_builder.to_update)
32
- true
33
- end
34
-
35
31
  def create!
36
- resp = sac.invoke(jsns_builder.to_create)
32
+ resp = sac.invoke(build_create)
37
33
  @id = resp[:CreateAccountResponse][:account].first[:id]
38
34
  end
39
35
 
40
36
  def created_at
41
- @created_at ||= Time.parse(zimbraCreateTimestamp) unless zimbraCreateTimestamp.nil?
37
+ return @created_at if defined? @created_at
38
+
39
+ @created_at = Time.parse(zimbraCreateTimestamp) unless zimbraCreateTimestamp.nil?
42
40
  end
43
41
 
44
42
  def flush_cache!
43
+ sac.invoke(build_flush_cache)
44
+ true
45
+ end
46
+
47
+ def build_flush_cache
45
48
  soap_request = SoapElement.admin(SoapAdminConstants::FLUSH_CACHE_REQUEST)
46
- node_cache = SoapElement.create('cache').add_attributes({ type: SoapConstants::ACCOUNT, allServers: 1 })
49
+ node_cache = SoapElement.create('cache')
50
+ .add_attributes({ type: SoapConstants::ACCOUNT, allServers: SoapUtils::ON })
47
51
  soap_request.add_node(node_cache)
48
- node_entry = SoapElement.create('entry').add_attribute(SoapConstants::BY, SoapConstants::ID).add_content(@id)
52
+ node_entry = SoapElement.create('entry')
53
+ .add_attribute(SoapConstants::BY, SoapConstants::ID)
54
+ .add_content(@id)
49
55
  node_cache.add_node(node_entry)
50
- sac.invoke(soap_request)
51
- true
56
+ soap_request
52
57
  end
53
58
 
54
59
  def attrs_write
55
60
  @parent.zimbra_attributes.all_account_attrs_writable_names
56
61
  end
57
62
 
63
+ def jsns_builder
64
+ return @jsns_builder if defined? @jsns_builder
65
+
66
+ @jsns_builder = AccountJsnsBuilder.new(self)
67
+ end
68
+
69
+ def batch
70
+ return @batch if defined? @batch
71
+
72
+ @batch = BatchRequest.new(soap_account_connector)
73
+ end
74
+
58
75
  private
59
76
 
60
77
  def do_update!(hash)
61
78
  sac.invoke(jsns_builder.to_patch(hash))
62
79
  end
63
-
64
- def jsns_builder
65
- @jsns_builder ||= AccountJsnsBuilder.new(self)
66
- end
67
80
  end
68
81
  end
69
82
  end
@@ -16,25 +16,33 @@ module Zm
16
16
  def add!(email)
17
17
  return false if all.include?(Utils.format_email(email))
18
18
 
19
- soap_request = SoapElement.admin(SoapAdminConstants::ADD_ACCOUNT_ALIAS_REQUEST)
20
- soap_request.add_attributes({ id: @parent.id, alias: email })
21
- @parent.sac.invoke(soap_request)
19
+ @parent.sac.invoke(build_add(email))
22
20
 
23
21
  all.push(email)
24
22
  true
25
23
  end
26
24
 
25
+ def build_add(email)
26
+ soap_request = SoapElement.admin(SoapAdminConstants::ADD_ACCOUNT_ALIAS_REQUEST)
27
+ soap_request.add_attributes({ id: @parent.id, alias: email })
28
+ soap_request
29
+ end
30
+
27
31
  def remove!(email)
28
32
  return false unless all.include?(Utils.format_email(email))
29
33
 
30
- soap_request = SoapElement.admin(SoapAdminConstants::REMOVE_ACCOUNT_ALIAS_REQUEST)
31
- soap_request.add_attributes({ id: @parent.id, alias: email })
32
- @parent.sac.invoke(soap_request)
34
+ @parent.sac.invoke(build_remove(email))
33
35
 
34
36
  all.delete(email)
35
37
  true
36
38
  end
37
39
 
40
+ def build_remove(email)
41
+ soap_request = SoapElement.admin(SoapAdminConstants::REMOVE_ACCOUNT_ALIAS_REQUEST)
42
+ soap_request.add_attributes({ id: @parent.id, alias: email })
43
+ soap_request
44
+ end
45
+
38
46
  private
39
47
 
40
48
  def build_aliases
@@ -8,15 +8,21 @@ module Zm
8
8
  @parent = parent
9
9
  end
10
10
 
11
- private
12
-
13
11
  def make_query
12
+ sac.invoke(build_query)
13
+ end
14
+
15
+ def build_query
14
16
  soap_request = SoapElement.admin(SoapAdminConstants::GET_ACCOUNT_MEMBERSHIP_REQUEST)
15
- node_account = SoapElement.create(SoapConstants::ACCOUNT).add_attribute(SoapConstants::BY, SoapConstants::ID).add_content(@parent.id)
17
+ node_account = SoapElement.create(SoapConstants::ACCOUNT)
18
+ .add_attribute(SoapConstants::BY, SoapConstants::ID)
19
+ .add_content(@parent.id)
16
20
  soap_request.add_node(node_account)
17
- sac.invoke(soap_request)
21
+ soap_request
18
22
  end
19
23
 
24
+ private
25
+
20
26
  def build_response
21
27
  DistributionListsBuilder.new(@parent, make_query).make
22
28
  end
@@ -8,19 +8,22 @@ module Zm
8
8
  @parent = parent
9
9
  end
10
10
 
11
- private
12
-
13
11
  def make_query
12
+ @parent.sac.invoke(build_query)
13
+ end
14
+
15
+ def build_query
14
16
  jsns = {
15
17
  query: "(zimbraACE=#{@parent.id} usr ownDistList)",
16
18
  types: SearchType::DL
17
19
  }
18
20
 
19
- soap_request = SoapElement.admin(SoapAdminConstants::SEARCH_DIRECTORY_REQUEST)
20
- soap_request.add_attributes(jsns)
21
- @parent.sac.invoke(soap_request)
21
+ SoapElement.admin(SoapAdminConstants::SEARCH_DIRECTORY_REQUEST)
22
+ .add_attributes(jsns)
22
23
  end
23
24
 
25
+ private
26
+
24
27
  def build_response
25
28
  DistributionListsBuilder.new(@parent, make_query).make
26
29
  end
@@ -12,43 +12,49 @@ module Zm
12
12
  req = {
13
13
  name: @item.name,
14
14
  password: @item.password
15
- }.reject { |_, v| v.nil? }
15
+ }
16
+ req.compact!
16
17
 
17
- soap_request = SoapElement.admin(SoapAdminConstants::CREATE_ACCOUNT_REQUEST).add_attributes(req)
18
+ soap_request = SoapElement.admin(SoapAdminConstants::CREATE_ACCOUNT_REQUEST)
19
+ .add_attributes(req)
18
20
 
21
+ add_soap_request_nodes(soap_request)
22
+
23
+ soap_request
24
+ end
25
+
26
+ def add_soap_request_nodes(soap_request)
19
27
  attrs_only_set_h.each do |key, values|
20
28
  values.each do |value|
21
- node_attr = SoapElement.create(SoapConstants::A).add_attribute(SoapConstants::N, key).add_content(value)
22
- soap_request.add_node(node_attr)
29
+ add_soap_request_node(soap_request, key, value)
23
30
  end
24
31
  end
32
+ end
25
33
 
26
- soap_request
34
+ def add_soap_request_node(soap_request, key, value)
35
+ node_attr = SoapElement.create(SoapConstants::A)
36
+ .add_attribute(SoapConstants::N, key)
37
+ .add_content(value)
38
+ soap_request.add_node(node_attr)
27
39
  end
28
40
 
29
41
  def to_update
30
- soap_request = SoapElement.admin(SoapAdminConstants::MODIFY_ACCOUNT_REQUEST).add_attribute(SoapConstants::ID,
31
- @item.id)
42
+ soap_request = SoapElement.admin(SoapAdminConstants::MODIFY_ACCOUNT_REQUEST)
43
+ .add_attribute(SoapConstants::ID, @item.id)
32
44
 
33
- attrs_only_set_h.each do |key, values|
34
- values.each do |value|
35
- node_attr = SoapElement.create(SoapConstants::A).add_attribute(SoapConstants::N, key).add_content(value)
36
- soap_request.add_node(node_attr)
37
- end
38
- end
45
+ add_soap_request_nodes(soap_request)
39
46
 
40
47
  soap_request
41
48
  end
42
49
 
43
50
  def to_patch(hash)
44
- soap_request = SoapElement.admin(SoapAdminConstants::MODIFY_ACCOUNT_REQUEST).add_attribute(SoapConstants::ID,
45
- @item.id)
51
+ soap_request = SoapElement.admin(SoapAdminConstants::MODIFY_ACCOUNT_REQUEST)
52
+ .add_attribute(SoapConstants::ID, @item.id)
46
53
 
47
54
  hash.each do |key, values|
48
55
  values = [values] unless values.is_a?(Array)
49
56
  values.each do |value|
50
- node_attr = SoapElement.create(SoapConstants::A).add_attribute(SoapConstants::N, key).add_content(value)
51
- soap_request.add_node(node_attr)
57
+ add_soap_request_node(soap_request, key, value)
52
58
  end
53
59
  end
54
60
 
@@ -56,7 +62,13 @@ module Zm
56
62
  end
57
63
 
58
64
  def to_delete
59
- SoapElement.admin(SoapAdminConstants::DELETE_ACCOUNT_REQUEST).add_attribute('id', @item.id)
65
+ SoapElement.admin(SoapAdminConstants::DELETE_ACCOUNT_REQUEST)
66
+ .add_attribute(SoapConstants::ID, @item.id)
67
+ end
68
+
69
+ def to_rename(new_name)
70
+ SoapElement.admin(SoapAdminConstants::RENAME_ACCOUNT_REQUEST)
71
+ .add_attributes({ id: @item.id, newName: new_name })
60
72
  end
61
73
 
62
74
  def attrs_only_set_h
@@ -70,7 +82,7 @@ module Zm
70
82
  [n, values]
71
83
  end
72
84
 
73
- Hash[arr]
85
+ arr.to_h
74
86
  end
75
87
  end
76
88
  end
@@ -5,23 +5,13 @@ module Zm
5
5
  # class for initialize account
6
6
  class AccountJsnsInitializer < Base::BaseJsnsInitializer
7
7
  class << self
8
- def create(parent, json)
9
- item = Account.new(parent)
10
-
11
- update(item, json)
12
- end
8
+ def klass = Account
13
9
 
14
10
  def update(item, json)
15
- item.id = json[:id]
16
- item.name = json[:name]
17
- item.used = json[:used] unless json[:used].nil?
18
- item.zimbraMailQuota = json[:limit] unless json[:limit].nil?
19
-
20
- formatted_json(json).each do |k, v|
21
- valorise(item, k, v)
22
- end
11
+ item.used = json.delete(:used) unless json[:used].nil?
12
+ item.zimbraMailQuota = json.delete(:limit) unless json[:limit].nil?
23
13
 
24
- item
14
+ super
25
15
  end
26
16
  end
27
17
  end
@@ -5,7 +5,7 @@ module Zm
5
5
  # class factory [accounts]
6
6
  class AccountsBuilder < Base::ObjectsBuilder
7
7
  def initialize(parent, json)
8
- super(parent, json)
8
+ super
9
9
  @json_item_key = :account
10
10
  end
11
11
 
@@ -8,19 +8,25 @@ module Zm
8
8
  @child_class = Account
9
9
  @builder_class = AccountsBuilder
10
10
  @search_type = SearchType::ACCOUNT
11
- super(parent)
11
+ super
12
12
  end
13
13
 
14
14
  def find_by!(hash)
15
+ entry = sac.invoke(build_find_by(hash))[:GetAccountResponse][:account].first
16
+
17
+ reset_query_params
18
+ AccountJsnsInitializer.create(@parent, entry)
19
+ end
20
+
21
+ def build_find_by(hash)
15
22
  soap_request = SoapElement.admin(SoapAdminConstants::GET_ACCOUNT_REQUEST)
16
- node_account = SoapElement.create(SoapConstants::ACCOUNT).add_attribute(SoapConstants::BY, hash.keys.first).add_content(hash.values.first)
23
+ node_account = SoapElement.create(SoapConstants::ACCOUNT)
24
+ .add_attribute(SoapConstants::BY, hash.keys.first)
25
+ .add_content(hash.values.first)
17
26
  soap_request.add_node(node_account)
18
27
  soap_request.add_attribute(SoapConstants::ATTRS, attrs_comma)
19
28
  soap_request.add_attribute(SoapConstants::APPLY_COS, @apply_cos)
20
- entry = sac.invoke(soap_request)[:GetAccountResponse][:account].first
21
-
22
- reset_query_params
23
- AccountJsnsInitializer.create(@parent, entry)
29
+ soap_request
24
30
  end
25
31
 
26
32
  def quotas(domain_name: @domain_name, target_server_id: @target_server_id)
@@ -40,10 +46,11 @@ module Zm
40
46
  sortBy: @sort_by,
41
47
  sortAscending: @sort_ascending,
42
48
  refresh: @refresh
43
- }.delete_if { |_, value| value.nil? }
49
+ }
50
+ jsns.compact!
44
51
 
45
52
  soap_request = SoapElement.admin(SoapAdminConstants::GET_QUOTA_USAGE_REQUEST)
46
- soap_request.add_attributes(jsns)
53
+ .add_attributes(jsns)
47
54
  json = sac.invoke(soap_request)
48
55
 
49
56
  sac.context.target_server(nil) unless target_server_id.nil?
@@ -13,7 +13,7 @@ module Zm
13
13
  attr_accessor :zid, :gt, :right, :d
14
14
 
15
15
  def create!
16
- rep = @parent.sacc.invoke(jsns_builder.to_jsns)
16
+ rep = @parent.soap_connector.invoke(jsns_builder.to_jsns)
17
17
 
18
18
  json = rep[:GrantRightsResponse][:ace].first if rep[:GrantRightsResponse][:ace].is_a?(Array)
19
19
  AceJsnsInitializer.update(self, json) unless json.nil?
@@ -21,14 +21,14 @@ module Zm
21
21
  end
22
22
 
23
23
  def delete!
24
- @parent.sacc.invoke(jsns_builder.to_delete)
24
+ @parent.soap_connector.invoke(jsns_builder.to_delete)
25
25
  true
26
26
  end
27
27
 
28
- private
29
-
30
28
  def jsns_builder
31
- @jsns_builder ||= AceJsnsBuilder.new(self)
29
+ return @jsns_builder if defined? @jsns_builder
30
+
31
+ @jsns_builder = AceJsnsBuilder.new(self)
32
32
  end
33
33
  end
34
34
  end
@@ -13,24 +13,24 @@ module Zm
13
13
  end
14
14
 
15
15
  def to_jsns
16
- soap_request = SoapElement.account(SoapAccountConstants::GRANT_RIGHTS_REQUEST)
17
- soap_request.add_attribute(SoapConstants::ACE, attrs)
18
- soap_request
16
+ SoapElement.account(SoapAccountConstants::GRANT_RIGHTS_REQUEST)
17
+ .add_attribute(SoapConstants::ACE, attrs)
19
18
  end
20
19
 
21
20
  def to_delete
22
- soap_request = SoapElement.account(SoapAccountConstants::REVOKE_RIGHTS_REQUEST)
23
- soap_request.add_attribute(SoapConstants::ACE, attrs)
24
- soap_request
21
+ SoapElement.account(SoapAccountConstants::REVOKE_RIGHTS_REQUEST)
22
+ .add_attribute(SoapConstants::ACE, attrs)
25
23
  end
26
24
 
27
25
  def attrs
28
- {
26
+ h = {
29
27
  zid: @item.zid,
30
28
  gt: @item.gt,
31
29
  right: @item.right,
32
30
  d: @item.d
33
- }.reject { |_, v| v.nil? }
31
+ }
32
+ h.compact!
33
+ h
34
34
  end
35
35
  end
36
36
  end
@@ -6,16 +6,16 @@ module Zm
6
6
  class AceJsnsInitializer
7
7
  class << self
8
8
  def create(parent, json)
9
- item = Ace.new(parent)
10
-
11
- update(item, json)
9
+ Ace.new(parent).tap do |item|
10
+ update(item, json)
11
+ end
12
12
  end
13
13
 
14
14
  def update(item, json)
15
- item.instance_variable_set(:@zid, json[:zid])
16
- item.instance_variable_set(:@gt, json[:gt])
17
- item.instance_variable_set(:@right, json[:right])
18
- item.instance_variable_set(:@d, json[:d])
15
+ item.zid = json.delete(:zid)
16
+ item.gt = json.delete(:gt)
17
+ item.right = json.delete(:right)
18
+ item.d = json.delete(:d)
19
19
 
20
20
  item
21
21
  end
@@ -5,7 +5,7 @@ module Zm
5
5
  # class factory [aces]
6
6
  class AcesBuilder < Base::ObjectsBuilder
7
7
  def initialize(parent, json)
8
- super(parent, json)
8
+ super
9
9
  @json_item_key = :ace
10
10
  end
11
11
 
@@ -43,7 +43,7 @@ module Zm
43
43
  end
44
44
 
45
45
  def initialize(parent)
46
- super(parent)
46
+ super
47
47
  @child_class = Ace
48
48
  @builder_class = AcesBuilder
49
49
  @jsns_builder = AceJsnsBuilder.new(self)
@@ -60,7 +60,7 @@ module Zm
60
60
  private
61
61
 
62
62
  def make_query
63
- @parent.sacc.invoke(@jsns_builder.to_find)
63
+ @parent.soap_connector.invoke(@jsns_builder.to_find)
64
64
  end
65
65
 
66
66
  def reset_query_params