zm-ruby-client 0.18.5 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
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 -308
  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 +68 -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 +15 -28
  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 +30 -21
  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 +39 -55
  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 -20
  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 +1 -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