zm-ruby-client 0.18.3 → 2.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (250) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -1
  3. data/Gemfile +2 -2
  4. data/README.md +7 -0
  5. data/lib/zm/client/account/account.rb +31 -319
  6. data/lib/zm/client/account/account_aliases_collection.rb +52 -0
  7. data/lib/zm/client/account/account_dls_membership_collection.rb +4 -1
  8. data/lib/zm/client/account/account_dls_owner_collection.rb +8 -1
  9. data/lib/zm/client/account/account_jsns_builder.rb +77 -0
  10. data/lib/zm/client/account/account_jsns_initializer.rb +9 -24
  11. data/lib/zm/client/account/accounts_builder.rb +0 -1
  12. data/lib/zm/client/account/accounts_collection.rb +32 -8
  13. data/lib/zm/client/account.rb +1 -0
  14. data/lib/zm/client/ace/ace.rb +6 -22
  15. data/lib/zm/client/ace/ace_jsns_builder.rb +15 -16
  16. data/lib/zm/client/ace/ace_jsns_initializer.rb +0 -1
  17. data/lib/zm/client/ace/aces_builder.rb +0 -1
  18. data/lib/zm/client/ace/aces_collection.rb +2 -18
  19. data/lib/zm/client/appointment/appointment.rb +38 -30
  20. data/lib/zm/client/appointment/appointment_jsns_builder.rb +22 -34
  21. data/lib/zm/client/appointment/appointment_jsns_initializer.rb +6 -3
  22. data/lib/zm/client/appointment/appointments_builder.rb +6 -18
  23. data/lib/zm/client/appointment/appointments_collection.rb +25 -4
  24. data/lib/zm/client/backup/backup.rb +4 -32
  25. data/lib/zm/client/backup/backup_jsns_initializer.rb +26 -0
  26. data/lib/zm/client/backup/backups_builder.rb +8 -13
  27. data/lib/zm/client/backup/backups_collection.rb +2 -1
  28. data/lib/zm/client/backup.rb +1 -0
  29. data/lib/zm/client/base/account_search_objects_collection.rb +34 -13
  30. data/lib/zm/client/base/admin_objects_collection.rb +82 -17
  31. data/lib/zm/client/base/base_account_jsns_builder.rb +98 -0
  32. data/lib/zm/client/base/base_jsns_builder.rb +47 -0
  33. data/lib/zm/client/base/base_jsns_initializer.rb +43 -12
  34. data/lib/zm/client/base/ldap_filter.rb +20 -5
  35. data/lib/zm/client/base/mailbox_infos_collection.rb +88 -0
  36. data/lib/zm/client/base/mailbox_object.rb +299 -0
  37. data/lib/zm/client/base/mailbox_prefs_collection.rb +75 -0
  38. data/lib/zm/client/base/object.rb +28 -62
  39. data/lib/zm/client/base/objects_builder.rb +4 -10
  40. data/lib/zm/client/base/objects_collection.rb +13 -10
  41. data/lib/zm/client/base/zimbra_attribute.rb +10 -8
  42. data/lib/zm/client/base/zimbra_attributes_collection.rb +154 -10
  43. data/lib/zm/client/base.rb +5 -5
  44. data/lib/zm/client/cluster/cluster.rb +43 -39
  45. data/lib/zm/client/cluster/cluster_config.rb +5 -5
  46. data/lib/zm/client/common/recipients.rb +3 -3
  47. data/lib/zm/client/common/token_metadata.rb +4 -1
  48. data/lib/zm/client/common/utils.rb +57 -0
  49. data/lib/zm/client/common.rb +2 -1
  50. data/lib/zm/client/connector/rest_account.rb +14 -4
  51. data/lib/zm/client/connector/soap_account.rb +38 -441
  52. data/lib/zm/client/connector/soap_admin.rb +16 -552
  53. data/lib/zm/client/connector/soap_base.rb +25 -5
  54. data/lib/zm/client/connector/soap_error.rb +1 -3
  55. data/lib/zm/client/constant.rb +21 -11
  56. data/lib/zm/client/contact/contact.rb +42 -83
  57. data/lib/zm/client/contact/contact_jsns_builder.rb +60 -0
  58. data/lib/zm/client/contact/contact_jsns_initializer.rb +78 -0
  59. data/lib/zm/client/contact/contact_member.rb +29 -28
  60. data/lib/zm/client/contact/contact_members_collection.rb +44 -0
  61. data/lib/zm/client/contact/contacts_builder.rb +8 -1
  62. data/lib/zm/client/contact/contacts_collection.rb +17 -1
  63. data/lib/zm/client/contact/group_contact_jsns_builder.rb +51 -0
  64. data/lib/zm/client/contact/mod_group_contact.rb +4 -67
  65. data/lib/zm/client/contact.rb +5 -1
  66. data/lib/zm/client/cos/cos.rb +35 -40
  67. data/lib/zm/client/cos/cos_accounts_collection.rb +19 -0
  68. data/lib/zm/client/cos/cos_domains_collection.rb +20 -0
  69. data/lib/zm/client/cos/cos_jsns_builder.rb +72 -0
  70. data/lib/zm/client/cos/cos_jsns_initializer.rb +29 -0
  71. data/lib/zm/client/cos/cos_servers_collection.rb +60 -0
  72. data/lib/zm/client/cos/coses_builder.rb +8 -1
  73. data/lib/zm/client/cos/coses_collection.rb +8 -5
  74. data/lib/zm/client/cos.rb +5 -0
  75. data/lib/zm/client/datasource/datasource.rb +69 -0
  76. data/lib/zm/client/datasource/datasource_jsns_builder.rb +32 -0
  77. data/lib/zm/client/datasource/datasource_jsns_initializer.rb +27 -0
  78. data/lib/zm/client/datasource/datasources_builder.rb +29 -0
  79. data/lib/zm/client/datasource/datasources_collection.rb +21 -0
  80. data/lib/zm/client/datasource.rb +7 -0
  81. data/lib/zm/client/distributionlist/distributionlist.rb +52 -118
  82. data/lib/zm/client/distributionlist/distributionlist_aces_collection.rb +31 -0
  83. data/lib/zm/client/distributionlist/distributionlist_aliases_collection.rb +53 -0
  84. data/lib/zm/client/distributionlist/distributionlist_jsns_builder.rb +82 -0
  85. data/lib/zm/client/distributionlist/distributionlist_jsns_initializer.rb +32 -0
  86. data/lib/zm/client/distributionlist/distributionlist_members_collection.rb +47 -0
  87. data/lib/zm/client/distributionlist/distributionlist_owners_collection.rb +52 -0
  88. data/lib/zm/client/distributionlist/distributionlists_builder.rb +8 -1
  89. data/lib/zm/client/distributionlist/distributionlists_collection.rb +8 -9
  90. data/lib/zm/client/distributionlist/dls_membership_collection.rb +4 -1
  91. data/lib/zm/client/distributionlist.rb +2 -0
  92. data/lib/zm/client/document/document.rb +27 -24
  93. data/lib/zm/client/document/document_jsns_builder.rb +18 -0
  94. data/lib/zm/client/document/document_jsns_initializer.rb +44 -0
  95. data/lib/zm/client/document/documents_builder.rb +6 -16
  96. data/lib/zm/client/document/documents_collection.rb +17 -67
  97. data/lib/zm/client/document.rb +2 -0
  98. data/lib/zm/client/domain/domain.rb +45 -68
  99. data/lib/zm/client/domain/domain_accounts_collection.rb +1 -1
  100. data/lib/zm/client/domain/domain_distributionlists_collection.rb +13 -0
  101. data/lib/zm/client/domain/domain_jsns_builder.rb +69 -0
  102. data/lib/zm/client/domain/domain_jsns_initializer.rb +25 -0
  103. data/lib/zm/client/domain/domain_resources_collection.rb +13 -0
  104. data/lib/zm/client/domain/domains_builder.rb +8 -1
  105. data/lib/zm/client/domain/domains_collection.rb +7 -7
  106. data/lib/zm/client/domain.rb +4 -0
  107. data/lib/zm/client/filter_rule.rb +7 -0
  108. data/lib/zm/client/filter_rules/filter_rule.rb +10 -0
  109. data/lib/zm/client/filter_rules/filter_rule_jsns_initializer.rb +24 -0
  110. data/lib/zm/client/filter_rules/filter_rules_builder.rb +21 -0
  111. data/lib/zm/client/filter_rules/filter_rules_collection.rb +21 -0
  112. data/lib/zm/client/filter_rules/outgoing_filter_rules_collection.rb +15 -0
  113. data/lib/zm/client/folder/folder.rb +77 -61
  114. data/lib/zm/client/folder/folder_grant.rb +34 -14
  115. data/lib/zm/client/folder/folder_grant_jsns_builder.rb +15 -4
  116. data/lib/zm/client/folder/folder_grants_collection.rb +36 -2
  117. data/lib/zm/client/folder/folder_jsns_builder.rb +22 -48
  118. data/lib/zm/client/folder/folder_jsns_initializer.rb +34 -17
  119. data/lib/zm/client/folder/folder_retention_policies_collection.rb +2 -3
  120. data/lib/zm/client/folder/folder_retention_policy.rb +0 -1
  121. data/lib/zm/client/folder/folders_builder.rb +7 -10
  122. data/lib/zm/client/folder/folders_collection.rb +5 -2
  123. data/lib/zm/client/folder/folders_jsns_builder.rb +3 -1
  124. data/lib/zm/client/folder/mod_document_folder.rb +10 -6
  125. data/lib/zm/client/folder.rb +1 -1
  126. data/lib/zm/client/identity/identities_builder.rb +8 -1
  127. data/lib/zm/client/identity/identities_collection.rb +2 -1
  128. data/lib/zm/client/identity/identity.rb +34 -42
  129. data/lib/zm/client/identity/identity_jsns_builder.rb +57 -0
  130. data/lib/zm/client/identity/identity_jsns_initializer.rb +29 -0
  131. data/lib/zm/client/identity.rb +3 -1
  132. data/lib/zm/client/license/license.rb +9 -22
  133. data/lib/zm/client/license/license_jsns_initializer.rb +20 -0
  134. data/lib/zm/client/license/licenses_collection.rb +3 -13
  135. data/lib/zm/client/license.rb +2 -1
  136. data/lib/zm/client/message/attachments_collection.rb +55 -0
  137. data/lib/zm/client/message/message.rb +36 -264
  138. data/lib/zm/client/message/message_flags.rb +107 -0
  139. data/lib/zm/client/message/message_jsns_builder.rb +85 -0
  140. data/lib/zm/client/message/message_jsns_initializer.rb +71 -0
  141. data/lib/zm/client/message/message_recipients.rb +59 -0
  142. data/lib/zm/client/message/messages_builder.rb +7 -18
  143. data/lib/zm/client/message/messages_collection.rb +17 -2
  144. data/lib/zm/client/message.rb +5 -0
  145. data/lib/zm/client/mountpoint/mountpoint.rb +43 -21
  146. data/lib/zm/client/mountpoint/mountpoint_jsns_builder.rb +8 -53
  147. data/lib/zm/client/mountpoint/mountpoint_jsns_initializer.rb +22 -13
  148. data/lib/zm/client/mountpoint/mountpoints_builder.rb +4 -5
  149. data/lib/zm/client/mountpoint/mountpoints_collection.rb +1 -2
  150. data/lib/zm/client/mta_queue/mta_queue.rb +13 -28
  151. data/lib/zm/client/mta_queue/mta_queue_jsns_builder.rb +41 -0
  152. data/lib/zm/client/mta_queue/mta_queue_jsns_initializer.rb +23 -0
  153. data/lib/zm/client/mta_queue/mta_queues_builder.rb +4 -8
  154. data/lib/zm/client/mta_queue/mta_queues_collection.rb +8 -27
  155. data/lib/zm/client/mta_queue.rb +2 -0
  156. data/lib/zm/client/mta_queue_item/mta_queue_item.rb +4 -31
  157. data/lib/zm/client/mta_queue_item/mta_queue_item_jsns_initializer.rb +33 -0
  158. data/lib/zm/client/mta_queue_item/mta_queue_items_builder.rb +4 -9
  159. data/lib/zm/client/mta_queue_item/mta_queue_items_collection.rb +7 -42
  160. data/lib/zm/client/mta_queue_item.rb +2 -1
  161. data/lib/zm/client/resource/resource.rb +24 -91
  162. data/lib/zm/client/resource/resource_jsns_builder.rb +79 -0
  163. data/lib/zm/client/resource/resource_jsns_initializer.rb +29 -0
  164. data/lib/zm/client/resource/resources_builder.rb +8 -1
  165. data/lib/zm/client/resource/resources_collection.rb +9 -7
  166. data/lib/zm/client/resource.rb +2 -0
  167. data/lib/zm/client/search_folder/search_folder.rb +38 -16
  168. data/lib/zm/client/search_folder/search_folder_jsns_builder.rb +38 -19
  169. data/lib/zm/client/search_folder/search_folder_jsns_initializer.rb +17 -13
  170. data/lib/zm/client/search_folder/search_folders_builder.rb +0 -1
  171. data/lib/zm/client/search_folder/search_folders_collection.rb +2 -1
  172. data/lib/zm/client/server/server.rb +16 -488
  173. data/lib/zm/client/server/server_jsns_initializer.rb +16 -0
  174. data/lib/zm/client/server/servers_builder.rb +8 -1
  175. data/lib/zm/client/server/servers_collection.rb +13 -5
  176. data/lib/zm/client/server.rb +1 -0
  177. data/lib/zm/client/share/share.rb +5 -43
  178. data/lib/zm/client/share/share_jsns_initializer.rb +32 -0
  179. data/lib/zm/client/share/share_mountpoints_collection.rb +38 -0
  180. data/lib/zm/client/share/shares_builder.rb +8 -1
  181. data/lib/zm/client/share/shares_collection.rb +11 -16
  182. data/lib/zm/client/share.rb +2 -0
  183. data/lib/zm/client/signature/signature.rb +25 -29
  184. data/lib/zm/client/signature/signature_jsns_builder.rb +31 -13
  185. data/lib/zm/client/signature/signature_jsns_initializer.rb +16 -12
  186. data/lib/zm/client/signature/signatures_builder.rb +1 -2
  187. data/lib/zm/client/signature/signatures_collection.rb +2 -1
  188. data/lib/zm/client/signature.rb +1 -1
  189. data/lib/zm/client/soap_request/account_soap_constants.rb +76 -0
  190. data/lib/zm/client/soap_request/admin_soap_constants.rb +214 -0
  191. data/lib/zm/client/soap_request/mail_soap_constants.rb +162 -0
  192. data/lib/zm/client/soap_request/soap_constants.rb +55 -0
  193. data/lib/zm/client/soap_request/soap_context.rb +38 -0
  194. data/lib/zm/client/soap_request/soap_element.rb +90 -0
  195. data/lib/zm/client/soap_request.rb +8 -0
  196. data/lib/zm/client/tag/account_object_tags_collection.rb +65 -0
  197. data/lib/zm/client/tag/tag.rb +34 -22
  198. data/lib/zm/client/tag/tag_jsns_builder.rb +14 -35
  199. data/lib/zm/client/tag/tag_jsns_initializer.rb +4 -6
  200. data/lib/zm/client/tag/tags_builder.rb +0 -1
  201. data/lib/zm/client/tag/tags_collection.rb +2 -1
  202. data/lib/zm/client/tag.rb +1 -0
  203. data/lib/zm/client/task/task.rb +18 -49
  204. data/lib/zm/client/task/task_jsns_initializer.rb +45 -0
  205. data/lib/zm/client/task/tasks_builder.rb +6 -16
  206. data/lib/zm/client/task/tasks_collection.rb +29 -0
  207. data/lib/zm/client/task.rb +1 -0
  208. data/lib/zm/client/upload/upload.rb +26 -30
  209. data/lib/zm/client/version.rb +3 -3
  210. data/lib/zm/client.rb +4 -1
  211. data/lib/zm/modules/base.rb +10 -0
  212. data/lib/zm/modules/belongs_to_folder.rb +37 -0
  213. data/lib/zm/modules/belongs_to_tag.rb +11 -0
  214. data/lib/zm/modules/common/zimbra-attrs.json +33 -1
  215. data/lib/zm/modules/has_soap_admin_connector.rb +12 -0
  216. data/lib/zm/modules/inspector.rb +24 -0
  217. data/lib/zm/modules/missing_method_static_collection.rb +13 -0
  218. data/lib/zm/modules/zm_logger.rb +3 -1
  219. data/lib/zm/modules/zm_model.rb +4 -2
  220. data/lib/zm/utils/thread_pool.rb +4 -2
  221. data/lib/zm-ruby-client.rb +2 -0
  222. data/zm-ruby-client.gemspec +12 -9
  223. metadata +93 -34
  224. data/lib/zm/client/base/account_object.rb +0 -51
  225. data/lib/zm/client/base/admin_object.rb +0 -51
  226. data/lib/zm/client/base/folder_object.rb +0 -41
  227. data/lib/zm/client/config.rb +0 -12
  228. data/lib/zm/client/data_source.rb +0 -5
  229. data/lib/zm/modules/common/account_common.rb +0 -71
  230. data/lib/zm/modules/common/cos_common.rb +0 -463
  231. data/lib/zm/modules/common/dl_common.rb +0 -38
  232. data/lib/zm/modules/common/identity_common.rb +0 -19
  233. data/lib/zm/modules/common/resource_common.rb +0 -59
  234. data/lib/zm/modules/common/signature_common.rb +0 -16
  235. data/lib/zm/modules/common/zimbra-attrs.json.bak +0 -1
  236. data/test/accounts.rb +0 -89
  237. data/test/ace.rb +0 -50
  238. data/test/cluster.rb +0 -41
  239. data/test/cluster_config.rb +0 -30
  240. data/test/cluster_zimbra_attributes.rb +0 -38
  241. data/test/coses.rb +0 -26
  242. data/test/domains.rb +0 -70
  243. data/test/folder.rb +0 -125
  244. data/test/folder_grant.rb +0 -51
  245. data/test/mountpoint.rb +0 -49
  246. data/test/retention_policies.rb +0 -40
  247. data/test/search_folder.rb +0 -67
  248. data/test/signature.rb +0 -53
  249. data/test/tag.rb +0 -65
  250. data/test/zimbra_attributes.rb +0 -35
@@ -3,33 +3,26 @@
3
3
  module Zm
4
4
  module Client
5
5
  # class for account folder
6
- class Folder < Base::FolderObject
7
- include Zm::Model::AttributeChangeObserver
6
+ class Folder < Base::Object
7
+ include BelongsToFolder
8
+ # include Zm::Model::AttributeChangeObserver
8
9
 
9
- INSTANCE_VARIABLE_KEYS = %i[type id uuid name absFolderPath l url luuid f
10
- view rev ms webOfflineSyncDays activesyncdisabled n s i4ms i4next zid rid
11
- ruuid owner reminder acl itemCount broken deletable color rgb fb].freeze
10
+ attr_accessor :type, :id, :uuid, :name, :absFolderPath, :l, :url, :luuid, :f, :view, :rev, :ms,
11
+ :webOfflineSyncDays, :activesyncdisabled, :n, :s, :i4ms, :i4next, :zid, :rid, :ruuid,
12
+ :owner, :reminder, :acl, :itemCount, :broken, :deletable, :color, :rgb, :fb, :folders,
13
+ :grants, :retention_policies,
14
+ :name, :color, :rgb, :l, :url, :f, :view
12
15
 
13
- attr_reader :type, :id, :uuid, :absFolderPath, :luuid, :rev, :ms, :webOfflineSyncDays, :activesyncdisabled, :n,
14
- :s, :i4ms, :i4next, :zid, :rid, :ruuid, :owner, :reminder, :acl, :itemCount, :broken, :deletable, :fb
15
-
16
- attr_accessor :folders, :grants, :retention_policies
17
- attr_writer :absFolderPath
18
-
19
- define_changed_attributes :name, :color, :rgb, :l, :url, :f, :view
20
-
21
- def all_instance_variable_keys
22
- INSTANCE_VARIABLE_KEYS
23
- end
16
+ # define_changed_attributes :name, :color, :rgb, :l, :url, :f, :view
24
17
 
25
18
  alias nb_messages n
26
19
  alias nb_items n
27
- alias parent_id l
28
20
  alias size s
29
21
 
30
22
  def initialize(parent)
31
23
  super(parent)
32
24
 
25
+ @l = FolderDefault::ROOT[:id]
33
26
  @type = :folder
34
27
  @folders = []
35
28
  @grants = FolderGrantsCollection.new(self)
@@ -37,7 +30,7 @@ module Zm
37
30
 
38
31
  yield(self) if block_given?
39
32
 
40
- extend(DocumentFolder) if view == 'document'
33
+ extend(DocumentFolder) if view == Zm::Client::FolderView::DOCUMENT
41
34
  end
42
35
 
43
36
  def is_immutable?
@@ -49,37 +42,46 @@ module Zm
49
42
  end
50
43
 
51
44
  def create!
52
- rep = @parent.sacc.create_folder(@parent.token, jsns_builder.to_jsns)
53
- json = rep[:Body][:CreateFolderResponse][:folder].first
45
+ rep = @parent.sacc.invoke(jsns_builder.to_jsns)
46
+ json = rep[:CreateFolderResponse][:folder].first
54
47
  FolderJsnsInitializer.update(self, json)
48
+ @id
55
49
  end
56
50
 
57
- def update!(options)
58
- options.delete_if { |k, v| v.nil? || !respond_to?(k) }
59
- return false if options.empty?
51
+ def modify!
52
+ @parent.sacc.invoke(jsns_builder.to_update)
53
+ true
54
+ end
60
55
 
61
- @parent.sacc.folder_action(@parent.token, jsns_builder.to_patch(options))
56
+ def update!(hash)
57
+ return false if hash.delete_if { |k, v| v.nil? || !respond_to?(k) }.empty?
62
58
 
63
- options.each do |k, v|
64
- instance_variable_set("@#{k}", v)
59
+ do_update!(hash)
60
+
61
+ hash.each do |key, value|
62
+ update_attribute(key, value)
65
63
  end
66
64
 
67
65
  true
68
66
  end
69
67
 
70
- # def add_retention_policy!(retention_policies)
71
- # options = if retention_policies.is_a?(Hash)
72
- # retention_policies
73
- # else
74
- # retention_policies.map(&:to_h).reduce({}, :merge)
75
- # end
76
- #
77
- # @parent.sacc.folder_action(@parent.token, 'retentionPolicy', @id, retentionPolicy: options)
78
- # end
68
+ def color!
69
+ # @parent.sacc.invoke(jsns_builder.to_color) if color_changed? || rgb_changed?
70
+ @parent.sacc.invoke(jsns_builder.to_color)
71
+
72
+ true
73
+ end
74
+
75
+ def rename!(new_name)
76
+ return false if new_name == @name
77
+
78
+ @parent.sacc.invoke(jsns_builder.to_rename(new_name))
79
+ @name = new_name
80
+ end
79
81
 
80
82
  def reload!
81
- rep = @parent.sacc.get_folder(@parent.token, jsns_builder.to_find)
82
- json = rep[:Body][:GetFolderResponse][:folder].first
83
+ rep = @parent.sacc.invoke(jsns_builder.to_find)
84
+ json = rep[:GetFolderResponse][:folder].first
83
85
  FolderJsnsInitializer.update(self, json)
84
86
  true
85
87
  end
@@ -89,51 +91,65 @@ module Zm
89
91
  end
90
92
 
91
93
  def empty!
92
- @parent.sacc.folder_action(@parent.token, jsns_builder.to_empty) unless @n.zero?
94
+ return false if empty?
95
+
96
+ @parent.sacc.invoke(jsns_builder.to_empty)
93
97
  @n = 0
94
98
  end
95
99
  alias clear empty!
96
100
 
97
101
  def delete!
98
- return false if is_immutable?
102
+ return false if is_immutable? || @id.nil?
99
103
 
100
- super
104
+ @parent.sacc.invoke(jsns_builder.to_delete)
105
+ @id = nil
101
106
  end
102
107
 
103
- def upload(file_path, fmt = nil, types = nil, resolve = 'replace')
104
- fmt ||= File.extname(file_path)[1..]
105
- uploader = Upload.new(@parent, RestAccountConnector.new)
106
- uploader.send_file(absFolderPath, fmt, types, resolve, file_path)
108
+ def remove_flag!(pattern)
109
+ flags = f.tr(pattern, '')
110
+ update!(f: flags)
107
111
  end
108
112
 
109
- def import(file_path)
110
- uploader = Upload.new(@parent, RestAccountConnector.new)
111
- uploader.send_file(absFolderPath, 'tgz', nil, 'skip', file_path)
113
+ def add_message(eml, d = nil, f = nil, tn = nil)
114
+ m = {
115
+ l: id,
116
+ d: d,
117
+ f: f,
118
+ tn: tn,
119
+ content: { _content: eml }
120
+ }.reject { |_, v| v.nil? }
121
+
122
+ attrs = { m: m }
123
+
124
+ soap_request = SoapElement.mail(SoapMailConstants::ADD_MSG_REQUEST).add_attributes(attrs)
125
+ @parent.sacc.invoke(soap_request)
126
+ end
127
+
128
+ def add_appointments(ics)
129
+ attrs = { l: id, ct: SoapConstants::TEXT_CALENDAR }
130
+ soap_request = SoapElement.mail(SoapMailConstants::IMPORT_APPOINTMENTS_REQUEST).add_attributes(attrs)
131
+ node_content = SoapElement.create(SoapConstants::CONTENT).add_content(ics)
132
+ soap_request.add_node(node_content)
133
+ @parent.sacc.invoke(soap_request).dig(:ImportAppointmentsResponse, :appt)
112
134
  end
113
135
 
114
136
  def download(dest_file_path, fmt = 'tgz')
115
137
  uploader = Upload.new(@parent, RestAccountConnector.new)
116
- # uploader.download_file(absFolderPath, fmt, [view], nil, dest_file_path)
117
138
  uploader.download_folder(@id, fmt, dest_file_path)
118
139
  end
119
140
 
120
- def export(dest_file_path)
121
- h = {
122
- fmt: 'tgz',
123
- emptyname: 'Vide',
124
- charset: 'UTF-8',
125
- auth: 'qp',
126
- zauthtoken: @parent.token,
127
- query: to_query
128
- }
129
-
130
- url_query = absFolderPath + '?' + h.map { |k, v| [k, v].join('=') }.join('&')
131
-
132
- @parent.uploader.download_file_with_url(url_query, dest_file_path)
141
+ def upload(file_path, fmt = nil, types = nil, resolve = 'replace')
142
+ fmt ||= File.extname(file_path)[1..]
143
+ uploader = Upload.new(@parent, RestAccountConnector.new)
144
+ uploader.send_file(absFolderPath, fmt, types, resolve, file_path)
133
145
  end
134
146
 
135
147
  private
136
148
 
149
+ def do_update!(hash)
150
+ @parent.sacc.invoke(jsns_builder.to_patch(hash))
151
+ end
152
+
137
153
  def jsns_builder
138
154
  @jsns_builder ||= FolderJsnsBuilder.new(self)
139
155
  end
@@ -4,6 +4,13 @@ module Zm
4
4
  module Client
5
5
  # class for account folder
6
6
  class FolderGrant
7
+ GT_USER = 'usr'
8
+ GT_GROUP = 'dom'
9
+ GT_DOMAIN = 'grp'
10
+ GT_PUB = 'pub'
11
+ GT_GUEST = 'guest'
12
+ GT_KEY = 'key'
13
+
7
14
  attr_reader :parent, :folder_id
8
15
  attr_accessor :zid, :gt, :perm, :d, :expiry, :key
9
16
 
@@ -22,45 +29,58 @@ module Zm
22
29
  @folder_id = parent.parent.id
23
30
  end
24
31
 
25
- def to_h
26
- h = Hash[instance_variables.reject { |iv| iv == :@parent }.map { |iv| [iv, instance_variable_get(iv)] }]
27
- h.merge!({ :@parent => @parent.class })
28
- h
29
- end
30
-
31
32
  def is_account?
32
- gt == 'usr'
33
+ gt == GT_USER
33
34
  end
34
35
 
35
36
  def is_dom?
36
- gt == 'dom'
37
+ gt == GT_DOMAIN
37
38
  end
38
39
 
39
40
  def is_dl?
40
- gt == 'grp'
41
+ gt == GT_GROUP
41
42
  end
42
43
 
43
44
  def is_public?
44
- gt == 'pub'
45
+ gt == GT_PUBLIC
45
46
  end
46
47
 
47
48
  def is_external?
48
- gt == 'guest'
49
+ gt == GT_GUEST
49
50
  end
50
51
 
51
52
  def is_key?
52
- gt == 'key'
53
+ gt == GT_KEY
53
54
  end
54
55
 
55
56
  def save!
56
- @parent.sacc.folder_action(get_token, jsns_builder.to_create)
57
+ @parent.sacc.invoke(jsns_builder.to_create)
57
58
  end
58
59
 
59
60
  def delete!
60
- @parent.sacc.folder_action(get_token, jsns_builder.to_delete)
61
+ @parent.sacc.invoke(jsns_builder.to_delete)
61
62
  @parent.all.delete(self)
62
63
  end
63
64
 
65
+ def to_s
66
+ inspect
67
+ end
68
+
69
+ def to_h
70
+ Hash[instance_variables_map]
71
+ end
72
+
73
+ def inspect
74
+ keys_str = to_h.map { |k, v| "#{k}: #{v}" }.join(', ')
75
+ "#{self.class}:#{format('0x00%x', (object_id << 1))} #{keys_str}"
76
+ end
77
+
78
+ def instance_variables_map
79
+ keys = instance_variables.dup
80
+ keys.delete(:@parent)
81
+ keys.map { |key| [key, instance_variable_get(key)] }
82
+ end
83
+
64
84
  private
65
85
 
66
86
  def jsns_builder
@@ -4,7 +4,6 @@ module Zm
4
4
  module Client
5
5
  # class for account folder grant jsns builder
6
6
  class FolderGrantJsnsBuilder < Base::BaseJsnsBuilder
7
-
8
7
  def to_jsns
9
8
  grant = {
10
9
  zid: @item.zid,
@@ -15,28 +14,40 @@ module Zm
15
14
  key: @item.key
16
15
  }.delete_if { |_, v| v.nil? }
17
16
 
18
- {
17
+ attrs = {
19
18
  action: {
20
19
  op: :grant,
21
20
  id: @item.folder_id,
22
21
  grant: grant
23
22
  }
24
23
  }
24
+
25
+ SoapElement.mail(SoapMailConstants::FOLDER_ACTION_REQUEST).add_attributes(attrs)
25
26
  end
26
27
 
27
28
  alias to_create to_jsns
28
29
 
29
30
  def to_delete
30
- {
31
+ attrs = {
31
32
  action: {
32
33
  op: '!grant',
33
34
  id: @item.folder_id,
34
- zid: @item.zid,
35
+ zid: delete_zid,
35
36
  gt: @item.gt,
36
37
  perm: @item.perm,
37
38
  d: @item.d
38
39
  }
39
40
  }
41
+
42
+ SoapElement.mail(SoapMailConstants::FOLDER_ACTION_REQUEST).add_attributes(attrs)
43
+ end
44
+
45
+ def delete_zid
46
+ return @item.zid unless @item.zid.nil?
47
+
48
+ return '99999999-9999-9999-9999-999999999999' if @item.gt == 'pub'
49
+
50
+ '00000000-0000-0000-0000-000000000000'
40
51
  end
41
52
  end
42
53
  end
@@ -4,14 +4,37 @@ module Zm
4
4
  module Client
5
5
  # class for folder retention policies collection
6
6
  class FolderGrantsCollection
7
+ include MissingMethodStaticCollection
7
8
 
8
- attr_reader :parent, :all
9
+ attr_reader :parent
9
10
 
10
11
  def initialize(parent)
11
12
  @parent = parent
12
13
  @all = []
13
14
  end
14
15
 
16
+ def new_from_object(item, perm)
17
+ case item
18
+ when Account
19
+ zid = item.id
20
+ gt = FolderGrant::GT_USER
21
+ when Resource
22
+ zid = item.id
23
+ gt = FolderGrant::GT_USER
24
+ when DistributionList
25
+ zid = item.id
26
+ gt = FolderGrant::GT_GROUP
27
+ when Domain
28
+ zid = item.id
29
+ gt = FolderGrant::GT_DOMAIN
30
+ else
31
+ zid = nil
32
+ gt = nil
33
+ end
34
+
35
+ new(zid, gt, perm, nil)
36
+ end
37
+
15
38
  def new(zid, gt, perm, d)
16
39
  FolderGrant.new(self, zid, gt, perm, d)
17
40
  end
@@ -19,6 +42,13 @@ module Zm
19
42
  def create(zid, gt, perm, d)
20
43
  fg = new(zid, gt, perm, d)
21
44
  add(fg)
45
+ fg
46
+ end
47
+
48
+ def create_from_object(item, perm)
49
+ fg = new_from_object(item, perm)
50
+ add(fg)
51
+ fg
22
52
  end
23
53
 
24
54
  def add(fg)
@@ -26,10 +56,14 @@ module Zm
26
56
  end
27
57
 
28
58
  def soap_account_connector
29
- @parent.soap_account_connector
59
+ @parent.parent.soap_account_connector
30
60
  end
31
61
 
32
62
  alias sacc soap_account_connector
63
+
64
+ def to_s
65
+ @all.map(&:to_s)
66
+ end
33
67
  end
34
68
  end
35
69
  end
@@ -3,10 +3,10 @@
3
3
  module Zm
4
4
  module Client
5
5
  # class for account folder jsns builder
6
- class FolderJsnsBuilder < Base::BaseJsnsBuilder
7
-
6
+ class FolderJsnsBuilder < BaseAccountJsnsBuilder
8
7
  def to_find
9
- { folder: { l: @item.id } }
8
+ attrs = { folder: { l: @item.id } }
9
+ SoapElement.mail(SoapMailConstants::GET_FOLDER_REQUEST).add_attributes(attrs)
10
10
  end
11
11
 
12
12
  def to_jsns
@@ -21,7 +21,9 @@ module Zm
21
21
  view: @item.view
22
22
  }.delete_if { |_, v| v.nil? }
23
23
 
24
- { folder: folder }
24
+ attrs = { folder: folder }
25
+
26
+ SoapElement.mail(SoapMailConstants::CREATE_FOLDER_REQUEST).add_attributes(attrs)
25
27
  end
26
28
 
27
29
  alias to_create to_jsns
@@ -45,7 +47,9 @@ module Zm
45
47
  action.delete(:l)
46
48
  end
47
49
 
48
- { action: action }
50
+ attrs = { action: action }
51
+
52
+ SoapElement.mail(SoapMailConstants::FOLDER_ACTION_REQUEST).add_attributes(attrs)
49
53
  end
50
54
 
51
55
  def to_patch(options)
@@ -54,39 +58,23 @@ module Zm
54
58
  id: @item.id
55
59
  }.merge(options)
56
60
 
57
- { action: action }
58
- end
61
+ attrs = { action: action }
59
62
 
60
- def to_rename
61
- action = {
62
- op: :rename,
63
- id: @item.id,
64
- name: @item.name
65
- }
66
-
67
- { action: action }
63
+ SoapElement.mail(SoapMailConstants::FOLDER_ACTION_REQUEST).add_attributes(attrs)
68
64
  end
69
65
 
70
- def to_move
71
- action = {
72
- op: :move,
73
- id: @item.id,
74
- l: @item.l
75
- }
76
-
77
- { action: action }
78
- end
66
+ def to_retentionpolicy
67
+ retentionpolicy = @item.retention_policies.all.map { |rp| retentionpolicy_jsns(rp) }.reduce({}, :merge)
79
68
 
80
- def to_color
81
- action = {
82
- op: :color,
83
- id: @item.id
69
+ attrs = {
70
+ action: {
71
+ op: :retentionpolicy,
72
+ id: @item.id,
73
+ retentionPolicy: retentionpolicy
74
+ }
84
75
  }
85
76
 
86
- action[:rgb] = @item.rgb if @item.rgb_changed?
87
- action[:color] = @item.color if @item.color_changed?
88
-
89
- { action: action }
77
+ SoapElement.mail(SoapMailConstants::FOLDER_ACTION_REQUEST).add_attributes(attrs)
90
78
  end
91
79
 
92
80
  def to_empty
@@ -96,23 +84,9 @@ module Zm
96
84
  recursive: false
97
85
  }
98
86
 
99
- { action: action }
100
- end
101
-
102
- def to_delete
103
- { action: { op: :delete, id: @item.id } }
104
- end
105
-
106
- def to_retentionpolicy
107
- retentionpolicy = @item.retention_policies.all.map { |rp| retentionpolicy_jsns(rp) }.reduce({}, :merge)
87
+ attrs = { action: action }
108
88
 
109
- {
110
- action: {
111
- op: :retentionpolicy,
112
- id: @item.id,
113
- retentionPolicy: retentionpolicy
114
- }
115
- }
89
+ SoapElement.mail(SoapMailConstants::FOLDER_ACTION_REQUEST).add_attributes(attrs)
116
90
  end
117
91
 
118
92
  private
@@ -7,24 +7,47 @@ module Zm
7
7
  class << self
8
8
  def create(parent, json)
9
9
  item = Folder.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
-
14
+ item.type = json[:type]
15
+ item.id = json[:id].to_i
16
+ item.uuid = json[:uuid]
17
+ item.name = json[:name]
18
+ item.absFolderPath = json[:absFolderPath]
19
+ item.l = json[:l].to_i
20
+ item.url = json[:url]
21
+ item.luuid = json[:luuid]
22
+ item.f = json[:f]
23
+ item.view = json[:view]
24
+ item.rev = json[:rev]
25
+ item.ms = json[:ms]
26
+ item.webOfflineSyncDays = json[:webOfflineSyncDays]
27
+ item.activesyncdisabled = json[:activesyncdisabled]
28
+ item.n = json[:n]
29
+ item.s = json[:s]
30
+ item.i4ms = json[:i4ms]
31
+ item.i4next = json[:i4next]
32
+ item.zid = json[:zid]
33
+ item.rid = json[:rid]
34
+ item.ruuid = json[:ruuid]
35
+ item.owner = json[:owner]
36
+ item.reminder = json[:reminder]
37
+ item.acl = json[:acl]
38
+ item.itemCount = json[:itemCount]
39
+ item.broken = json[:broken]
40
+ item.deletable = json[:deletable]
41
+ item.color = json[:color]
42
+ item.rgb = json[:rgb]
43
+ item.fb = json[:fb]
44
+
22
45
  if !json[:acl].nil? && json[:acl][:grant].is_a?(Array)
23
46
  json[:acl][:grant].each do |json|
24
47
  item.grants.create(json[:zid], json[:gt], json[:perm], json[:d])
25
48
  end
26
49
  end
27
-
50
+
28
51
  if json[:retentionPolicy].is_a?(Array)
29
52
  json[:retentionPolicy].first.map do |policy, v|
30
53
  next if v.first[:policy].nil?
@@ -34,14 +57,8 @@ module Zm
34
57
  item.retention_policies.create(policy, lifetime, type)
35
58
  end
36
59
  end
37
-
38
- item
39
- end
40
60
 
41
- def arrow_name(name)
42
- return name if name.to_s.start_with?('@')
43
-
44
- "@#{name}"
61
+ item
45
62
  end
46
63
  end
47
64
  end
@@ -4,8 +4,7 @@ module Zm
4
4
  module Client
5
5
  # class for folder retention policies collection
6
6
  class FolderRetentionPoliciesCollection
7
-
8
- attr_reader :all
7
+ include MissingMethodStaticCollection
9
8
 
10
9
  def initialize(parent)
11
10
  @parent = parent
@@ -26,7 +25,7 @@ module Zm
26
25
  end
27
26
 
28
27
  def save!
29
- @parent.sacc.folder_action(@parent.parent.token, jsns_builder.to_retentionpolicy)
28
+ @parent.sacc.invoke(jsns_builder.to_retentionpolicy)
30
29
  true
31
30
  end
32
31
 
@@ -4,7 +4,6 @@ module Zm
4
4
  module Client
5
5
  # class for account folder retention policy
6
6
  class FolderRetentionPolicy
7
-
8
7
  attr_accessor :type, :policy, :lifetime
9
8
 
10
9
  def initialize(parent, policy, lifetime, type)
@@ -4,16 +4,15 @@ module Zm
4
4
  module Client
5
5
  # class factory [folders]
6
6
  class FoldersBuilder < Base::ObjectsBuilder
7
- def initialize(account, json)
8
- @account = account
9
- @json = json
7
+ def initialize(parent, json)
8
+ super(parent, json)
10
9
  @key = :folder
11
10
  @root_folder = nil
12
11
  @list = []
13
12
  end
14
13
 
15
14
  def ids
16
- root = @json[:Body][:GetFolderResponse][@key]
15
+ root = @json[:GetFolderResponse][@key]
17
16
  construct_tree_ids(root.first[@key])
18
17
  @list
19
18
  end
@@ -26,20 +25,18 @@ module Zm
26
25
  end
27
26
 
28
27
  def make
29
- root = @json[:Body][:GetFolderResponse][@key]
28
+ root = @json[:GetFolderResponse][@key]
30
29
 
31
- @root_folder = FolderJsnsInitializer.create(@account, root.first)
30
+ @root_folder = FolderJsnsInitializer.create(@parent, root.first)
32
31
 
33
- if !root.first[@key].nil? && root.first[@key].any?
34
- construct_tree(@root_folder, root.first[@key])
35
- end
32
+ construct_tree(@root_folder, root.first[@key]) if !root.first[@key].nil? && root.first[@key].any?
36
33
 
37
34
  @root_folder
38
35
  end
39
36
 
40
37
  def construct_tree(parent_folder, json_folders)
41
38
  json_folders.each do |json_folder|
42
- folder = FolderJsnsInitializer.create(@account, json_folder)
39
+ folder = FolderJsnsInitializer.create(@parent, json_folder)
43
40
  parent_folder.folders << folder
44
41
 
45
42
  construct_tree(folder, json_folder[@key]) if !json_folder[@key].nil? && json_folder[@key].any?