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
@@ -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?