zm-ruby-client 0.10.4

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 (147) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +58 -0
  3. data/Gemfile +8 -0
  4. data/LICENSE +674 -0
  5. data/README.md +47 -0
  6. data/SECURITY.md +21 -0
  7. data/lib/zm/client/account/account.rb +335 -0
  8. data/lib/zm/client/account/account_dls_membership_collection.rb +22 -0
  9. data/lib/zm/client/account/account_dls_owner_collection.rb +22 -0
  10. data/lib/zm/client/account/accounts_builder.rb +19 -0
  11. data/lib/zm/client/account/accounts_collection.rb +48 -0
  12. data/lib/zm/client/account.rb +7 -0
  13. data/lib/zm/client/ace/ace.rb +32 -0
  14. data/lib/zm/client/ace/aces_builder.rb +25 -0
  15. data/lib/zm/client/ace/aces_collection.rb +36 -0
  16. data/lib/zm/client/ace.rb +5 -0
  17. data/lib/zm/client/appointment/appointment.rb +143 -0
  18. data/lib/zm/client/appointment/appointment_jsns_builder.rb +125 -0
  19. data/lib/zm/client/appointment/appointment_jsns_initializer.rb +129 -0
  20. data/lib/zm/client/appointment/appointments_builder.rb +33 -0
  21. data/lib/zm/client/appointment/appointments_collection.rb +106 -0
  22. data/lib/zm/client/appointment.rb +7 -0
  23. data/lib/zm/client/backup/backup.rb +59 -0
  24. data/lib/zm/client/backup/backups_builder.rb +26 -0
  25. data/lib/zm/client/backup/backups_collection.rb +22 -0
  26. data/lib/zm/client/backup.rb +5 -0
  27. data/lib/zm/client/base/account_object.rb +17 -0
  28. data/lib/zm/client/base/admin_object.rb +45 -0
  29. data/lib/zm/client/base/object.rb +80 -0
  30. data/lib/zm/client/base/objects_builder.rb +31 -0
  31. data/lib/zm/client/base/objects_collection.rb +135 -0
  32. data/lib/zm/client/base.rb +7 -0
  33. data/lib/zm/client/cluster/cluster.rb +117 -0
  34. data/lib/zm/client/cluster/cluster_config.rb +100 -0
  35. data/lib/zm/client/cluster.rb +4 -0
  36. data/lib/zm/client/common/message.rb +10 -0
  37. data/lib/zm/client/common/recipients.rb +67 -0
  38. data/lib/zm/client/common.rb +4 -0
  39. data/lib/zm/client/config.rb +12 -0
  40. data/lib/zm/client/connector/rest_account.rb +74 -0
  41. data/lib/zm/client/connector/soap_account.rb +562 -0
  42. data/lib/zm/client/connector/soap_admin.rb +512 -0
  43. data/lib/zm/client/connector/soap_base.rb +65 -0
  44. data/lib/zm/client/connector/soap_error.rb +26 -0
  45. data/lib/zm/client/connector/soap_xml_builder.rb +68 -0
  46. data/lib/zm/client/constant.rb +217 -0
  47. data/lib/zm/client/contact/contact.rb +124 -0
  48. data/lib/zm/client/contact/contact_member.rb +73 -0
  49. data/lib/zm/client/contact/contacts_builder.rb +24 -0
  50. data/lib/zm/client/contact/contacts_collection.rb +26 -0
  51. data/lib/zm/client/contact/mod_group_contact.rb +74 -0
  52. data/lib/zm/client/contact.rb +7 -0
  53. data/lib/zm/client/cos/cos.rb +59 -0
  54. data/lib/zm/client/cos/coses_builder.rb +29 -0
  55. data/lib/zm/client/cos/coses_collection.rb +33 -0
  56. data/lib/zm/client/cos.rb +5 -0
  57. data/lib/zm/client/data_source.rb +5 -0
  58. data/lib/zm/client/distributionlist/distributionlist.rb +125 -0
  59. data/lib/zm/client/distributionlist/distributionlists_builder.rb +29 -0
  60. data/lib/zm/client/distributionlist/distributionlists_collection.rb +41 -0
  61. data/lib/zm/client/distributionlist.rb +5 -0
  62. data/lib/zm/client/document/document.rb +47 -0
  63. data/lib/zm/client/document/documents_builder.rb +31 -0
  64. data/lib/zm/client/document/documents_collection.rb +93 -0
  65. data/lib/zm/client/document.rb +5 -0
  66. data/lib/zm/client/domain/domain.rb +74 -0
  67. data/lib/zm/client/domain/domains_builder.rb +32 -0
  68. data/lib/zm/client/domain/domains_collection.rb +36 -0
  69. data/lib/zm/client/domain.rb +5 -0
  70. data/lib/zm/client/folder/folder.rb +215 -0
  71. data/lib/zm/client/folder/folder_grant.rb +58 -0
  72. data/lib/zm/client/folder/folder_retention_policy.rb +48 -0
  73. data/lib/zm/client/folder/folders_builder.rb +58 -0
  74. data/lib/zm/client/folder/folders_collection.rb +70 -0
  75. data/lib/zm/client/folder/mod_document_folder.rb +17 -0
  76. data/lib/zm/client/folder.rb +8 -0
  77. data/lib/zm/client/identity/identities_builder.rb +25 -0
  78. data/lib/zm/client/identity/identities_collection.rb +26 -0
  79. data/lib/zm/client/identity/identity.rb +75 -0
  80. data/lib/zm/client/identity.rb +5 -0
  81. data/lib/zm/client/license/license.rb +29 -0
  82. data/lib/zm/client/license/licenses_collection.rb +28 -0
  83. data/lib/zm/client/license.rb +4 -0
  84. data/lib/zm/client/message/message.rb +225 -0
  85. data/lib/zm/client/message/messages_builder.rb +31 -0
  86. data/lib/zm/client/message/messages_collection.rb +111 -0
  87. data/lib/zm/client/message.rb +5 -0
  88. data/lib/zm/client/mountpoint/mountpoint.rb +95 -0
  89. data/lib/zm/client/mountpoint/mountpoints_builder.rb +38 -0
  90. data/lib/zm/client/mountpoint/mountpoints_collection.rb +61 -0
  91. data/lib/zm/client/mountpoint.rb +5 -0
  92. data/lib/zm/client/mta_queue/mta_queue.rb +60 -0
  93. data/lib/zm/client/mta_queue/mta_queues_builder.rb +26 -0
  94. data/lib/zm/client/mta_queue/mta_queues_collection.rb +95 -0
  95. data/lib/zm/client/mta_queue.rb +5 -0
  96. data/lib/zm/client/mta_queue_item/mta_queue_item.rb +51 -0
  97. data/lib/zm/client/mta_queue_item/mta_queue_items_builder.rb +27 -0
  98. data/lib/zm/client/mta_queue_item/mta_queue_items_collection.rb +99 -0
  99. data/lib/zm/client/mta_queue_item.rb +5 -0
  100. data/lib/zm/client/resource/resource.rb +149 -0
  101. data/lib/zm/client/resource/resources_builder.rb +29 -0
  102. data/lib/zm/client/resource/resources_collection.rb +41 -0
  103. data/lib/zm/client/resource.rb +5 -0
  104. data/lib/zm/client/search_folder/search_folder.rb +63 -0
  105. data/lib/zm/client/search_folder/search_folders_builder.rb +26 -0
  106. data/lib/zm/client/search_folder/search_folders_collection.rb +28 -0
  107. data/lib/zm/client/search_folder.rb +5 -0
  108. data/lib/zm/client/server/server.rb +516 -0
  109. data/lib/zm/client/server/servers_builder.rb +26 -0
  110. data/lib/zm/client/server/servers_collection.rb +37 -0
  111. data/lib/zm/client/server.rb +5 -0
  112. data/lib/zm/client/share/share.rb +60 -0
  113. data/lib/zm/client/share/shares_builder.rb +23 -0
  114. data/lib/zm/client/share/shares_collection.rb +48 -0
  115. data/lib/zm/client/share.rb +5 -0
  116. data/lib/zm/client/signature/signature.rb +62 -0
  117. data/lib/zm/client/signature/signature_jsns_builder.rb +29 -0
  118. data/lib/zm/client/signature/signatures_builder.rb +26 -0
  119. data/lib/zm/client/signature/signatures_collection.rb +28 -0
  120. data/lib/zm/client/signature.rb +6 -0
  121. data/lib/zm/client/tag/tag.rb +45 -0
  122. data/lib/zm/client/tag/tags_builder.rb +25 -0
  123. data/lib/zm/client/tag/tags_collection.rb +26 -0
  124. data/lib/zm/client/tag.rb +5 -0
  125. data/lib/zm/client/task/task.rb +74 -0
  126. data/lib/zm/client/task/tasks_builder.rb +31 -0
  127. data/lib/zm/client/task/tasks_collection.rb +100 -0
  128. data/lib/zm/client/task.rb +5 -0
  129. data/lib/zm/client/upload/upload.rb +154 -0
  130. data/lib/zm/client/upload.rb +3 -0
  131. data/lib/zm/client/version.rb +18 -0
  132. data/lib/zm/client.rb +5 -0
  133. data/lib/zm/modules/common/account_common.rb +71 -0
  134. data/lib/zm/modules/common/cos_common.rb +463 -0
  135. data/lib/zm/modules/common/dl_common.rb +33 -0
  136. data/lib/zm/modules/common/identity_common.rb +19 -0
  137. data/lib/zm/modules/common/resource_common.rb +59 -0
  138. data/lib/zm/modules/common/signature_common.rb +16 -0
  139. data/lib/zm/modules/common/zimbra-attrs.json +1 -0
  140. data/lib/zm/utils/thread_pool.rb +72 -0
  141. data/lib/zm-ruby-client.rb +1 -0
  142. data/test/accounts.rb +62 -0
  143. data/test/cluster_config.rb +30 -0
  144. data/test/coses.rb +26 -0
  145. data/test/domains.rb +62 -0
  146. data/zm-ruby-client.gemspec +24 -0
  147. metadata +243 -0
@@ -0,0 +1,225 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Zm
4
+ module Client
5
+ # class message for account
6
+ class Message < Base::AccountObject
7
+ INSTANCE_VARIABLE_KEYS = %i[id date l su fr]
8
+ attr_accessor *INSTANCE_VARIABLE_KEYS
9
+
10
+ attr_accessor :subject
11
+ attr_reader :recipients, :attachments, :body, :folder
12
+
13
+ def initialize(parent, json = nil)
14
+ @parent = parent
15
+ @recipients = Recipients.new
16
+ @subject = ''
17
+ @body = Body.new
18
+ @attachments = Attachments.new
19
+
20
+ init_from_json(json) if json.is_a?(Hash)
21
+
22
+ yield(self) if block_given?
23
+ end
24
+
25
+ def from
26
+ @from ||= @recipients.find { |r| r.field == Recipient::FROM }
27
+ end
28
+
29
+ def folder=(folder)
30
+ @folder = folder
31
+ @l = folder.id
32
+ end
33
+
34
+ def to_jsns
35
+ {
36
+ attach: @attachments.to_jsns,
37
+ e: @recipients.to_jsns,
38
+ su: { _content: @subject },
39
+ mp: @body.to_jsns
40
+ }
41
+ end
42
+
43
+ def delete!
44
+ msg_action('delete')
45
+ end
46
+
47
+ def move!(folder_id = l)
48
+ msg_action('move', l: folder_id)
49
+ l = folder_id if l != folder_id
50
+ end
51
+
52
+ def unread!
53
+ msg_action('!read')
54
+ end
55
+
56
+ def read!
57
+ msg_action('read')
58
+ end
59
+
60
+ def unflag!
61
+ msg_action('!flag')
62
+ end
63
+
64
+ def flag!
65
+ msg_action('flag')
66
+ end
67
+
68
+ def untag!(tag_name)
69
+ msg_action('!tag', tn: tag_name)
70
+ end
71
+
72
+ def tag!(tag_name)
73
+ msg_action('tag', tn: tag_name)
74
+ end
75
+
76
+ def unspam!
77
+ msg_action('!spam')
78
+ end
79
+
80
+ def spam!
81
+ msg_action('spam')
82
+ end
83
+
84
+ def trash!
85
+ msg_action('trash')
86
+ end
87
+
88
+ def send!
89
+ @parent.sacc.send_msg(@parent.token, to_jsns)
90
+ end
91
+
92
+ def init_from_json(json)
93
+ # puts json
94
+ @id = json[:id]
95
+ @date = Time.at(json[:d]/1000)
96
+ @l = json[:l]
97
+ @su = json[:su]
98
+ @fr = json[:fr]
99
+
100
+ json[:e].each do |e|
101
+ recipient = Recipient.new(e[:t], e[:a], e[:p])
102
+ @recipients.add(recipient)
103
+ end
104
+ end
105
+
106
+ def msg_action(action_name, options = {})
107
+ @parent.sacc.msg_action(@parent.token, action_name, id, options)
108
+ true
109
+ end
110
+
111
+ # content fo an email
112
+ class Body
113
+ attr_accessor :text, :html
114
+
115
+ def text_jsns
116
+ { ct: 'text/plain', content: { _content: @text } }
117
+ end
118
+
119
+ def html_jsns
120
+ { ct: 'text/html', content: { _content: @html } }
121
+ end
122
+
123
+ def to_jsns
124
+ [
125
+ {
126
+ ct: 'multipart/alternative',
127
+ mp: [text_jsns, html_jsns]
128
+ }
129
+ ]
130
+ end
131
+ end
132
+
133
+ # collection attachments
134
+ class Attachments
135
+ def initialize
136
+ @attachments = []
137
+ end
138
+
139
+ def add(attachment)
140
+ return unless attachment.is_a?(Attachment)
141
+
142
+ @attachments.push(attachment)
143
+ end
144
+
145
+ def to_jsns
146
+ @attachments.map(&:to_jsns)
147
+ end
148
+ end
149
+
150
+ # class attachment for email
151
+ class Attachment
152
+ attr_accessor :aid, :part, :mid
153
+
154
+ def initialize
155
+ yield(self) if block_given?
156
+ end
157
+
158
+ def to_jsns
159
+ {
160
+ part: @part,
161
+ mid: @mid,
162
+ aid: @aid
163
+ }.reject { |_, v| v.nil? }
164
+ end
165
+ end
166
+
167
+ # Collection recipients
168
+ class Recipients
169
+ def initialize
170
+ @recipients = []
171
+ end
172
+
173
+ def to_jsns
174
+ @recipients.map(&:to_jsns)
175
+ end
176
+
177
+ def add(recipient)
178
+ return unless recipient.is_a?(Recipient)
179
+
180
+ @recipients.push(recipient)
181
+ end
182
+
183
+ def to
184
+ @recipients.select { |r| r.field == Recipient::TO }
185
+ end
186
+
187
+ def cc
188
+ @recipients.select { |r| r.field == Recipient::CC }
189
+ end
190
+
191
+ def bcc
192
+ @recipients.select { |r| r.field == Recipient::BCC }
193
+ end
194
+
195
+ def from
196
+ @recipients.select { |r| r.field == Recipient::FROM }
197
+ end
198
+ end
199
+
200
+ # Class one recipient for email
201
+ class Recipient
202
+ FROM = :f
203
+ TO = :t
204
+ CC = :c
205
+ BCC = :b
206
+
207
+ attr_accessor :field, :email, :display_name
208
+
209
+ def initialize(field, email, display_name = nil)
210
+ @email = email
211
+ @field = field.to_sym
212
+ @display_name = display_name
213
+ end
214
+
215
+ def to_jsns
216
+ {
217
+ t: @field,
218
+ a: @email,
219
+ p: @display_name
220
+ }.reject { |_, v| v.nil? }
221
+ end
222
+ end
223
+ end
224
+ end
225
+ end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Zm
4
+ module Client
5
+ # class factory [messages]
6
+ class MessagesBuilder < Base::ObjectsBuilder
7
+ def initialize(account, json)
8
+ @account = account
9
+ @json = json
10
+ end
11
+
12
+ def make
13
+ root.map do |s|
14
+ Message.new(@account, s)
15
+ end
16
+ end
17
+
18
+ def ids
19
+ root.map { |s| s[:id] }
20
+ end
21
+
22
+ def root
23
+ root = @json[:Body][:SearchResponse][:m]
24
+ return [] if root.nil?
25
+
26
+ root = [root] unless root.is_a?(Array)
27
+ root
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,111 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Zm
4
+ module Client
5
+ # Collection Messages
6
+ class MessagesCollection < Base::ObjectsCollection
7
+ attr_accessor :more
8
+
9
+ def initialize(parent)
10
+ @parent = parent
11
+ @more = true
12
+ reset_query_params
13
+ end
14
+
15
+
16
+ def find(id)
17
+ rep = @parent.sacc.get_msg(@parent.token, id, { part: 0 })
18
+ entry = rep[:Body][:GetMsgResponse][:m].first
19
+ # puts entry
20
+ msg = Message.new(@parent)
21
+ msg.init_from_json(entry)
22
+ msg
23
+ end
24
+
25
+ def new
26
+ message = Message.new(@parent)
27
+ yield(message) if block_given?
28
+ message
29
+ end
30
+
31
+ def start_at(start_at)
32
+ @start_at = start_at
33
+ self
34
+ end
35
+
36
+ def end_at(end_at)
37
+ @end_at = end_at
38
+ self
39
+ end
40
+
41
+ def folders(folders)
42
+ @folders = folders
43
+ @folder_ids = @folders.map(&:id)
44
+ self
45
+ end
46
+
47
+ def folder_ids(folder_ids)
48
+ @folder_ids = folder_ids
49
+ self
50
+ end
51
+
52
+ def where(query)
53
+ @query = query
54
+ self
55
+ end
56
+
57
+ def ids
58
+ search_builder.ids
59
+ end
60
+
61
+ def all
62
+ build_response
63
+ end
64
+
65
+ private
66
+
67
+ def search_response
68
+ rep = @parent.sacc.search(@parent.token, 'message', @offset, @limit, 'dateDesc', query, build_options)
69
+ @more = rep[:Body][:SearchResponse][:more]
70
+ rep
71
+ end
72
+
73
+ def search_builder
74
+ MessagesBuilder.new(@parent, search_response)
75
+ end
76
+
77
+ def build_response
78
+ messages = search_builder.make
79
+ messages.each { |msg| msg.folder = find_folder(msg) } unless @folders.empty?
80
+ messages
81
+ end
82
+
83
+ def build_options
84
+ {
85
+ recip: 2
86
+ }
87
+ end
88
+
89
+ def query
90
+ return @query unless @query.nil?
91
+
92
+ return nil if @folder_ids.empty?
93
+
94
+ @folder_ids.map { |id| %Q{inid:"#{id}"} }.join(' OR ')
95
+ end
96
+
97
+ def find_folder(message)
98
+ @folders.find { |folder| folder.id == message.l }
99
+ end
100
+
101
+ def reset_query_params
102
+ super
103
+ @start_at = nil
104
+ @end_at = nil
105
+ @query = nil
106
+ @folder_ids = []
107
+ @folders = []
108
+ end
109
+ end
110
+ end
111
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'zm/client/message/message'
4
+ require 'zm/client/message/messages_builder'
5
+ require 'zm/client/message/messages_collection'
@@ -0,0 +1,95 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Zm
4
+ module Client
5
+ # class for account mountpoint
6
+ class MountPoint < Base::AccountObject
7
+ INSTANCE_VARIABLE_KEYS = %i[
8
+ owner rev reminder ms deletable l rid uuid url f broken
9
+ luuid ruuid activesyncdisabled absFolderPath view zid name id
10
+ webOfflineSyncDays color rgb
11
+ ].freeze
12
+
13
+ attr_accessor(*INSTANCE_VARIABLE_KEYS)
14
+
15
+ def concat
16
+ INSTANCE_VARIABLE_KEYS.map { |key| instance_variable_get(arrow_name(key)) }
17
+ end
18
+
19
+ alias parent_id l
20
+
21
+ def initialize(parent, json = nil)
22
+ @parent = parent
23
+ @l = 1
24
+ init_from_json(json) if json.is_a?(Hash)
25
+ yield(self) if block_given?
26
+ end
27
+
28
+ def create!
29
+ rep = @parent.sacc.create_mountpoint(@parent.token, build_create_options)
30
+ init_from_json(rep[:Body][:CreateMountpointResponse][:link].first)
31
+ end
32
+
33
+ def build_create_options
34
+ {
35
+ l: @l,
36
+ name: @name,
37
+ view: @view,
38
+ zid: @zid,
39
+ rid: @rid,
40
+ url: @url,
41
+ color: @color,
42
+ rgb: @rgb,
43
+ f: @f
44
+ }.delete_if { |_, v| v.nil? }
45
+ end
46
+
47
+ def modify!
48
+ update!(build_update_options)
49
+ end
50
+
51
+ def update!(options)
52
+ @parent.sacc.folder_action(@parent.token, 'update', @id, options)
53
+ end
54
+
55
+ def build_update_options
56
+ {
57
+ f: @f,
58
+ name: @name,
59
+ l: @l,
60
+ color: @color,
61
+ rgb: @rgb
62
+ }.delete_if { |_, v| v.nil? }
63
+ end
64
+
65
+ def rename!(new_name)
66
+ @parent.sacc.folder_action(@parent.token, 'rename', @id, name: new_name)
67
+ @name = new_name
68
+ end
69
+
70
+ def move!(folder_id)
71
+ @parent.sacc.folder_action(@parent.token, 'move', @id, l: folder_id)
72
+ @l = folder_id
73
+ end
74
+
75
+ def color!(new_color)
76
+ key = new_color.to_i.zero? ? :rgb : :color
77
+ options = {}
78
+ options[key] = new_color
79
+ @parent.sacc.folder_action(@parent.token, 'color', @id, options)
80
+ instance_variable_set("@#{key}", new_color)
81
+ end
82
+
83
+ def delete!
84
+ @parent.sacc.folder_action(@parent.token, :delete, @id)
85
+ end
86
+
87
+ def init_from_json(json)
88
+ INSTANCE_VARIABLE_KEYS.each do |key|
89
+ var_name = "@#{key}"
90
+ instance_variable_set(var_name, json[key])
91
+ end
92
+ end
93
+ end
94
+ end
95
+ end
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Zm
4
+ module Client
5
+ # class factory [mountpoints]
6
+ class MountPointsBuilder < Base::ObjectsBuilder
7
+ def initialize(account, json)
8
+ @account = account
9
+ @json = json
10
+ @key_link = :link
11
+ @key_folder = :folder
12
+ @list = []
13
+ end
14
+
15
+ def make
16
+ root = @json[:Body][:GetFolderResponse][@key_folder]
17
+
18
+ construct_tree(root)
19
+
20
+ @list
21
+ end
22
+
23
+ def construct_tree(json_folders)
24
+ json_folders.each do |json_folder|
25
+ if json_folder[@key_link].is_a?(Array)
26
+ @list += json_folder[@key_link].map do |json_link|
27
+ MountPoint.new(@account, json_link)
28
+ end
29
+ end
30
+
31
+ next if json_folder[@key_folder].nil? || json_folder[@key_folder].empty?
32
+
33
+ construct_tree(json_folder[@key_folder])
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,61 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Zm
4
+ module Client
5
+ # collection of mountpoints
6
+ class MountPointsCollection < Base::ObjectsCollection
7
+ METHODS_MISSING_LIST = %i[select each map length].to_set.freeze
8
+
9
+ attr_reader :root
10
+
11
+ def initialize(parent)
12
+ @parent = parent
13
+ @root = nil
14
+ reset_query_params
15
+ end
16
+
17
+ def new
18
+ mountpoint = MountPoint.new(@parent)
19
+ yield(mountpoint) if block_given?
20
+ mountpoint
21
+ end
22
+
23
+ def where(view: nil, tr: nil)
24
+ @view = view
25
+ @tr = tr
26
+ @all = nil
27
+ self
28
+ end
29
+
30
+ def all
31
+ @all || all!
32
+ end
33
+
34
+ def all!
35
+ build_response
36
+ end
37
+
38
+ def clear
39
+ @all = nil
40
+ @root = nil
41
+ reset_query_params
42
+ end
43
+
44
+ private
45
+
46
+ def build_response
47
+ @all = MountPointsBuilder.new(@parent, make_query).make
48
+ @all
49
+ end
50
+
51
+ def make_query
52
+ @parent.sacc.get_all_folders(@parent.token, @view, @tr)
53
+ end
54
+
55
+ def reset_query_params
56
+ @view = nil
57
+ @tr = nil
58
+ end
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'zm/client/mountpoint/mountpoint'
4
+ require 'zm/client/mountpoint/mountpoints_builder'
5
+ require 'zm/client/mountpoint/mountpoints_collection'
@@ -0,0 +1,60 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'zm/client/mta_queue_item'
4
+
5
+ module Zm
6
+ module Client
7
+ class MtaQueue < Base::AdminObject
8
+ attr_reader :name, :n
9
+
10
+ alias nb_items n
11
+
12
+ def server
13
+ parent
14
+ end
15
+
16
+ def to_h
17
+ hashmap = Hash[all_instance_variable_keys.map { |key| [key, instance_variable_get(arrow_name(key))] }]
18
+ hashmap.delete_if { |_, v| v.nil? }
19
+ hashmap
20
+ end
21
+
22
+ def to_s
23
+ to_h.to_s
24
+ end
25
+
26
+ def all_instance_variable_keys
27
+ %w[name n]
28
+ end
29
+
30
+ def items
31
+ @items ||= MtaQueueItemsCollection.new self
32
+ end
33
+
34
+ def do_action(action_name, ids)
35
+ sac.mail_queue_action(parent.name, name, action_name, ids)
36
+ end
37
+
38
+ def hold!(ids)
39
+ do_action(Zm::Client::MtaQueueAction::HOLD, ids)
40
+ end
41
+
42
+ def release!(ids)
43
+ do_action(Zm::Client::MtaQueueAction::RELEASE, ids)
44
+ end
45
+
46
+ def delete!(ids)
47
+ do_action(Zm::Client::MtaQueueAction::DELETE, ids)
48
+ end
49
+
50
+ def requeue!(ids)
51
+ do_action(Zm::Client::MtaQueueAction::REQUEUE, ids)
52
+ end
53
+
54
+ def init_from_json(json)
55
+ @name = json[:name]
56
+ @n = json[:n].to_i
57
+ end
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Zm
4
+ module Client
5
+ # class factory [MtaQueue]
6
+ class MtaQueuesBuilder < Base::ObjectsBuilder
7
+ def make
8
+ records = []
9
+ return records if json_items.nil?
10
+
11
+ json_items.each do |entry|
12
+ mta_queue = MtaQueue.new(@parent)
13
+ mta_queue.init_from_json(entry)
14
+ records << mta_queue
15
+ end
16
+ records
17
+ end
18
+
19
+ private
20
+
21
+ def json_items
22
+ @json_items ||= @json[:Body][json_key][:server].first[:queue]
23
+ end
24
+ end
25
+ end
26
+ end