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.
- checksums.yaml +4 -4
- data/.gitignore +1 -1
- data/Gemfile +2 -2
- data/README.md +7 -0
- data/lib/zm/client/account/account.rb +31 -308
- data/lib/zm/client/account/account_aliases_collection.rb +52 -0
- data/lib/zm/client/account/account_dls_membership_collection.rb +4 -1
- data/lib/zm/client/account/account_dls_owner_collection.rb +8 -1
- data/lib/zm/client/account/account_jsns_builder.rb +77 -0
- data/lib/zm/client/account/account_jsns_initializer.rb +9 -24
- data/lib/zm/client/account/accounts_builder.rb +0 -1
- data/lib/zm/client/account/accounts_collection.rb +32 -8
- data/lib/zm/client/account.rb +1 -0
- data/lib/zm/client/ace/ace.rb +6 -22
- data/lib/zm/client/ace/ace_jsns_builder.rb +15 -16
- data/lib/zm/client/ace/ace_jsns_initializer.rb +0 -1
- data/lib/zm/client/ace/aces_builder.rb +0 -1
- data/lib/zm/client/ace/aces_collection.rb +2 -18
- data/lib/zm/client/appointment/appointment.rb +38 -30
- data/lib/zm/client/appointment/appointment_jsns_builder.rb +22 -34
- data/lib/zm/client/appointment/appointment_jsns_initializer.rb +6 -3
- data/lib/zm/client/appointment/appointments_builder.rb +6 -18
- data/lib/zm/client/appointment/appointments_collection.rb +25 -4
- data/lib/zm/client/backup/backup.rb +4 -32
- data/lib/zm/client/backup/backup_jsns_initializer.rb +26 -0
- data/lib/zm/client/backup/backups_builder.rb +8 -13
- data/lib/zm/client/backup/backups_collection.rb +2 -1
- data/lib/zm/client/backup.rb +1 -0
- data/lib/zm/client/base/account_search_objects_collection.rb +34 -13
- data/lib/zm/client/base/admin_objects_collection.rb +82 -17
- data/lib/zm/client/base/base_account_jsns_builder.rb +98 -0
- data/lib/zm/client/base/base_jsns_builder.rb +47 -0
- data/lib/zm/client/base/base_jsns_initializer.rb +43 -12
- data/lib/zm/client/base/ldap_filter.rb +20 -5
- data/lib/zm/client/base/mailbox_infos_collection.rb +68 -0
- data/lib/zm/client/base/mailbox_object.rb +299 -0
- data/lib/zm/client/base/mailbox_prefs_collection.rb +75 -0
- data/lib/zm/client/base/object.rb +28 -62
- data/lib/zm/client/base/objects_builder.rb +4 -10
- data/lib/zm/client/base/objects_collection.rb +13 -10
- data/lib/zm/client/base/zimbra_attribute.rb +10 -8
- data/lib/zm/client/base/zimbra_attributes_collection.rb +154 -10
- data/lib/zm/client/base.rb +5 -5
- data/lib/zm/client/cluster/cluster.rb +43 -39
- data/lib/zm/client/cluster/cluster_config.rb +5 -5
- data/lib/zm/client/common/recipients.rb +3 -3
- data/lib/zm/client/common/token_metadata.rb +4 -1
- data/lib/zm/client/common/utils.rb +57 -0
- data/lib/zm/client/common.rb +2 -1
- data/lib/zm/client/connector/rest_account.rb +15 -28
- data/lib/zm/client/connector/soap_account.rb +38 -441
- data/lib/zm/client/connector/soap_admin.rb +16 -552
- data/lib/zm/client/connector/soap_base.rb +30 -21
- data/lib/zm/client/connector/soap_error.rb +1 -3
- data/lib/zm/client/constant.rb +21 -11
- data/lib/zm/client/contact/contact.rb +42 -83
- data/lib/zm/client/contact/contact_jsns_builder.rb +60 -0
- data/lib/zm/client/contact/contact_jsns_initializer.rb +78 -0
- data/lib/zm/client/contact/contact_member.rb +29 -28
- data/lib/zm/client/contact/contact_members_collection.rb +44 -0
- data/lib/zm/client/contact/contacts_builder.rb +8 -1
- data/lib/zm/client/contact/contacts_collection.rb +17 -1
- data/lib/zm/client/contact/group_contact_jsns_builder.rb +51 -0
- data/lib/zm/client/contact/mod_group_contact.rb +4 -67
- data/lib/zm/client/contact.rb +5 -1
- data/lib/zm/client/cos/cos.rb +35 -40
- data/lib/zm/client/cos/cos_accounts_collection.rb +19 -0
- data/lib/zm/client/cos/cos_domains_collection.rb +20 -0
- data/lib/zm/client/cos/cos_jsns_builder.rb +72 -0
- data/lib/zm/client/cos/cos_jsns_initializer.rb +29 -0
- data/lib/zm/client/cos/cos_servers_collection.rb +60 -0
- data/lib/zm/client/cos/coses_builder.rb +8 -1
- data/lib/zm/client/cos/coses_collection.rb +8 -5
- data/lib/zm/client/cos.rb +5 -0
- data/lib/zm/client/datasource/datasource.rb +69 -0
- data/lib/zm/client/datasource/datasource_jsns_builder.rb +32 -0
- data/lib/zm/client/datasource/datasource_jsns_initializer.rb +27 -0
- data/lib/zm/client/datasource/datasources_builder.rb +29 -0
- data/lib/zm/client/datasource/datasources_collection.rb +21 -0
- data/lib/zm/client/datasource.rb +7 -0
- data/lib/zm/client/distributionlist/distributionlist.rb +52 -118
- data/lib/zm/client/distributionlist/distributionlist_aces_collection.rb +31 -0
- data/lib/zm/client/distributionlist/distributionlist_aliases_collection.rb +53 -0
- data/lib/zm/client/distributionlist/distributionlist_jsns_builder.rb +82 -0
- data/lib/zm/client/distributionlist/distributionlist_jsns_initializer.rb +32 -0
- data/lib/zm/client/distributionlist/distributionlist_members_collection.rb +47 -0
- data/lib/zm/client/distributionlist/distributionlist_owners_collection.rb +52 -0
- data/lib/zm/client/distributionlist/distributionlists_builder.rb +8 -1
- data/lib/zm/client/distributionlist/distributionlists_collection.rb +8 -9
- data/lib/zm/client/distributionlist/dls_membership_collection.rb +4 -1
- data/lib/zm/client/distributionlist.rb +2 -0
- data/lib/zm/client/document/document.rb +27 -24
- data/lib/zm/client/document/document_jsns_builder.rb +18 -0
- data/lib/zm/client/document/document_jsns_initializer.rb +44 -0
- data/lib/zm/client/document/documents_builder.rb +6 -16
- data/lib/zm/client/document/documents_collection.rb +17 -67
- data/lib/zm/client/document.rb +2 -0
- data/lib/zm/client/domain/domain.rb +39 -55
- data/lib/zm/client/domain/domain_accounts_collection.rb +1 -1
- data/lib/zm/client/domain/domain_distributionlists_collection.rb +13 -0
- data/lib/zm/client/domain/domain_jsns_builder.rb +69 -0
- data/lib/zm/client/domain/domain_jsns_initializer.rb +25 -0
- data/lib/zm/client/domain/domain_resources_collection.rb +13 -0
- data/lib/zm/client/domain/domains_builder.rb +8 -1
- data/lib/zm/client/domain/domains_collection.rb +7 -7
- data/lib/zm/client/domain.rb +4 -0
- data/lib/zm/client/filter_rule.rb +7 -0
- data/lib/zm/client/filter_rules/filter_rule.rb +10 -0
- data/lib/zm/client/filter_rules/filter_rule_jsns_initializer.rb +24 -0
- data/lib/zm/client/filter_rules/filter_rules_builder.rb +21 -0
- data/lib/zm/client/filter_rules/filter_rules_collection.rb +21 -0
- data/lib/zm/client/filter_rules/outgoing_filter_rules_collection.rb +15 -0
- data/lib/zm/client/folder/folder.rb +77 -61
- data/lib/zm/client/folder/folder_grant.rb +34 -14
- data/lib/zm/client/folder/folder_grant_jsns_builder.rb +15 -4
- data/lib/zm/client/folder/folder_grants_collection.rb +36 -2
- data/lib/zm/client/folder/folder_jsns_builder.rb +22 -48
- data/lib/zm/client/folder/folder_jsns_initializer.rb +34 -17
- data/lib/zm/client/folder/folder_retention_policies_collection.rb +2 -3
- data/lib/zm/client/folder/folder_retention_policy.rb +0 -1
- data/lib/zm/client/folder/folders_builder.rb +7 -10
- data/lib/zm/client/folder/folders_collection.rb +5 -2
- data/lib/zm/client/folder/folders_jsns_builder.rb +3 -1
- data/lib/zm/client/folder/mod_document_folder.rb +10 -6
- data/lib/zm/client/folder.rb +1 -1
- data/lib/zm/client/identity/identities_builder.rb +8 -1
- data/lib/zm/client/identity/identities_collection.rb +2 -1
- data/lib/zm/client/identity/identity.rb +34 -42
- data/lib/zm/client/identity/identity_jsns_builder.rb +57 -0
- data/lib/zm/client/identity/identity_jsns_initializer.rb +29 -0
- data/lib/zm/client/identity.rb +3 -1
- data/lib/zm/client/license/license.rb +9 -22
- data/lib/zm/client/license/license_jsns_initializer.rb +20 -0
- data/lib/zm/client/license/licenses_collection.rb +3 -13
- data/lib/zm/client/license.rb +2 -1
- data/lib/zm/client/message/attachments_collection.rb +55 -0
- data/lib/zm/client/message/message.rb +36 -264
- data/lib/zm/client/message/message_flags.rb +107 -0
- data/lib/zm/client/message/message_jsns_builder.rb +85 -0
- data/lib/zm/client/message/message_jsns_initializer.rb +71 -0
- data/lib/zm/client/message/message_recipients.rb +59 -0
- data/lib/zm/client/message/messages_builder.rb +7 -18
- data/lib/zm/client/message/messages_collection.rb +17 -2
- data/lib/zm/client/message.rb +5 -0
- data/lib/zm/client/mountpoint/mountpoint.rb +43 -20
- data/lib/zm/client/mountpoint/mountpoint_jsns_builder.rb +8 -53
- data/lib/zm/client/mountpoint/mountpoint_jsns_initializer.rb +22 -13
- data/lib/zm/client/mountpoint/mountpoints_builder.rb +4 -5
- data/lib/zm/client/mountpoint/mountpoints_collection.rb +1 -2
- data/lib/zm/client/mta_queue/mta_queue.rb +13 -28
- data/lib/zm/client/mta_queue/mta_queue_jsns_builder.rb +41 -0
- data/lib/zm/client/mta_queue/mta_queue_jsns_initializer.rb +23 -0
- data/lib/zm/client/mta_queue/mta_queues_builder.rb +4 -8
- data/lib/zm/client/mta_queue/mta_queues_collection.rb +8 -27
- data/lib/zm/client/mta_queue.rb +2 -0
- data/lib/zm/client/mta_queue_item/mta_queue_item.rb +4 -31
- data/lib/zm/client/mta_queue_item/mta_queue_item_jsns_initializer.rb +33 -0
- data/lib/zm/client/mta_queue_item/mta_queue_items_builder.rb +4 -9
- data/lib/zm/client/mta_queue_item/mta_queue_items_collection.rb +7 -42
- data/lib/zm/client/mta_queue_item.rb +2 -1
- data/lib/zm/client/resource/resource.rb +24 -91
- data/lib/zm/client/resource/resource_jsns_builder.rb +79 -0
- data/lib/zm/client/resource/resource_jsns_initializer.rb +29 -0
- data/lib/zm/client/resource/resources_builder.rb +8 -1
- data/lib/zm/client/resource/resources_collection.rb +9 -7
- data/lib/zm/client/resource.rb +2 -0
- data/lib/zm/client/search_folder/search_folder.rb +38 -16
- data/lib/zm/client/search_folder/search_folder_jsns_builder.rb +38 -19
- data/lib/zm/client/search_folder/search_folder_jsns_initializer.rb +17 -13
- data/lib/zm/client/search_folder/search_folders_builder.rb +0 -1
- data/lib/zm/client/search_folder/search_folders_collection.rb +2 -1
- data/lib/zm/client/server/server.rb +16 -488
- data/lib/zm/client/server/server_jsns_initializer.rb +16 -0
- data/lib/zm/client/server/servers_builder.rb +8 -1
- data/lib/zm/client/server/servers_collection.rb +13 -5
- data/lib/zm/client/server.rb +1 -0
- data/lib/zm/client/share/share.rb +5 -43
- data/lib/zm/client/share/share_jsns_initializer.rb +32 -0
- data/lib/zm/client/share/share_mountpoints_collection.rb +38 -0
- data/lib/zm/client/share/shares_builder.rb +8 -1
- data/lib/zm/client/share/shares_collection.rb +11 -16
- data/lib/zm/client/share.rb +2 -0
- data/lib/zm/client/signature/signature.rb +25 -29
- data/lib/zm/client/signature/signature_jsns_builder.rb +31 -13
- data/lib/zm/client/signature/signature_jsns_initializer.rb +16 -12
- data/lib/zm/client/signature/signatures_builder.rb +1 -2
- data/lib/zm/client/signature/signatures_collection.rb +2 -1
- data/lib/zm/client/signature.rb +1 -1
- data/lib/zm/client/soap_request/account_soap_constants.rb +76 -0
- data/lib/zm/client/soap_request/admin_soap_constants.rb +214 -0
- data/lib/zm/client/soap_request/mail_soap_constants.rb +162 -0
- data/lib/zm/client/soap_request/soap_constants.rb +55 -0
- data/lib/zm/client/soap_request/soap_context.rb +38 -0
- data/lib/zm/client/soap_request/soap_element.rb +90 -0
- data/lib/zm/client/soap_request.rb +8 -0
- data/lib/zm/client/tag/account_object_tags_collection.rb +65 -0
- data/lib/zm/client/tag/tag.rb +34 -22
- data/lib/zm/client/tag/tag_jsns_builder.rb +14 -35
- data/lib/zm/client/tag/tag_jsns_initializer.rb +4 -6
- data/lib/zm/client/tag/tags_builder.rb +0 -1
- data/lib/zm/client/tag/tags_collection.rb +2 -1
- data/lib/zm/client/tag.rb +1 -0
- data/lib/zm/client/task/task.rb +18 -49
- data/lib/zm/client/task/task_jsns_initializer.rb +45 -0
- data/lib/zm/client/task/tasks_builder.rb +6 -16
- data/lib/zm/client/task/tasks_collection.rb +29 -0
- data/lib/zm/client/task.rb +1 -0
- data/lib/zm/client/upload/upload.rb +26 -30
- data/lib/zm/client/version.rb +3 -3
- data/lib/zm/client.rb +4 -1
- data/lib/zm/modules/base.rb +10 -0
- data/lib/zm/modules/belongs_to_folder.rb +37 -0
- data/lib/zm/modules/belongs_to_tag.rb +11 -0
- data/lib/zm/modules/common/zimbra-attrs.json +1 -1
- data/lib/zm/modules/has_soap_admin_connector.rb +12 -0
- data/lib/zm/modules/inspector.rb +24 -0
- data/lib/zm/modules/missing_method_static_collection.rb +13 -0
- data/lib/zm/modules/zm_logger.rb +3 -1
- data/lib/zm/modules/zm_model.rb +4 -2
- data/lib/zm/utils/thread_pool.rb +4 -2
- data/lib/zm-ruby-client.rb +2 -0
- data/zm-ruby-client.gemspec +12 -9
- metadata +93 -34
- data/lib/zm/client/base/account_object.rb +0 -51
- data/lib/zm/client/base/admin_object.rb +0 -51
- data/lib/zm/client/base/folder_object.rb +0 -41
- data/lib/zm/client/config.rb +0 -12
- data/lib/zm/client/data_source.rb +0 -5
- data/lib/zm/modules/common/account_common.rb +0 -71
- data/lib/zm/modules/common/cos_common.rb +0 -463
- data/lib/zm/modules/common/dl_common.rb +0 -38
- data/lib/zm/modules/common/identity_common.rb +0 -19
- data/lib/zm/modules/common/resource_common.rb +0 -59
- data/lib/zm/modules/common/signature_common.rb +0 -16
- data/lib/zm/modules/common/zimbra-attrs.json.bak +0 -1
- data/test/accounts.rb +0 -89
- data/test/ace.rb +0 -50
- data/test/cluster.rb +0 -41
- data/test/cluster_config.rb +0 -30
- data/test/cluster_zimbra_attributes.rb +0 -38
- data/test/coses.rb +0 -26
- data/test/domains.rb +0 -70
- data/test/folder.rb +0 -125
- data/test/folder_grant.rb +0 -51
- data/test/mountpoint.rb +0 -49
- data/test/retention_policies.rb +0 -40
- data/test/search_folder.rb +0 -67
- data/test/signature.rb +0 -53
- data/test/tag.rb +0 -65
- data/test/zimbra_attributes.rb +0 -35
data/lib/zm/client/constant.rb
CHANGED
@@ -6,9 +6,9 @@ module Zm
|
|
6
6
|
DOUBLEPOINT = ' :: '
|
7
7
|
|
8
8
|
module Regex
|
9
|
-
UUID_REGEX =
|
10
|
-
BASEDN_REGEX =
|
11
|
-
SHARED_CONTACT =
|
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 = %
|
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 = %
|
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 = %
|
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 = %
|
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 = %
|
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 = %
|
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::
|
6
|
+
class Contact < Base::Object
|
7
|
+
include BelongsToFolder
|
8
|
+
include BelongsToTag
|
9
|
+
|
7
10
|
GROUP_PATTERN = 'group'
|
8
11
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
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
|
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
|
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
|
51
|
-
|
52
|
-
|
34
|
+
def create!
|
35
|
+
rep = @parent.sacc.invoke(jsns_builder.to_jsns)
|
36
|
+
ContactJsnsInitializer.update(self, rep[:CreateContactResponse][:cn].first)
|
53
37
|
|
54
|
-
|
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
|
61
|
-
@
|
62
|
-
|
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
|
75
|
-
return if
|
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
|
-
|
49
|
+
do_update!(hash)
|
80
50
|
|
81
|
-
|
82
|
-
|
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
|
-
|
91
|
-
rescue StandardError => _
|
92
|
-
@custom_keys.clear
|
93
|
-
nil
|
55
|
+
true
|
94
56
|
end
|
95
57
|
|
96
|
-
def
|
97
|
-
|
58
|
+
def rename!(*args)
|
59
|
+
raise NotImplementedError
|
98
60
|
end
|
99
61
|
|
100
|
-
def
|
101
|
-
|
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
|
-
|
106
|
-
|
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
|
111
|
-
|
112
|
-
super
|
69
|
+
def reload!
|
70
|
+
raise NotImplementedError
|
113
71
|
end
|
114
72
|
|
115
|
-
|
116
|
-
|
117
|
-
|
73
|
+
private
|
74
|
+
|
75
|
+
def do_update!(hash)
|
76
|
+
@parent.sacc.invoke(jsns_builder.to_patch(hash))
|
118
77
|
end
|
119
78
|
|
120
|
-
def
|
121
|
-
@
|
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
|
-
|
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
|
-
|
35
|
-
[@value, @type, @op]
|
36
|
-
end
|
21
|
+
value_int = value.to_i
|
37
22
|
|
38
|
-
|
39
|
-
|
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 &&
|
35
|
+
@type == INTERNAL && @value.is_a?(Integer)
|
44
36
|
end
|
45
37
|
|
46
38
|
def shared?
|
47
|
-
@type == INTERNAL &&
|
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
|
67
|
-
|
68
|
-
|
69
|
-
|
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
|
-
@
|
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
|