zm-ruby-client 0.18.3 → 2.0.2

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 (250) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -1
  3. data/Gemfile +2 -2
  4. data/README.md +7 -0
  5. data/lib/zm/client/account/account.rb +31 -319
  6. data/lib/zm/client/account/account_aliases_collection.rb +52 -0
  7. data/lib/zm/client/account/account_dls_membership_collection.rb +4 -1
  8. data/lib/zm/client/account/account_dls_owner_collection.rb +8 -1
  9. data/lib/zm/client/account/account_jsns_builder.rb +77 -0
  10. data/lib/zm/client/account/account_jsns_initializer.rb +9 -24
  11. data/lib/zm/client/account/accounts_builder.rb +0 -1
  12. data/lib/zm/client/account/accounts_collection.rb +32 -8
  13. data/lib/zm/client/account.rb +1 -0
  14. data/lib/zm/client/ace/ace.rb +6 -22
  15. data/lib/zm/client/ace/ace_jsns_builder.rb +15 -16
  16. data/lib/zm/client/ace/ace_jsns_initializer.rb +0 -1
  17. data/lib/zm/client/ace/aces_builder.rb +0 -1
  18. data/lib/zm/client/ace/aces_collection.rb +2 -18
  19. data/lib/zm/client/appointment/appointment.rb +38 -30
  20. data/lib/zm/client/appointment/appointment_jsns_builder.rb +22 -34
  21. data/lib/zm/client/appointment/appointment_jsns_initializer.rb +6 -3
  22. data/lib/zm/client/appointment/appointments_builder.rb +6 -18
  23. data/lib/zm/client/appointment/appointments_collection.rb +25 -4
  24. data/lib/zm/client/backup/backup.rb +4 -32
  25. data/lib/zm/client/backup/backup_jsns_initializer.rb +26 -0
  26. data/lib/zm/client/backup/backups_builder.rb +8 -13
  27. data/lib/zm/client/backup/backups_collection.rb +2 -1
  28. data/lib/zm/client/backup.rb +1 -0
  29. data/lib/zm/client/base/account_search_objects_collection.rb +34 -13
  30. data/lib/zm/client/base/admin_objects_collection.rb +82 -17
  31. data/lib/zm/client/base/base_account_jsns_builder.rb +98 -0
  32. data/lib/zm/client/base/base_jsns_builder.rb +47 -0
  33. data/lib/zm/client/base/base_jsns_initializer.rb +43 -12
  34. data/lib/zm/client/base/ldap_filter.rb +20 -5
  35. data/lib/zm/client/base/mailbox_infos_collection.rb +88 -0
  36. data/lib/zm/client/base/mailbox_object.rb +299 -0
  37. data/lib/zm/client/base/mailbox_prefs_collection.rb +75 -0
  38. data/lib/zm/client/base/object.rb +28 -62
  39. data/lib/zm/client/base/objects_builder.rb +4 -10
  40. data/lib/zm/client/base/objects_collection.rb +13 -10
  41. data/lib/zm/client/base/zimbra_attribute.rb +10 -8
  42. data/lib/zm/client/base/zimbra_attributes_collection.rb +154 -10
  43. data/lib/zm/client/base.rb +5 -5
  44. data/lib/zm/client/cluster/cluster.rb +43 -39
  45. data/lib/zm/client/cluster/cluster_config.rb +5 -5
  46. data/lib/zm/client/common/recipients.rb +3 -3
  47. data/lib/zm/client/common/token_metadata.rb +4 -1
  48. data/lib/zm/client/common/utils.rb +57 -0
  49. data/lib/zm/client/common.rb +2 -1
  50. data/lib/zm/client/connector/rest_account.rb +14 -4
  51. data/lib/zm/client/connector/soap_account.rb +38 -441
  52. data/lib/zm/client/connector/soap_admin.rb +16 -552
  53. data/lib/zm/client/connector/soap_base.rb +25 -5
  54. data/lib/zm/client/connector/soap_error.rb +1 -3
  55. data/lib/zm/client/constant.rb +21 -11
  56. data/lib/zm/client/contact/contact.rb +42 -83
  57. data/lib/zm/client/contact/contact_jsns_builder.rb +60 -0
  58. data/lib/zm/client/contact/contact_jsns_initializer.rb +78 -0
  59. data/lib/zm/client/contact/contact_member.rb +29 -28
  60. data/lib/zm/client/contact/contact_members_collection.rb +44 -0
  61. data/lib/zm/client/contact/contacts_builder.rb +8 -1
  62. data/lib/zm/client/contact/contacts_collection.rb +17 -1
  63. data/lib/zm/client/contact/group_contact_jsns_builder.rb +51 -0
  64. data/lib/zm/client/contact/mod_group_contact.rb +4 -67
  65. data/lib/zm/client/contact.rb +5 -1
  66. data/lib/zm/client/cos/cos.rb +35 -40
  67. data/lib/zm/client/cos/cos_accounts_collection.rb +19 -0
  68. data/lib/zm/client/cos/cos_domains_collection.rb +20 -0
  69. data/lib/zm/client/cos/cos_jsns_builder.rb +72 -0
  70. data/lib/zm/client/cos/cos_jsns_initializer.rb +29 -0
  71. data/lib/zm/client/cos/cos_servers_collection.rb +60 -0
  72. data/lib/zm/client/cos/coses_builder.rb +8 -1
  73. data/lib/zm/client/cos/coses_collection.rb +8 -5
  74. data/lib/zm/client/cos.rb +5 -0
  75. data/lib/zm/client/datasource/datasource.rb +69 -0
  76. data/lib/zm/client/datasource/datasource_jsns_builder.rb +32 -0
  77. data/lib/zm/client/datasource/datasource_jsns_initializer.rb +27 -0
  78. data/lib/zm/client/datasource/datasources_builder.rb +29 -0
  79. data/lib/zm/client/datasource/datasources_collection.rb +21 -0
  80. data/lib/zm/client/datasource.rb +7 -0
  81. data/lib/zm/client/distributionlist/distributionlist.rb +52 -118
  82. data/lib/zm/client/distributionlist/distributionlist_aces_collection.rb +31 -0
  83. data/lib/zm/client/distributionlist/distributionlist_aliases_collection.rb +53 -0
  84. data/lib/zm/client/distributionlist/distributionlist_jsns_builder.rb +82 -0
  85. data/lib/zm/client/distributionlist/distributionlist_jsns_initializer.rb +32 -0
  86. data/lib/zm/client/distributionlist/distributionlist_members_collection.rb +47 -0
  87. data/lib/zm/client/distributionlist/distributionlist_owners_collection.rb +52 -0
  88. data/lib/zm/client/distributionlist/distributionlists_builder.rb +8 -1
  89. data/lib/zm/client/distributionlist/distributionlists_collection.rb +8 -9
  90. data/lib/zm/client/distributionlist/dls_membership_collection.rb +4 -1
  91. data/lib/zm/client/distributionlist.rb +2 -0
  92. data/lib/zm/client/document/document.rb +27 -24
  93. data/lib/zm/client/document/document_jsns_builder.rb +18 -0
  94. data/lib/zm/client/document/document_jsns_initializer.rb +44 -0
  95. data/lib/zm/client/document/documents_builder.rb +6 -16
  96. data/lib/zm/client/document/documents_collection.rb +17 -67
  97. data/lib/zm/client/document.rb +2 -0
  98. data/lib/zm/client/domain/domain.rb +45 -68
  99. data/lib/zm/client/domain/domain_accounts_collection.rb +1 -1
  100. data/lib/zm/client/domain/domain_distributionlists_collection.rb +13 -0
  101. data/lib/zm/client/domain/domain_jsns_builder.rb +69 -0
  102. data/lib/zm/client/domain/domain_jsns_initializer.rb +25 -0
  103. data/lib/zm/client/domain/domain_resources_collection.rb +13 -0
  104. data/lib/zm/client/domain/domains_builder.rb +8 -1
  105. data/lib/zm/client/domain/domains_collection.rb +7 -7
  106. data/lib/zm/client/domain.rb +4 -0
  107. data/lib/zm/client/filter_rule.rb +7 -0
  108. data/lib/zm/client/filter_rules/filter_rule.rb +10 -0
  109. data/lib/zm/client/filter_rules/filter_rule_jsns_initializer.rb +24 -0
  110. data/lib/zm/client/filter_rules/filter_rules_builder.rb +21 -0
  111. data/lib/zm/client/filter_rules/filter_rules_collection.rb +21 -0
  112. data/lib/zm/client/filter_rules/outgoing_filter_rules_collection.rb +15 -0
  113. data/lib/zm/client/folder/folder.rb +77 -61
  114. data/lib/zm/client/folder/folder_grant.rb +34 -14
  115. data/lib/zm/client/folder/folder_grant_jsns_builder.rb +15 -4
  116. data/lib/zm/client/folder/folder_grants_collection.rb +36 -2
  117. data/lib/zm/client/folder/folder_jsns_builder.rb +22 -48
  118. data/lib/zm/client/folder/folder_jsns_initializer.rb +34 -17
  119. data/lib/zm/client/folder/folder_retention_policies_collection.rb +2 -3
  120. data/lib/zm/client/folder/folder_retention_policy.rb +0 -1
  121. data/lib/zm/client/folder/folders_builder.rb +7 -10
  122. data/lib/zm/client/folder/folders_collection.rb +5 -2
  123. data/lib/zm/client/folder/folders_jsns_builder.rb +3 -1
  124. data/lib/zm/client/folder/mod_document_folder.rb +10 -6
  125. data/lib/zm/client/folder.rb +1 -1
  126. data/lib/zm/client/identity/identities_builder.rb +8 -1
  127. data/lib/zm/client/identity/identities_collection.rb +2 -1
  128. data/lib/zm/client/identity/identity.rb +34 -42
  129. data/lib/zm/client/identity/identity_jsns_builder.rb +57 -0
  130. data/lib/zm/client/identity/identity_jsns_initializer.rb +29 -0
  131. data/lib/zm/client/identity.rb +3 -1
  132. data/lib/zm/client/license/license.rb +9 -22
  133. data/lib/zm/client/license/license_jsns_initializer.rb +20 -0
  134. data/lib/zm/client/license/licenses_collection.rb +3 -13
  135. data/lib/zm/client/license.rb +2 -1
  136. data/lib/zm/client/message/attachments_collection.rb +55 -0
  137. data/lib/zm/client/message/message.rb +36 -264
  138. data/lib/zm/client/message/message_flags.rb +107 -0
  139. data/lib/zm/client/message/message_jsns_builder.rb +85 -0
  140. data/lib/zm/client/message/message_jsns_initializer.rb +71 -0
  141. data/lib/zm/client/message/message_recipients.rb +59 -0
  142. data/lib/zm/client/message/messages_builder.rb +7 -18
  143. data/lib/zm/client/message/messages_collection.rb +17 -2
  144. data/lib/zm/client/message.rb +5 -0
  145. data/lib/zm/client/mountpoint/mountpoint.rb +43 -21
  146. data/lib/zm/client/mountpoint/mountpoint_jsns_builder.rb +8 -53
  147. data/lib/zm/client/mountpoint/mountpoint_jsns_initializer.rb +22 -13
  148. data/lib/zm/client/mountpoint/mountpoints_builder.rb +4 -5
  149. data/lib/zm/client/mountpoint/mountpoints_collection.rb +1 -2
  150. data/lib/zm/client/mta_queue/mta_queue.rb +13 -28
  151. data/lib/zm/client/mta_queue/mta_queue_jsns_builder.rb +41 -0
  152. data/lib/zm/client/mta_queue/mta_queue_jsns_initializer.rb +23 -0
  153. data/lib/zm/client/mta_queue/mta_queues_builder.rb +4 -8
  154. data/lib/zm/client/mta_queue/mta_queues_collection.rb +8 -27
  155. data/lib/zm/client/mta_queue.rb +2 -0
  156. data/lib/zm/client/mta_queue_item/mta_queue_item.rb +4 -31
  157. data/lib/zm/client/mta_queue_item/mta_queue_item_jsns_initializer.rb +33 -0
  158. data/lib/zm/client/mta_queue_item/mta_queue_items_builder.rb +4 -9
  159. data/lib/zm/client/mta_queue_item/mta_queue_items_collection.rb +7 -42
  160. data/lib/zm/client/mta_queue_item.rb +2 -1
  161. data/lib/zm/client/resource/resource.rb +24 -91
  162. data/lib/zm/client/resource/resource_jsns_builder.rb +79 -0
  163. data/lib/zm/client/resource/resource_jsns_initializer.rb +29 -0
  164. data/lib/zm/client/resource/resources_builder.rb +8 -1
  165. data/lib/zm/client/resource/resources_collection.rb +9 -7
  166. data/lib/zm/client/resource.rb +2 -0
  167. data/lib/zm/client/search_folder/search_folder.rb +38 -16
  168. data/lib/zm/client/search_folder/search_folder_jsns_builder.rb +38 -19
  169. data/lib/zm/client/search_folder/search_folder_jsns_initializer.rb +17 -13
  170. data/lib/zm/client/search_folder/search_folders_builder.rb +0 -1
  171. data/lib/zm/client/search_folder/search_folders_collection.rb +2 -1
  172. data/lib/zm/client/server/server.rb +16 -488
  173. data/lib/zm/client/server/server_jsns_initializer.rb +16 -0
  174. data/lib/zm/client/server/servers_builder.rb +8 -1
  175. data/lib/zm/client/server/servers_collection.rb +13 -5
  176. data/lib/zm/client/server.rb +1 -0
  177. data/lib/zm/client/share/share.rb +5 -43
  178. data/lib/zm/client/share/share_jsns_initializer.rb +32 -0
  179. data/lib/zm/client/share/share_mountpoints_collection.rb +38 -0
  180. data/lib/zm/client/share/shares_builder.rb +8 -1
  181. data/lib/zm/client/share/shares_collection.rb +11 -16
  182. data/lib/zm/client/share.rb +2 -0
  183. data/lib/zm/client/signature/signature.rb +25 -29
  184. data/lib/zm/client/signature/signature_jsns_builder.rb +31 -13
  185. data/lib/zm/client/signature/signature_jsns_initializer.rb +16 -12
  186. data/lib/zm/client/signature/signatures_builder.rb +1 -2
  187. data/lib/zm/client/signature/signatures_collection.rb +2 -1
  188. data/lib/zm/client/signature.rb +1 -1
  189. data/lib/zm/client/soap_request/account_soap_constants.rb +76 -0
  190. data/lib/zm/client/soap_request/admin_soap_constants.rb +214 -0
  191. data/lib/zm/client/soap_request/mail_soap_constants.rb +162 -0
  192. data/lib/zm/client/soap_request/soap_constants.rb +55 -0
  193. data/lib/zm/client/soap_request/soap_context.rb +38 -0
  194. data/lib/zm/client/soap_request/soap_element.rb +90 -0
  195. data/lib/zm/client/soap_request.rb +8 -0
  196. data/lib/zm/client/tag/account_object_tags_collection.rb +65 -0
  197. data/lib/zm/client/tag/tag.rb +34 -22
  198. data/lib/zm/client/tag/tag_jsns_builder.rb +14 -35
  199. data/lib/zm/client/tag/tag_jsns_initializer.rb +4 -6
  200. data/lib/zm/client/tag/tags_builder.rb +0 -1
  201. data/lib/zm/client/tag/tags_collection.rb +2 -1
  202. data/lib/zm/client/tag.rb +1 -0
  203. data/lib/zm/client/task/task.rb +18 -49
  204. data/lib/zm/client/task/task_jsns_initializer.rb +45 -0
  205. data/lib/zm/client/task/tasks_builder.rb +6 -16
  206. data/lib/zm/client/task/tasks_collection.rb +29 -0
  207. data/lib/zm/client/task.rb +1 -0
  208. data/lib/zm/client/upload/upload.rb +26 -30
  209. data/lib/zm/client/version.rb +3 -3
  210. data/lib/zm/client.rb +4 -1
  211. data/lib/zm/modules/base.rb +10 -0
  212. data/lib/zm/modules/belongs_to_folder.rb +37 -0
  213. data/lib/zm/modules/belongs_to_tag.rb +11 -0
  214. data/lib/zm/modules/common/zimbra-attrs.json +33 -1
  215. data/lib/zm/modules/has_soap_admin_connector.rb +12 -0
  216. data/lib/zm/modules/inspector.rb +24 -0
  217. data/lib/zm/modules/missing_method_static_collection.rb +13 -0
  218. data/lib/zm/modules/zm_logger.rb +3 -1
  219. data/lib/zm/modules/zm_model.rb +4 -2
  220. data/lib/zm/utils/thread_pool.rb +4 -2
  221. data/lib/zm-ruby-client.rb +2 -0
  222. data/zm-ruby-client.gemspec +12 -9
  223. metadata +93 -34
  224. data/lib/zm/client/base/account_object.rb +0 -51
  225. data/lib/zm/client/base/admin_object.rb +0 -51
  226. data/lib/zm/client/base/folder_object.rb +0 -41
  227. data/lib/zm/client/config.rb +0 -12
  228. data/lib/zm/client/data_source.rb +0 -5
  229. data/lib/zm/modules/common/account_common.rb +0 -71
  230. data/lib/zm/modules/common/cos_common.rb +0 -463
  231. data/lib/zm/modules/common/dl_common.rb +0 -38
  232. data/lib/zm/modules/common/identity_common.rb +0 -19
  233. data/lib/zm/modules/common/resource_common.rb +0 -59
  234. data/lib/zm/modules/common/signature_common.rb +0 -16
  235. data/lib/zm/modules/common/zimbra-attrs.json.bak +0 -1
  236. data/test/accounts.rb +0 -89
  237. data/test/ace.rb +0 -50
  238. data/test/cluster.rb +0 -41
  239. data/test/cluster_config.rb +0 -30
  240. data/test/cluster_zimbra_attributes.rb +0 -38
  241. data/test/coses.rb +0 -26
  242. data/test/domains.rb +0 -70
  243. data/test/folder.rb +0 -125
  244. data/test/folder_grant.rb +0 -51
  245. data/test/mountpoint.rb +0 -49
  246. data/test/retention_policies.rb +0 -40
  247. data/test/search_folder.rb +0 -67
  248. data/test/signature.rb +0 -53
  249. data/test/tag.rb +0 -65
  250. data/test/zimbra_attributes.rb +0 -35
@@ -4,7 +4,7 @@ module Zm
4
4
  module Client
5
5
  # Collection MtaQueues
6
6
  class MtaQueueItemsCollection < Base::ObjectsCollection
7
- METHODS_MISSING_LIST = %i[select each map length].to_set.freeze
7
+ attr_reader :offset, :limit, :fields
8
8
 
9
9
  def initialize(parent)
10
10
  @parent = parent
@@ -19,14 +19,6 @@ module Zm
19
19
  mta_queue.parent
20
20
  end
21
21
 
22
- def all
23
- @all ||= all!
24
- end
25
-
26
- def all!
27
- build_response
28
- end
29
-
30
22
  def where(fields)
31
23
  @fields = fields
32
24
  self
@@ -46,42 +38,11 @@ module Zm
46
38
  all.map(&:id)
47
39
  end
48
40
 
49
- def do_action(action_name)
50
- sac.mail_queue_action(server.name, mta_queue.name, action_name, ids)
51
- end
52
-
53
- def hold!
54
- do_action(Zm::Client::MtaQueueAction::HOLD)
55
- end
56
-
57
- def release!
58
- do_action(Zm::Client::MtaQueueAction::RELEASE)
59
- end
60
-
61
- def delete!
62
- do_action(Zm::Client::MtaQueueAction::DELETE)
63
- end
64
-
65
- def requeue!
66
- do_action(Zm::Client::MtaQueueAction::REQUEUE)
67
- end
68
-
69
- def method_missing(method, *args, &block)
70
- if METHODS_MISSING_LIST.include?(method)
71
- build_response.send(method, *args, &block)
72
- else
73
- super
74
- end
75
- end
76
-
77
- def respond_to_missing?(method, *)
78
- METHODS_MISSING_LIST.include?(method) || super
79
- end
80
-
81
41
  private
82
42
 
83
43
  def make_query
84
- json = sac.get_mail_queue(@parent.parent.name, @parent.name, @offset, @limit, @fields)
44
+ json = sac.invoke(jsns_builder.to_list)
45
+
85
46
  reset_query_params
86
47
  json
87
48
  end
@@ -94,6 +55,10 @@ module Zm
94
55
  super
95
56
  @fields = {}
96
57
  end
58
+
59
+ def jsns_builder
60
+ @jsns_builder ||= MtaQueueJsnsBuilder.new(self)
61
+ end
97
62
  end
98
63
  end
99
64
  end
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'zm/client/mta_queue_item/mta_queue_item'
4
+ require 'zm/client/mta_queue_item/mta_queue_item_jsns_initializer'
4
5
  require 'zm/client/mta_queue_item/mta_queue_items_builder'
5
- require 'zm/client/mta_queue_item/mta_queue_items_collection'
6
+ require 'zm/client/mta_queue_item/mta_queue_items_collection'
@@ -1,115 +1,48 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'zm/modules/common/resource_common'
4
-
5
3
  module Zm
6
4
  module Client
7
5
  # objectClass: zimbraCalendarResource
8
- class Resource < Base::AdminObject
9
- attr_accessor :home_url, :zimbraCalResAutoDeclineRecurring
10
-
11
- def initialize(parent)
12
- extend(ResourceCommon)
13
- super(parent)
14
- @grantee_type = 'usr'.freeze
15
- end
16
-
17
- def all_instance_variable_keys
18
- ResourceCommon::ALL_ATTRS
19
- end
20
-
21
- def rest_account_connector
22
- @rest_account_connector ||= RestAccountConnector.new
23
- end
24
-
25
- alias rac rest_account_connector
26
-
27
- def logged?
28
- !@token.nil?
29
- end
30
-
31
- def login
32
- if @parent.logged?
33
- admin_login
34
- else
35
- account_login
36
- end
37
- end
38
-
39
- def account_login_preauth
40
- domain_key
41
- raise ZmError, 'domain key is required to login !' if @domainkey.nil?
42
-
43
- @token = sacc.auth_preauth(@name, @domainkey)
44
- end
45
-
46
- def account_login_password
47
- raise ZmError, 'password is required to login !' if password.nil?
6
+ class Resource < Base::MailboxObject
7
+ LOCATION = 'Location'
8
+ EQUIPMENT = 'Equipment'
9
+ TYPES = [LOCATION, EQUIPMENT].freeze
48
10
 
49
- @token = sacc.auth_password(@name, @password)
50
- end
51
-
52
- def admin_login
53
- @token = sac.delegate_auth(@name)
54
- end
55
-
56
- def domain_name
57
- @name.split('@').last
58
- end
59
-
60
- def domain_key
61
- @domainkey ||= @parent.domain_key(domain_name)
62
- end
63
-
64
- def infos
65
- @infos ||= read_infos
11
+ def delete!
12
+ sac.invoke(jsns_builder.to_delete)
13
+ @id = nil
66
14
  end
67
15
 
68
- def read_infos
69
- @infos = sacc.get_info(@token)[:Body][:GetInfoResponse]
70
- @id = @infos[:id]
71
- @used = @infos[:used]
72
- @public_url = @infos[:publicURL]
73
- @zimbraCOSId = @infos[:cos][:id]
74
- @home_url = @infos[:rest]
16
+ def modify!
17
+ sac.invoke(jsns_builder.to_update)
18
+ true
75
19
  end
76
20
 
77
- def folders
78
- @folders ||= FoldersCollection.new(self)
21
+ def create!
22
+ resp = sac.invoke(jsns_builder.to_create)
23
+ @id = resp[:CreateCalendarResourceResponse][:calresource].first[:id]
79
24
  end
80
25
 
81
- def delete!
82
- sac.delete_resource(@id)
26
+ def attrs_write
27
+ @parent.zimbra_attributes.all_resource_attrs_writable_names
83
28
  end
84
29
 
85
- def update!(hash)
86
- sac.modify_resource(@id, hash)
87
- hash.each { |k, v| send "#{k}=", v }
30
+ def location?
31
+ zimbraCalResType == LOCATION
88
32
  end
89
33
 
90
- def modify!
91
- attrs_to_modify = instance_variables_array(attrs_write)
92
- return if attrs_to_modify.empty?
93
-
94
- sac.modify_resource(@id, attrs_to_modify)
34
+ def equipment?
35
+ zimbraCalResType == EQUIPMENT
95
36
  end
96
37
 
97
- def create!
98
- rep = sac.create_resource(
99
- @name,
100
- @password,
101
- instance_variables_array(attrs_write)
102
- )
103
- @id = rep[:Body][:CreateCalendarResourceResponse][:calresource].first[:id]
104
- end
38
+ private
105
39
 
106
- def rename!(email)
107
- sac.rename_resource(@id, email)
108
- @name = email
40
+ def do_update!(hash)
41
+ sac.invoke(jsns_builder.to_patch(hash))
109
42
  end
110
43
 
111
- def uploader
112
- @uploader ||= Upload.new(self)
44
+ def jsns_builder
45
+ @jsns_builder ||= ResourceJsnsBuilder.new(self)
113
46
  end
114
47
  end
115
48
  end
@@ -0,0 +1,79 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Zm
4
+ module Client
5
+ # class for resource jsns builder
6
+ class ResourceJsnsBuilder
7
+ def initialize(item)
8
+ @item = item
9
+ end
10
+
11
+ def to_create
12
+ req = {
13
+ name: @item.name,
14
+ password: @item.password
15
+ }.reject { |_, v| v.nil? }
16
+
17
+ soap_request = SoapElement.admin(SoapAdminConstants::CREATE_CALENDAR_RESOURCE_REQUEST).add_attributes(req)
18
+
19
+ attrs_only_set_h.each do |key, values|
20
+ 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)
23
+ end
24
+ end
25
+
26
+ soap_request
27
+ end
28
+
29
+ def to_update
30
+ soap_request = SoapElement.admin(SoapAdminConstants::MODIFY_CALENDAR_RESOURCE_REQUEST).add_attribute(
31
+ SoapConstants::ID, @item.id
32
+ )
33
+
34
+ attrs_only_set_h.each do |key, values|
35
+ values.each do |value|
36
+ node_attr = SoapElement.create(SoapConstants::A).add_attribute(SoapConstants::N, key).add_content(value)
37
+ soap_request.add_node(node_attr)
38
+ end
39
+ end
40
+
41
+ soap_request
42
+ end
43
+
44
+ def to_patch(hash)
45
+ soap_request = SoapElement.admin(SoapAdminConstants::MODIFY_CALENDAR_RESOURCE_REQUEST).add_attribute(
46
+ SoapConstants::ID, @item.id
47
+ )
48
+
49
+ hash.each do |key, values|
50
+ values = [values] unless values.is_a?(Array)
51
+ values.each do |value|
52
+ node_attr = SoapElement.create(SoapConstants::A).add_attribute(SoapConstants::N, key).add_content(value)
53
+ soap_request.add_node(node_attr)
54
+ end
55
+ end
56
+
57
+ soap_request
58
+ end
59
+
60
+ def to_delete
61
+ SoapElement.admin(SoapAdminConstants::DELETE_CALENDAR_RESOURCE_REQUEST).add_attribute('id', @item.id)
62
+ end
63
+
64
+ def attrs_only_set_h
65
+ selected_attrs = @item.attrs_write.map { |a| Utils.arrow_name_sym(a) }
66
+ attrs_only_set = @item.instance_variables & selected_attrs
67
+
68
+ arr = attrs_only_set.map do |name|
69
+ n = name.to_s[1..]
70
+ values = @item.instance_variable_get(name)
71
+ values = [values] unless values.is_a?(Array)
72
+ [n, values]
73
+ end
74
+
75
+ Hash[arr]
76
+ end
77
+ end
78
+ end
79
+ end
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Zm
4
+ module Client
5
+ # class for initialize resource
6
+ class ResourceJsnsInitializer < Base::BaseJsnsInitializer
7
+ class << self
8
+ def create(parent, json)
9
+ item = Resource.new(parent)
10
+
11
+ update(item, json)
12
+ end
13
+
14
+ 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
23
+
24
+ item
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -6,9 +6,16 @@ module Zm
6
6
  class ResourcesBuilder < Base::ObjectsBuilder
7
7
  def initialize(parent, json)
8
8
  super(parent, json)
9
- @child_class = Resource
10
9
  @json_item_key = :calresource
11
10
  end
11
+
12
+ def make
13
+ return [] if json_items.nil?
14
+
15
+ json_items.map do |entry|
16
+ ResourceJsnsInitializer.create(@parent, entry)
17
+ end
18
+ end
12
19
  end
13
20
  end
14
21
  end
@@ -11,12 +11,17 @@ module Zm
11
11
  super(parent)
12
12
  end
13
13
 
14
- def find_by(hash)
15
- rep = sac.get_resource(hash.values.first, hash.keys.first, attrs_comma)
16
- entry = rep[:Body][:GetCalendarResourceResponse][:calresource].first
14
+ def find_by!(hash)
15
+ soap_request = SoapElement.admin(SoapAdminConstants::GET_CALENDAR_RESOURCE_REQUEST)
16
+ node_res = SoapElement.create(SoapConstants::CAL_RESOURCE).add_attribute(SoapConstants::BY,
17
+ hash.keys.first).add_content(hash.values.first)
18
+ soap_request.add_node(node_res)
19
+ soap_request.add_attribute(SoapConstants::ATTRS, attrs_comma)
20
+ soap_request.add_attribute(SoapConstants::APPLY_COS, @apply_cos)
21
+ entry = sac.invoke(soap_request)[:GetCalendarResourceResponse][:calresource].first
17
22
 
18
23
  reset_query_params
19
- build_from_entry(entry)
24
+ ResourceJsnsInitializer.create(@parent, entry)
20
25
  end
21
26
 
22
27
  private
@@ -24,9 +29,6 @@ module Zm
24
29
  def reset_query_params
25
30
  super
26
31
  @attrs = SearchType::Attributes::RESOURCE.dup
27
- @all_servers = 1
28
- @refresh = 0
29
- @apply_cos = 1
30
32
  end
31
33
  end
32
34
  end
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'zm/client/resource/resource'
4
+ require 'zm/client/resource/resource_jsns_builder'
5
+ require 'zm/client/resource/resource_jsns_initializer'
4
6
  require 'zm/client/resource/resources_builder'
5
7
  require 'zm/client/resource/resources_collection'
@@ -3,34 +3,56 @@
3
3
  module Zm
4
4
  module Client
5
5
  # class account SearchFolder
6
- class SearchFolder < Base::FolderObject
7
- include Zm::Model::AttributeChangeObserver
6
+ class SearchFolder < Base::Object
7
+ # include Zm::Model::AttributeChangeObserver
8
8
 
9
- INSTANCE_VARIABLE_KEYS = %i[id uuid deletable name absFolderPath l luuid color rgb rev ms webOfflineSyncDays activesyncdisabled query sortBy types]
9
+ attr_accessor :id, :uuid, :deletable, :name, :absFolderPath, :l, :luuid, :color, :rgb, :rev, :ms,
10
+ :webOfflineSyncDays, :activesyncdisabled, :query, :sortBy, :types,
11
+ :name, :color, :rgb, :l, :query, :sortBy
10
12
 
11
- # attr_accessor *INSTANCE_VARIABLE_KEYS
12
- attr_reader :id, :absFolderPath, :types
13
-
14
- define_changed_attributes :name, :color, :rgb, :l, :query, :sortBy
13
+ # define_changed_attributes :name, :color, :rgb, :l, :query, :sortBy
15
14
 
16
15
  def initialize(parent)
17
- super(parent)
16
+ @l = FolderDefault::ROOT[:id]
18
17
  @types = 'messages'
19
- end
20
-
21
- def all_instance_variable_keys
22
- INSTANCE_VARIABLE_KEYS
18
+ super(parent)
23
19
  end
24
20
 
25
21
  def create!
26
- rep = @parent.sacc.create_search_folder(@parent.token, jsns_builder.to_jsns)
27
- json = rep[:Body][:CreateSearchFolderResponse][:search].first
22
+ rep = @parent.sacc.invoke(jsns_builder.to_jsns)
23
+ json = rep[:CreateSearchFolderResponse][:search].first
28
24
  SearchFolderJsnsInitializer.update(self, json)
25
+ @id
29
26
  end
30
27
 
31
28
  def modify!
32
- @parent.sacc.modify_search_folder(@parent.token, jsns_builder.to_modify)
33
- super
29
+ @parent.sacc.invoke(jsns_builder.to_modify)
30
+ true
31
+ end
32
+
33
+ def update!(*args)
34
+ raise NotImplementedError
35
+ end
36
+
37
+ def rename!(new_name)
38
+ return false if new_name == @name
39
+
40
+ @parent.sacc.invoke(jsns_builder.to_rename(new_name))
41
+ @name = new_name
42
+ end
43
+
44
+ def color!
45
+ # @parent.sacc.invoke(jsns_builder.to_color) if color_changed? || rgb_changed?
46
+ @parent.sacc.invoke(jsns_builder.to_color)
47
+
48
+ true
49
+ end
50
+
51
+ def delete!
52
+ return false if @id.nil?
53
+
54
+ @parent.sacc.invoke(jsns_builder.to_delete)
55
+ @id = nil
34
56
  end
35
57
 
36
58
  private
@@ -4,13 +4,12 @@ module Zm
4
4
  module Client
5
5
  # class for account search folder jsns builder
6
6
  class SearchFolderJsnsBuilder
7
-
8
7
  def initialize(search_folder)
9
8
  @item = search_folder
10
9
  end
11
10
 
12
11
  def to_jsns
13
- search = {
12
+ attrs = {
14
13
  name: @item.name,
15
14
  query: @item.query,
16
15
  types: @item.types,
@@ -19,23 +18,29 @@ module Zm
19
18
  sortBy: @item.sortBy
20
19
  }.delete_if { |_, v| v.nil? }
21
20
 
22
- { search: search }
21
+ soap_request = SoapElement.mail(SoapMailConstants::CREATE_SEARCH_FOLDER_REQUEST)
22
+ node_search = SoapElement.create(SoapConstants::SEARCH).add_attributes(attrs)
23
+ soap_request.add_node(node_search)
24
+ soap_request
23
25
  end
24
26
 
25
27
  alias to_create to_jsns
26
28
 
27
29
  def to_modify
28
- search = {
30
+ attrs = {
29
31
  id: @item.id,
30
32
  query: @item.query,
31
33
  types: @item.types
32
34
  }.reject { |_, v| v.nil? }
33
35
 
34
- { search: search }
36
+ soap_request = SoapElement.mail(SoapMailConstants::MODIFY_SEARCH_FOLDER_REQUEST)
37
+ node_search = SoapElement.create(SoapConstants::SEARCH).add_attributes(attrs)
38
+ soap_request.add_node(node_search)
39
+ soap_request
35
40
  end
36
41
 
37
42
  def to_update
38
- action = {
43
+ attrs = {
39
44
  op: :update,
40
45
  id: @item.id,
41
46
  name: @item.name,
@@ -43,43 +48,57 @@ module Zm
43
48
  rgb: @item.rgb
44
49
  }.reject { |_, v| v.nil? }
45
50
 
46
- { action: action }
51
+ build(attrs)
47
52
  end
48
53
 
49
- def to_rename
50
- action = {
54
+ def to_rename(new_name)
55
+ attrs = {
51
56
  op: :rename,
52
57
  id: @item.id,
53
- name: @item.name
58
+ name: new_name
54
59
  }
55
60
 
56
- { action: action }
61
+ build(attrs)
57
62
  end
58
63
 
59
64
  def to_move
60
- action = {
65
+ attrs = {
61
66
  op: :move,
62
67
  id: @item.id,
63
68
  l: @item.l
64
69
  }
65
70
 
66
- { action: action }
71
+ build(attrs)
67
72
  end
68
73
 
69
74
  def to_color
70
- action = {
75
+ attrs = {
71
76
  op: :color,
72
- id: @item.id
77
+ id: @item.id,
78
+ rgb: @item.rgb,
79
+ color: @item.color
73
80
  }
74
81
 
75
- action[:rgb] = @item.rgb if @item.rgb_changed?
76
- action[:color] = @item.color if @item.color_changed?
82
+ # attrs[:rgb] = @item.rgb if @item.rgb_changed?
83
+ # attrs[:color] = @item.color if @item.color_changed?
77
84
 
78
- { action: action }
85
+ build(attrs)
79
86
  end
80
87
 
81
88
  def to_delete
82
- { action: { op: :delete, id: @item.id } }
89
+ attrs = {
90
+ op: :delete,
91
+ id: @item.id
92
+ }
93
+
94
+ build(attrs)
95
+ end
96
+
97
+ def build(attrs)
98
+ soap_request = SoapElement.mail(SoapMailConstants::FOLDER_ACTION_REQUEST)
99
+ node_action = SoapElement.create(SoapConstants::ACTION).add_attributes(attrs)
100
+ soap_request.add_node(node_action)
101
+ soap_request
83
102
  end
84
103
  end
85
104
  end
@@ -7,25 +7,29 @@ module Zm
7
7
  class << self
8
8
  def create(parent, json)
9
9
  item = SearchFolder.new(parent)
10
-
11
- item.instance_variable_set(:@id, json[:id])
12
- item.instance_variable_set(:@name, json[:name])
13
-
14
10
  update(item, json)
15
11
  end
16
12
 
17
13
  def update(item, json)
18
- item.all_instance_variable_keys.reject { |key| json[key].nil? }.each do |key|
19
- item.instance_variable_set(arrow_name(key), json[key])
20
- end
21
-
22
- item
23
- end
14
+ item.id = json[:id].to_i
15
+ item.name = json[:name]
24
16
 
25
- def arrow_name(name)
26
- return name if name.to_s.start_with?('@')
17
+ item.uuid = json[:uuid]
18
+ item.deletable = json[:deletable]
19
+ item.absFolderPath = json[:absFolderPath]
20
+ item.l = json[:l].to_i
21
+ item.luuid = json[:luuid]
22
+ item.color = json[:color]
23
+ item.rgb = json[:rgb]
24
+ item.rev = json[:rev]
25
+ item.ms = json[:ms]
26
+ item.webOfflineSyncDays = json[:webOfflineSyncDays]
27
+ item.activesyncdisabled = json[:activesyncdisabled]
28
+ item.query = json[:query]
29
+ item.sortBy = json[:sortBy]
30
+ item.types = json[:types]
27
31
 
28
- "@#{name}"
32
+ item
29
33
  end
30
34
  end
31
35
  end
@@ -6,7 +6,6 @@ module Zm
6
6
  class SearchFoldersBuilder < Base::ObjectsBuilder
7
7
  def initialize(parent, json)
8
8
  super(parent, json)
9
- @child_class = SearchFolder
10
9
  @json_item_key = :search
11
10
  end
12
11
 
@@ -13,7 +13,8 @@ module Zm
13
13
  private
14
14
 
15
15
  def make_query
16
- @parent.sacc.get_all_search_folders(@parent.token)
16
+ soap_request = SoapElement.mail(SoapMailConstants::GET_SEARCH_FOLDER_REQUEST)
17
+ @parent.sacc.invoke(soap_request)
17
18
  end
18
19
  end
19
20
  end