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
@@ -14,12 +14,13 @@ module Zm
14
14
  end
15
15
 
16
16
  def find(id)
17
- rep = @parent.sacc.get_msg(@parent.token, id, { html: 1 })
18
- entry = rep[:Body][:GetMsgResponse][:m].first
17
+ jsns = { m: { id: id, html: 1 } }
19
18
 
20
- msg = @child_class.new(@parent)
21
- msg.init_from_json(entry)
22
- msg
19
+ soap_request = SoapElement.mail(SoapMailConstants::GET_MSG_REQUEST).add_attributes(jsns)
20
+ rep = @parent.sacc.invoke(soap_request)
21
+ entry = rep[:GetMsgResponse][:m].first
22
+
23
+ MessageJsnsInitializer.create(@parent, entry)
23
24
  end
24
25
 
25
26
  def start_at(start_at)
@@ -32,13 +33,18 @@ module Zm
32
33
  self
33
34
  end
34
35
 
35
- def folders(folders)
36
+ def folders(*folders)
37
+ folders.select! { |folder| folder.is_a?(Zm::Client::Folder) }
38
+ return self if folders.empty?
39
+
36
40
  @folders = folders
37
- @folder_ids = @folders.map(&:id)
38
- self
41
+ folder_ids(*@folders.map(&:id))
39
42
  end
40
43
 
41
- def folder_ids(folder_ids)
44
+ def folder_ids(*folder_ids)
45
+ folder_ids.uniq!
46
+ return self if @folder_ids == folder_ids
47
+
42
48
  @folder_ids = folder_ids
43
49
  self
44
50
  end
@@ -68,7 +74,21 @@ module Zm
68
74
  private
69
75
 
70
76
  def make_query
71
- @parent.sacc.search(@parent.token, @type, @offset, @limit, @sort_by, query, build_options)
77
+ jsns = {
78
+ types: @type,
79
+ offset: @offset,
80
+ limit: @limit,
81
+ sortBy: @sort_by,
82
+ query: query,
83
+ header: @headers
84
+ }
85
+
86
+ jsns.merge!(build_options)
87
+
88
+ jsns.reject! { |_, v| v.nil? }
89
+
90
+ soap_request = SoapElement.mail(SoapMailConstants::SEARCH_REQUEST).add_attributes(jsns)
91
+ @parent.sacc.invoke(soap_request)
72
92
  end
73
93
 
74
94
  def search_builder
@@ -77,7 +97,7 @@ module Zm
77
97
 
78
98
  def search_response
79
99
  rep = make_query
80
- @more = rep[:Body][:SearchResponse][:more]
100
+ @more = rep[:SearchResponse][:more]
81
101
  rep
82
102
  end
83
103
 
@@ -96,7 +116,7 @@ module Zm
96
116
 
97
117
  return nil if @folder_ids.empty?
98
118
 
99
- @folder_ids.map { |id| %Q{inid:"#{id}"} }.join(' OR ')
119
+ @folder_ids.map { |id| %(inid:"#{id}") }.join(' OR ')
100
120
  end
101
121
 
102
122
  def build_options
@@ -106,7 +126,7 @@ module Zm
106
126
  {
107
127
  resultMode: @resultMode,
108
128
  calExpandInstStart: start_at_ts,
109
- calExpandInstEnd: end_at_ts,
129
+ calExpandInstEnd: end_at_ts
110
130
  }.delete_if { |_, v| v.nil? }
111
131
  end
112
132
 
@@ -118,6 +138,7 @@ module Zm
118
138
  @query = nil
119
139
  @folder_ids = []
120
140
  @folders = []
141
+ @headers = [{ n: 'messageIdHeader' }]
121
142
  end
122
143
  end
123
144
  end
@@ -7,22 +7,42 @@ module Zm
7
7
  class AdminObjectsCollection < ObjectsCollection
8
8
  def initialize(parent)
9
9
  @parent = parent
10
+ @persistent = false
10
11
  reset_query_params
11
12
  end
12
13
 
14
+ def find_by(hash)
15
+ item = find_in_cache(hash)
16
+ return item unless item.nil?
17
+
18
+ find_by!(hash)
19
+ end
20
+
21
+ def find_by_or_nil(hash, error_handler = SoapError)
22
+ find_by(hash)
23
+ rescue error_handler => _e
24
+ nil
25
+ end
26
+
13
27
  def ldap
14
- @apply_cos = 0
28
+ @all = nil
29
+ @apply_cos = SoapUtils::OFF
15
30
  self
16
31
  end
17
32
 
18
33
  def where(ldap_query)
19
- @all = nil
20
- ldap_filter.add(ldap_query)
34
+ @all = nil if ldap_filter.add(ldap_query)
21
35
 
22
36
  self
23
37
  end
24
38
 
25
39
  def attrs(*attrs)
40
+ attrs.map!(&:to_s)
41
+ attrs.map!(&:strip)
42
+ attrs.sort!
43
+ attrs.uniq!
44
+ attrs.delete_if { |attr| attr.nil? || attr.empty? }
45
+
26
46
  return self if @attrs == attrs
27
47
 
28
48
  @all = nil
@@ -31,33 +51,78 @@ module Zm
31
51
  end
32
52
 
33
53
  def count
54
+ reset_query_params
34
55
  @count_only = SoapUtils::ON
35
- make_query[:Body][:SearchDirectoryResponse][:num]
56
+ json = make_query
57
+ @count_only = SoapUtils::OFF
58
+ json[:SearchDirectoryResponse][:num]
59
+ end
60
+
61
+ def clear
62
+ @all = nil
63
+ ldap_filter.clear
64
+ reset_query_params
65
+ self
66
+ end
67
+
68
+ def find_each(step = 1_000)
69
+ previous_persistent = @persistent.dup
70
+ @persistent = true
71
+
72
+ total = count
73
+
74
+ @all = []
75
+ @offset = 0
76
+ @limit = step
77
+
78
+ while @offset < total
79
+ @all += build_response
80
+ @offset += @limit
81
+ end
82
+
83
+ ldap_filter.clear
84
+ reset_query_params
85
+
86
+ @persistent = previous_persistent
87
+
88
+ @all
36
89
  end
37
90
 
38
91
  private
39
92
 
40
93
  def make_query
41
- json = sac.search_directory(
42
- ldap_filter.join, @max_result, @limit, @offset,
43
- @domain_name, @apply_cos, @apply_config, @sort_by, @search_type,
44
- @sort_ascending, @count_only, attrs_comma
45
- )
46
- reset_query_params
47
- json
94
+ soap_request = SoapElement.admin(SoapAdminConstants::SEARCH_DIRECTORY_REQUEST)
95
+ soap_request.add_attributes(jsns)
96
+ response = sac.invoke(soap_request)
97
+ clear unless @persistent
98
+ response
48
99
  end
49
100
 
50
101
  def ldap_filter
51
102
  @ldap_filter ||= LdapFilter.new
52
103
  end
53
104
 
54
- # def build_response
55
- # @builder_class.new(@parent, make_query).make
56
- # end
105
+ def find_in_cache(hash)
106
+ return nil if @all.nil?
57
107
 
58
- def reset_query_params
59
- super
60
- ldap_filter.clear
108
+ @all.find { |item| item.send(hash.keys.first) == hash.values.first }
109
+ end
110
+
111
+ def jsns
112
+ {
113
+ query: ldap_filter.join,
114
+ maxResults: @max_result,
115
+ limit: @limit,
116
+ offset: @offset,
117
+ domain: @domain_name,
118
+ applyCos: @apply_cos,
119
+ applyConfig: @apply_config,
120
+ sortBy: @sort_by,
121
+ types: @search_type,
122
+ sortAscending: @sort_ascending,
123
+ countOnly: @count_only,
124
+ attrs: attrs_comma
125
+ }.reject { |_, v| v.nil? }
61
126
  end
62
127
  end
63
128
  end
@@ -0,0 +1,98 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Zm
4
+ module Client
5
+ # class for account tag jsns builder
6
+ class BaseAccountJsnsBuilder
7
+ def initialize(item)
8
+ @item = item
9
+ end
10
+
11
+ def to_tag(tag_name = nil)
12
+ tag_name ||= @item.tn
13
+
14
+ attrs = {
15
+ op: :tag,
16
+ id: @item.id,
17
+ tn: tag_name
18
+ }
19
+
20
+ build(attrs)
21
+ end
22
+
23
+ def to_move(new_folder_id = nil)
24
+ new_folder_id ||= @item.l
25
+
26
+ attrs = {
27
+ op: :move,
28
+ id: @item.id,
29
+ l: new_folder_id
30
+ }
31
+
32
+ build(attrs)
33
+ end
34
+
35
+ def to_patch(hash)
36
+ attrs = {
37
+ op: :update,
38
+ id: @item.id
39
+ }.merge(hash)
40
+
41
+ attrs.reject! { |_, v| v.nil? }
42
+
43
+ build(attrs)
44
+ end
45
+
46
+ def to_delete
47
+ attrs = {
48
+ op: :delete,
49
+ id: @item.id
50
+ }
51
+
52
+ build(attrs)
53
+ end
54
+
55
+ def to_rename(new_name = nil)
56
+ new_name ||= @item.name
57
+
58
+ attrs = {
59
+ op: :rename,
60
+ id: @item.id,
61
+ name: new_name
62
+ }
63
+
64
+ build(attrs)
65
+ end
66
+
67
+ def to_color
68
+ attrs = {
69
+ op: :color,
70
+ id: @item.id,
71
+ rgb: @item.rgb,
72
+ color: @item.color
73
+ }
74
+
75
+ # attrs[:rgb] = @item.rgb if @item.rgb_changed?
76
+ # attrs[:color] = @item.color if @item.color_changed?
77
+
78
+ build(attrs)
79
+ end
80
+
81
+ def to_trash
82
+ attrs = {
83
+ op: :trash,
84
+ id: @item.id
85
+ }
86
+
87
+ build(attrs)
88
+ end
89
+
90
+ def build(attrs)
91
+ soap_request = SoapElement.mail(SoapMailConstants::ITEM_ACTION_REQUEST)
92
+ node_action = SoapElement.create(SoapConstants::ACTION).add_attributes(attrs)
93
+ soap_request.add_node(node_action)
94
+ soap_request
95
+ end
96
+ end
97
+ end
98
+ end
@@ -5,14 +5,61 @@ module Zm
5
5
  module Base
6
6
  # class for account object jsns builder
7
7
  class BaseJsnsBuilder
8
+ A_ARRAY_PROC = ->(i) { i.last.is_a?(Array) ? i.last.map { |j| [i.first, j] } : [i] }
9
+ A_NODE_PROC = ->(n) { { n: n.first, _content: n.last } }
8
10
 
9
11
  def initialize(item)
10
12
  @item = item
11
13
  end
12
14
 
15
+ def to_jsns
16
+ {
17
+ name: @item.name,
18
+ a: instance_variables_array.map(&A_ARRAY_PROC).flatten(1).map(&A_NODE_PROC)
19
+ }
20
+ end
21
+
22
+ alias to_create to_jsns
23
+
24
+ def to_update
25
+ {
26
+ id: @item.id,
27
+ a: instance_variables_array.map(&A_ARRAY_PROC).flatten(1).map(&A_NODE_PROC)
28
+ }
29
+ end
30
+
31
+ def to_patch(hash)
32
+ {
33
+ id: @item.id,
34
+ a: hash.map(&A_ARRAY_PROC).flatten(1).map(&A_NODE_PROC)
35
+ }
36
+ end
37
+
13
38
  def to_delete
14
39
  { id: @item.id }
15
40
  end
41
+
42
+ def instance_variables_array
43
+ selected_attrs = @item.attrs_write.map { |a| arrow_name(a).to_sym }
44
+ attrs_only_set = @item.instance_variables & selected_attrs
45
+
46
+ arr = attrs_only_set.map do |name|
47
+ n = name.to_s[1..]
48
+ value = @item.instance_variable_get(name)
49
+ [n, value]
50
+ end
51
+
52
+ multi_value = arr.select { |a| a.last.is_a?(Array) }
53
+ arr.reject! { |a| a.last.is_a?(Array) || a.last.nil? }
54
+ multi_value.each { |a| arr += a.last.map { |v| [a.first, v] } }
55
+ arr
56
+ end
57
+
58
+ def arrow_name(name)
59
+ return name if name.to_s.start_with?('@')
60
+
61
+ "@#{name}"
62
+ end
16
63
  end
17
64
  end
18
65
  end
@@ -5,23 +5,54 @@ module Zm
5
5
  module Base
6
6
  # class for account object jsns initializer
7
7
  class BaseJsnsInitializer
8
+ class << self
9
+ def update(item, json)
10
+ item.id = json[:id]
11
+ item.name = json[:name]
8
12
 
9
- def initialize(parent, json)
10
- @parent = parent
11
- @json = json
12
- end
13
+ formatted_json(json).each do |k, v|
14
+ valorise(item, k, v)
15
+ end
13
16
 
14
- def create
15
- @item ||= @child_class.new(@parent)
17
+ item
18
+ end
16
19
 
17
- @item.instance_variable_set(:@id, @json[:id])
18
- @item.instance_variable_set(:@name, @json[:name])
19
- end
20
+ def formatted_json(json)
21
+ return [] if json[:a].nil?
22
+
23
+ json[:a].reject! { |n| n[:n].nil? }
24
+ json_map = json[:a].map { |n| [n[:n], n[:_content]] }.freeze
25
+
26
+ hash_multivalued = json_map.each_with_object({}) do |(k, v), h|
27
+ h[k] ||= []
28
+ h[k].push(v)
29
+ end
30
+
31
+ hash_multivalued.transform_values do |v|
32
+ v.length == 1 ? v.first : v
33
+ end
34
+ end
35
+
36
+ def valorise(item, k, v)
37
+ setter_method_name = "#{k}="
38
+ return unless item.respond_to?(setter_method_name)
39
+
40
+ item.send(setter_method_name, convert_json_string_value(v))
41
+ end
42
+
43
+ def convert_json_string_value(value)
44
+ return value unless value.is_a?(String)
45
+ return 0 if value == '0'
20
46
 
21
- def arrow_name(name)
22
- return name if name.to_s.start_with?('@')
47
+ c = value.to_i
48
+ c.to_s == value ? c : value
49
+ end
23
50
 
24
- "@#{name}"
51
+ # def arrow_name(name)
52
+ # return name if name.to_s.start_with?('@')
53
+ #
54
+ # "@#{name}"
55
+ # end
25
56
  end
26
57
  end
27
58
  end
@@ -3,17 +3,19 @@
3
3
  module Zm
4
4
  module Client
5
5
  class LdapFilter
6
+ include Zm::Inspector
7
+
6
8
  def initialize(base_filter = nil)
7
9
  @base_filter = base_filter
8
10
  @parts = []
9
11
  end
10
12
 
11
13
  def add(filter)
12
- if filter.is_a?(String) && !filter.empty?
13
- @parts << filter
14
- elsif filter.is_a?(Hash)
15
- @parts += filter.map { |k, v| "(#{k}=#{v})" }
16
- end
14
+ new_filter = stringify_filter(filter)
15
+ return false if new_filter.nil? || @parts.include?(new_filter)
16
+
17
+ @parts << new_filter
18
+ true
17
19
  end
18
20
 
19
21
  def clear
@@ -28,6 +30,19 @@ module Zm
28
30
 
29
31
  "(&#{arr.join})"
30
32
  end
33
+
34
+ private
35
+
36
+ def stringify_filter(filter)
37
+ return nil if !filter.is_a?(String) && !filter.is_a?(Hash)
38
+
39
+ return filter.map { |k, v| "(#{k}=#{v})" }.join if filter.is_a?(Hash)
40
+
41
+ new_filter = filter.strip
42
+ return nil if new_filter.empty?
43
+
44
+ new_filter
45
+ end
31
46
  end
32
47
  end
33
48
  end
@@ -0,0 +1,68 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Zm
4
+ module Client
5
+ class MailboxInfosCollection
6
+ def initialize(parent)
7
+ @parent = parent
8
+ @sections = []
9
+ @rights = []
10
+ end
11
+
12
+ def all
13
+ @all || all!
14
+ end
15
+
16
+ def all!
17
+ build_response
18
+ end
19
+
20
+ def clear
21
+ reset_query_params
22
+ @all.clear
23
+ end
24
+
25
+ def sections(*entries)
26
+ @sections += entries
27
+ self
28
+ end
29
+
30
+ def rights(*entries)
31
+ @rights += entries
32
+ self
33
+ end
34
+
35
+ def read
36
+ reset_query_params
37
+ @sections = ['mbox']
38
+ rep = build_response
39
+ @parent.id = rep[:id]
40
+ @parent.used = rep[:used]
41
+ @parent.public_url = rep[:publicURL]
42
+ @parent.zimbraCOSId = rep[:cos][:id]
43
+ @parent.home_url = rep[:rest]
44
+ rep
45
+ end
46
+
47
+ private
48
+
49
+ def build_response
50
+ @all = make_query[:GetInfoResponse]
51
+ end
52
+
53
+ def make_query
54
+ soap_request = SoapElement.account(SoapAccountConstants::GET_INFO_REQUEST).add_attributes(jsns)
55
+ @parent.sacc.invoke(soap_request)
56
+ end
57
+
58
+ def jsns
59
+ { rights: @rights.join(','), sections: @sections.join(',') }.reject { |_, v| v.empty? }
60
+ end
61
+
62
+ def reset_query_params
63
+ @sections.clear
64
+ @rights.clear
65
+ end
66
+ end
67
+ end
68
+ end