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
@@ -6,9 +6,9 @@ module Zm
6
6
  DOUBLEPOINT = ' :: '
7
7
 
8
8
  module Regex
9
- UUID_REGEX = %r{[0-9a-fA-F]{8}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{12}}
10
- BASEDN_REGEX = %r{^uid=}
11
- SHARED_CONTACT = %r{[0-9a-fA-F]{8}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{12}:[0-9]+}
9
+ UUID_REGEX = /[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}/.freeze
10
+ BASEDN_REGEX = /^uid=/.freeze
11
+ SHARED_CONTACT = /[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}:[0-9]+/.freeze
12
12
  end
13
13
 
14
14
  module FolderDefault
@@ -83,7 +83,7 @@ module Zm
83
83
  COS = :coses
84
84
 
85
85
  module Attributes
86
- ACCOUNT = %i[
86
+ ACCOUNT = %w[
87
87
  displayName
88
88
  zimbraId
89
89
  cn
@@ -102,7 +102,7 @@ module Zm
102
102
  zimbraIsExternalVirtualAccount
103
103
  ].freeze
104
104
 
105
- DL = %i[
105
+ DL = %w[
106
106
  displayName
107
107
  zimbraId
108
108
  zimbraMailHost
@@ -112,7 +112,7 @@ module Zm
112
112
  zimbraMailAlias
113
113
  ].freeze
114
114
 
115
- ALIAS = %i[
115
+ ALIAS = %w[
116
116
  zimbraAliasTargetId
117
117
  zimbraId
118
118
  targetName
@@ -126,7 +126,7 @@ module Zm
126
126
  zimbraIsExternalVirtualAccount
127
127
  ].freeze
128
128
 
129
- RESOURCE = %i[
129
+ RESOURCE = %w[
130
130
  displayName
131
131
  zimbraId
132
132
  zimbraMailHost
@@ -141,7 +141,7 @@ module Zm
141
141
  zimbraIsExternalVirtualAccount
142
142
  ].freeze
143
143
 
144
- DOMAIN = %i[
144
+ DOMAIN = %w[
145
145
  description
146
146
  zimbraDomainName
147
147
  zimbraDomainStatus
@@ -150,7 +150,7 @@ module Zm
150
150
  zimbraDomainDefaultCOSId
151
151
  ].freeze
152
152
 
153
- COS = %i[
153
+ COS = %w[
154
154
  cn
155
155
  description
156
156
  zimbraMailHostPool
@@ -186,7 +186,7 @@ module Zm
186
186
  CORRUPT = 'corrupt'
187
187
  ACTIVE = 'active'
188
188
  HOLD = 'hold'
189
- ALL = [INCOMING, DEFERRED, CORRUPT, ACTIVE, HOLD]
189
+ ALL = [INCOMING, DEFERRED, CORRUPT, ACTIVE, HOLD].freeze
190
190
  end
191
191
 
192
192
  module MtaQueueAction
@@ -211,7 +211,17 @@ module Zm
211
211
  SERVER = 'server'
212
212
  RESOURCE = 'calresource'
213
213
  INTERNAL_USER_ACCOUNT = 'internalUserAccount'
214
- ALL = [USER_ACCOUNT, ACCOUNT, ALIAS, DL, DOMAIN, COS, SERVER, RESOURCE, INTERNAL_USER_ACCOUNT]
214
+ ALL = [USER_ACCOUNT, ACCOUNT, ALIAS, DL, DOMAIN, COS, SERVER, RESOURCE, INTERNAL_USER_ACCOUNT].freeze
215
+ end
216
+
217
+ module ContentType
218
+ TEXT = 'text/plain'
219
+ HTML = 'text/html'
220
+ ALL = [TEXT, HTML].freeze
221
+ end
222
+
223
+ module ContentPart
224
+ ALTERNATIVE = 'multipart/alternative'
215
225
  end
216
226
  end
217
227
  end
@@ -3,31 +3,23 @@
3
3
  module Zm
4
4
  module Client
5
5
  # class account tag
6
- class Contact < Base::AccountObject
6
+ class Contact < Base::Object
7
+ include BelongsToFolder
8
+ include BelongsToTag
9
+
7
10
  GROUP_PATTERN = 'group'
8
11
 
9
- INSTANCE_VARIABLE_KEYS = %i[
10
- anniversary assistantPhone birthday callbackPhone carPhone company companyPhone custom1 department email email2
11
- email3 email4 email5 email6 email7 firstName fullName homeCity homeCountry homeFax homePhone homePostalCode
12
- homeState homeStreet homeURL imAddress1 imAddress2 imAddress3 imAddress4 imAddress5 jobTitle lastName maidenName
13
- middleName mobilePhone namePrefix nameSuffix nickname notes otherCity otherCountry otherFax otherPhone
14
- otherPostalCode otherState otherStreet otherURL pager workCity workCountry workFax workPhone workPostalCode
15
- workState workStreet workURL image
16
- ].freeze
17
-
18
- attr_accessor *INSTANCE_VARIABLE_KEYS
19
- attr_accessor :id, :name, :l, :type, :members, :old_members, :tn
20
-
21
- def initialize(parent, json = nil)
22
- @parent = parent
23
- @members = []
24
- @custom_keys = []
25
- init_from_json(json) if json.is_a?(Hash)
26
- yield(self) if block_given?
27
- @old_members = @members.clone
12
+ attr_accessor :anniversary, :assistantPhone, :birthday, :callbackPhone, :carPhone, :company, :companyPhone,
13
+ :custom1, :department, :email, :email2, :email3, :email4, :email5, :email6, :email7, :firstName, :fullName, :homeCity, :homeCountry, :homeFax, :homePhone, :homePostalCode, :homeState, :homeStreet, :homeURL, :imAddress1, :imAddress2, :imAddress3, :imAddress4, :imAddress5, :jobTitle, :lastName, :maidenName, :middleName, :mobilePhone, :namePrefix, :nameSuffix, :nickname, :notes, :otherCity, :otherCountry, :otherFax, :otherPhone, :otherPostalCode, :otherState, :otherStreet, :otherURL, :pager, :workCity, :workCountry, :workFax, :workPhone, :workPostalCode, :workState, :workStreet, :workURL, :image, :id, :name, :l, :type, :tn, :shared_account_id, :shared_folder_account_id
14
+
15
+ def initialize(parent)
16
+ @l = FolderDefault::CONTACTS[:id]
17
+ @shared_account_id = nil
18
+ @shared_folder_account_id = nil
19
+ super(parent)
28
20
  end
29
21
 
30
- def is_group?
22
+ def group?
31
23
  @type == GROUP_PATTERN
32
24
  end
33
25
 
@@ -35,90 +27,57 @@ module Zm
35
27
  [email, email2, email3, email4, email5, email6, email7].compact
36
28
  end
37
29
 
38
- def emails_h
39
- {
40
- 'email' => email,
41
- 'email2' => email2,
42
- 'email3' => email3,
43
- 'email4' => email4,
44
- 'email5' => email5,
45
- 'email6' => email6,
46
- 'email7' => email7
47
- }.compact
30
+ def add_custom_property(key, value)
31
+ instance_variable_set(Utils.arrow_name(key), value)
48
32
  end
49
33
 
50
- def concat
51
- [id, name, l] + all_instance_variable_keys.map { |key| instance_variable_get(arrow_name(key)) }
52
- end
34
+ def create!
35
+ rep = @parent.sacc.invoke(jsns_builder.to_jsns)
36
+ ContactJsnsInitializer.update(self, rep[:CreateContactResponse][:cn].first)
53
37
 
54
- def to_h
55
- hashmap = Hash[all_instance_variable_keys.map { |key| [key, instance_variable_get(arrow_name(key))] }]
56
- hashmap.delete_if { |_, v| v.nil? }
57
- hashmap
38
+ @id
58
39
  end
59
40
 
60
- def init_from_json(json)
61
- @id = json[:id]
62
- @name = json[:fileAsStr]
63
- @l = json[:l]
64
- @tn = json[:tn]
65
-
66
- init_instance_variable_from_json(json[:_attrs])
67
-
68
- return unless is_group?
69
-
70
- extend(GroupContact)
71
- init_members_from_json(json[:m])
41
+ def modify!
42
+ @parent.sacc.invoke(jsns_builder.to_update)
43
+ true
72
44
  end
73
45
 
74
- def init_instance_variable_from_json(json_attrs)
75
- return if json_attrs.nil?
76
-
77
- @type = json_attrs[:type]
46
+ def update!(hash)
47
+ return false if hash.delete_if { |k, v| v.nil? || !respond_to?(k) }.empty?
78
48
 
79
- make_custom_keys(json_attrs)
49
+ do_update!(hash)
80
50
 
81
- all_instance_variable_keys.each do |key|
82
- instance_variable_set(arrow_name(key), json_attrs[key])
51
+ hash.each do |key, value|
52
+ update_attribute(key, value)
83
53
  end
84
- end
85
-
86
- def make_custom_keys(json_attrs)
87
- @custom_keys = json_attrs.keys - INSTANCE_VARIABLE_KEYS - %i[type fileAs]
88
- return if @custom_keys.empty?
89
54
 
90
- self.class.attr_accessor(*@custom_keys)
91
- rescue StandardError => _
92
- @custom_keys.clear
93
- nil
55
+ true
94
56
  end
95
57
 
96
- def all_instance_variable_keys
97
- INSTANCE_VARIABLE_KEYS + @custom_keys
58
+ def rename!(*args)
59
+ raise NotImplementedError
98
60
  end
99
61
 
100
- def add_custom_property(key, value)
101
- instance_variable_set(arrow_name(key), value)
102
- @custom_keys << key unless all_instance_variable_keys.include?(key)
103
- end
62
+ def delete!
63
+ return false if @id.nil?
104
64
 
105
- def create!
106
- rep = @parent.sacc.create_contact(@parent.token, l, instance_variables_array(all_instance_variable_keys))
107
- init_from_json(rep[:Body][:CreateContactResponse][:cn].first)
65
+ @parent.sacc.invoke(jsns_builder.to_delete)
66
+ @id = nil
108
67
  end
109
68
 
110
- def delete!
111
- @parent.sacc.contact_action(@parent.token, :delete, @id)
112
- super
69
+ def reload!
70
+ raise NotImplementedError
113
71
  end
114
72
 
115
- def update!(hash)
116
- @parent.sacc.modify_contact(@parent.token, id, hash)
117
- hash.each { |k, v| send "#{k}=", v }
73
+ private
74
+
75
+ def do_update!(hash)
76
+ @parent.sacc.invoke(jsns_builder.to_patch(hash))
118
77
  end
119
78
 
120
- def modify!
121
- @parent.sacc.modify_contact(@parent.token, id, instance_variables_array(all_instance_variable_keys))
79
+ def jsns_builder
80
+ @jsns_builder ||= ContactJsnsBuilder.new(self)
122
81
  end
123
82
  end
124
83
  end
@@ -0,0 +1,60 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Zm
4
+ module Client
5
+ # class for account contact jsns builder
6
+ class ContactJsnsBuilder < BaseAccountJsnsBuilder
7
+ EXCLUDE_INSTANCE_VARIABLE_KEYS = %i[@id @name @parent @l @type @tn @jsns_builder].freeze
8
+
9
+ def to_jsns
10
+ jsns = {
11
+ cn: {
12
+ a: instance_variables_array(all_instance_variables).map(&Utils::A_NODE_PROC),
13
+ l: @item.folder_id || Zm::Client::FolderDefault::CONTACTS[:id]
14
+ }
15
+ }
16
+
17
+ SoapElement.mail(SoapMailConstants::CREATE_CONTACT_REQUEST).add_attributes(jsns)
18
+ end
19
+
20
+ def to_update
21
+ jsns = {
22
+ cn: {
23
+ a: instance_variables_array(all_instance_variables).map(&Utils::A_NODE_PROC),
24
+ id: @item.id
25
+ }
26
+ }
27
+
28
+ SoapElement.mail(SoapMailConstants::MODIFY_CONTACT_REQUEST).add_attributes(jsns)
29
+ end
30
+
31
+ def to_patch(hash)
32
+ jsns = {
33
+ cn: {
34
+ id: @item.id,
35
+ a: hash.map(&Utils::A_ARRAY_PROC).flatten(1).map(&Utils::A_NODE_PROC)
36
+ }
37
+ }
38
+
39
+ SoapElement.mail(SoapMailConstants::MODIFY_CONTACT_REQUEST).add_attributes(jsns)
40
+ end
41
+
42
+ def instance_variables_array(zcs_attrs)
43
+ arr = zcs_attrs.map do |name|
44
+ n = name.to_s[1..]
45
+ value = @item.instance_variable_get(name)
46
+ [n, value]
47
+ end
48
+
49
+ multi_value = arr.select { |a| a.last.is_a?(Array) }
50
+ arr.reject! { |a| a.last.is_a?(Array) || a.last.nil? }
51
+ multi_value.each { |a| arr += a.last.map { |v| [a.first, v] } }
52
+ arr
53
+ end
54
+
55
+ def all_instance_variables
56
+ @item.instance_variables - EXCLUDE_INSTANCE_VARIABLE_KEYS
57
+ end
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,78 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Zm
4
+ module Client
5
+ # class for account contact
6
+ class ContactJsnsInitializer
7
+ class << self
8
+ def create(parent, json)
9
+ item = Contact.new(parent)
10
+ update(item, json)
11
+ end
12
+
13
+ def update(item, json)
14
+ part_id = json[:id].split(':')
15
+
16
+ if part_id.length == 1
17
+ item.id = json[:id].to_i
18
+ elsif part_id.length == 2
19
+ item.shared_account_id = part_id.first
20
+ item.id = part_id.last.to_i
21
+ else
22
+ item.id = json[:id]
23
+ end
24
+
25
+ part_l = json[:l].split(':')
26
+
27
+ if part_l.length == 1
28
+ item.l = json[:l].to_i
29
+ elsif part_l.length == 2
30
+ item.shared_folder_account_id = part_l.first
31
+ item.l = part_l.last.to_i
32
+ else
33
+ item.l = json[:l]
34
+ end
35
+
36
+ # item.id = json[:id]
37
+ item.name = json[:fileAsStr]
38
+ # item.l = json[:l].to_i
39
+ item.tn = json[:tn]
40
+
41
+ if json[:_attrs].is_a?(Hash)
42
+ make_custom_keys(json[:_attrs], item)
43
+ init_by_attrs(json[:_attrs], item)
44
+ end
45
+
46
+ if item.group?
47
+ item.extend(GroupContact)
48
+ init_members_from_json(json[:m], item)
49
+ end
50
+
51
+ item
52
+ end
53
+
54
+ def make_custom_keys(attrs, item)
55
+ custom_keys = attrs.keys - item.all_instance_variable_keys
56
+ return if custom_keys.empty?
57
+
58
+ item.class.attr_accessor(*custom_keys)
59
+ rescue StandardError => _e
60
+ nil
61
+ end
62
+
63
+ def init_by_attrs(attrs, item)
64
+ attrs.each do |k, v|
65
+ m = Utils.equals_name(k)
66
+ item.send(m, v) if item.respond_to?(m)
67
+ end
68
+ end
69
+
70
+ def init_members_from_json(m, item)
71
+ return if m.nil?
72
+
73
+ item.members.all = m.map { |m| Zm::Client::ConcatMember.new(m[:type], m[:value]) }
74
+ end
75
+ end
76
+ end
77
+ end
78
+ end
@@ -3,48 +3,40 @@
3
3
  module Zm
4
4
  module Client
5
5
  class ConcatMember
6
+ include Zm::Inspector
7
+
6
8
  INTERNAL = 'C'
7
9
  FREE = 'I'
8
10
  LDAP = 'G'
9
11
  ADD = '+'
10
12
  DEL = '-'
11
13
 
12
- class << self
13
- def find_type_by_value(value)
14
- return INTERNAL if !value.to_i.zero? || Zm::Client::Regex::SHARED_CONTACT.match(value)
15
- return LDAP if Zm::Client::Regex::BASEDN_REGEX.match(value)
16
-
17
- FREE
18
- end
19
-
20
- def init_by_value(value)
21
- type_v = find_type_by_value(value)
22
- new(type_v, value)
23
- end
24
- end
25
-
26
- attr_reader :type, :value, :op
14
+ attr_reader :type, :value, :op, :shared_account_id
27
15
 
28
16
  def initialize(type, value, op = nil)
17
+ @shared_account_id = nil
29
18
  @op = op
30
19
  @type = type
31
- @value = value
32
- end
33
20
 
34
- def concat
35
- [@value, @type, @op]
36
- end
21
+ value_int = value.to_i
37
22
 
38
- def to_s
39
- concat.join(' :: ')
23
+ if !value_int.zero?
24
+ @value = value_int
25
+ elsif Zm::Client::Regex::SHARED_CONTACT.match(value)
26
+ part_value = value.split(':')
27
+ @shared_account_id = part_value.first
28
+ @value = part_value.last.to_i
29
+ else
30
+ @value = value
31
+ end
40
32
  end
41
33
 
42
34
  def internal?
43
- @type == INTERNAL && !Zm::Client::Regex::SHARED_CONTACT.match(value)
35
+ @type == INTERNAL && @value.is_a?(Integer)
44
36
  end
45
37
 
46
38
  def shared?
47
- @type == INTERNAL && Zm::Client::Regex::SHARED_CONTACT.match(value)
39
+ @type == INTERNAL && !@shared_account_id.nil?
48
40
  end
49
41
 
50
42
  def free?
@@ -55,6 +47,10 @@ module Zm
55
47
  @type == LDAP
56
48
  end
57
49
 
50
+ def current?
51
+ @op.nil?
52
+ end
53
+
58
54
  def add!
59
55
  @op = ADD
60
56
  end
@@ -63,10 +59,15 @@ module Zm
63
59
  @op = DEL
64
60
  end
65
61
 
66
- def construct_soap_node
67
- node = { type: @type, value: @value }
68
- node[:op] = @op unless @op.nil?
69
- node
62
+ def email_address
63
+ return unless ldap?
64
+
65
+ @email_address ||= @value.sub('uid=', '').sub(',ou=people,dc=', '@').gsub(',dc=', '.')
66
+ end
67
+
68
+ def instance_variables_map
69
+ email_address
70
+ super
70
71
  end
71
72
  end
72
73
  end
@@ -0,0 +1,44 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Zm
4
+ module Client
5
+ class ContactMembersCollection
6
+ attr_accessor :all
7
+
8
+ def initialize(parent)
9
+ @parent = parent
10
+ @all = []
11
+ end
12
+
13
+ def add(new_member)
14
+ return false unless new_member.is_a?(Zm::Client::ConcatMember)
15
+
16
+ current_member = @all.find { |m| m.type == new_member.type && m.value == new_member.value }
17
+
18
+ if current_member.nil?
19
+ new_member.add!
20
+ @all << new_member
21
+ return true
22
+ end
23
+
24
+ if current_member.op == Zm::Client::ConcatMember::DEL
25
+ current_member.add!
26
+ return true
27
+ end
28
+
29
+ false
30
+ end
31
+
32
+ def remove(new_member)
33
+ return false unless new_member.is_a?(Zm::Client::ConcatMember)
34
+
35
+ current_member = @all.find { |m| m.type == new_member.type && m.value == new_member.value }
36
+ return false if current_member.nil?
37
+
38
+ current_member.remove!
39
+
40
+ true
41
+ end
42
+ end
43
+ end
44
+ end
@@ -6,9 +6,16 @@ module Zm
6
6
  class ContactBuilder < Base::ObjectsBuilder
7
7
  def initialize(parent, json)
8
8
  super(parent, json)
9
- @child_class = Contact
10
9
  @json_item_key = :cn
11
10
  end
11
+
12
+ def make
13
+ return [] if json_items.nil?
14
+
15
+ json_items.map do |entry|
16
+ ContactJsnsInitializer.create(@parent, entry)
17
+ end
18
+ end
12
19
  end
13
20
  end
14
21
  end
@@ -7,13 +7,29 @@ module Zm
7
7
  def initialize(parent)
8
8
  @child_class = Contact
9
9
  @builder_class = ContactBuilder
10
+ @folder_id = nil
10
11
  super(parent)
11
12
  end
12
13
 
14
+ def folder(folder)
15
+ return self unless folder.is_a?(Zm::Client::Folder)
16
+
17
+ folder_id(folder.id)
18
+ end
19
+
20
+ def folder_id(folder_id)
21
+ return self if @folder_id == folder_id
22
+
23
+ @folder_id = folder_id
24
+ self
25
+ end
26
+
13
27
  private
14
28
 
15
29
  def make_query
16
- @parent.sacc.get_all_contacts(@parent.token)
30
+ jsns = @folder_id.nil? ? nil : { l: @folder_id }
31
+ soap_request = SoapElement.mail(SoapMailConstants::GET_CONTACTS_REQUEST).add_attributes(jsns)
32
+ @parent.sacc.invoke(soap_request)
17
33
  end
18
34
  end
19
35
  end
@@ -0,0 +1,51 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Zm
4
+ module Client
5
+ # class for account contact jsns builder
6
+ class GroupContactJsnsBuilder < BaseAccountJsnsBuilder
7
+ EXCLUDE_INSTANCE_VARIABLE_KEYS = %i[@id @name @parent @l @type @tn @jsns_builder].freeze
8
+
9
+ def to_jsns
10
+ {
11
+ cn: {
12
+ a: instance_variables_array.map(&Utils::A_NODE_PROC),
13
+ l: @item.folder_id || Zm::Client::FolderDefault::CONTACTS[:id],
14
+ m: members_node
15
+ }
16
+ }
17
+ end
18
+
19
+ def to_update
20
+ {
21
+ cn: {
22
+ a: instance_variables_array.map(&Utils::A_NODE_PROC),
23
+ id: @item.id,
24
+ m: members_node
25
+ }
26
+ }
27
+ end
28
+
29
+ def to_patch(hash)
30
+ {
31
+ cn: {
32
+ id: @item.id,
33
+ a: hash.map(&Utils::A_ARRAY_PROC).flatten(1).map(&Utils::A_NODE_PROC)
34
+ }
35
+ }
36
+ end
37
+
38
+ alias to_create to_jsns
39
+
40
+ def members_node
41
+ @item.members.all.reject(&:current?).map do |m|
42
+ { type: m.type, value: m.value, op: m.op }
43
+ end
44
+ end
45
+
46
+ def instance_variables_array
47
+ [[:nickname, @item.name], [:fullname, @item.name], [:fileAs, "8:#{@item.name}"], %i[type group]]
48
+ end
49
+ end
50
+ end
51
+ end