zm-ruby-client 0.17.1 → 0.18.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4de72020fc5b06ed81e86eec0c27f10fbbd9d09de6f65d3299f8ed467cb5058f
4
- data.tar.gz: fcc142156bdc55b58c33c66433bf7ca278ff396381514f646b74b6101b26115d
3
+ metadata.gz: a4b4dd19cb4e0dd0107505e94a9d5baae36a993393c8d4c3f4dd6149fbe259ed
4
+ data.tar.gz: daaec8fa6d6c48ef87c6431ce65981737b0e23a1f3879742cd1bb0cffec51445
5
5
  SHA512:
6
- metadata.gz: 2df2ca3bdcc7ee18ebcb865e34d5a8335e2da2eff4191c83261d20ced0510f8434081f0b33ea186af791e81c56ded88b084375eed245277810cc6157282e9ce4
7
- data.tar.gz: dfaa387e98fc19098640927f85d4318119d9c198c8d9e95a991c3d90fe13d1fea0524e26b2fabec1c2d6ac9d25f7dc06f5a9d7fb4105fdf280206584a62e9ae4
6
+ metadata.gz: cc487248c2708e6dde5604da87220f5635d680b7c1d93f4a8a07dbc1780f72a75b0bcdcbb0335c5b0a30fab450c58ecb6ebdf3ce0ca0a68ff0f2bf1870929b1f
7
+ data.tar.gz: 9694b2433f9d9ae61eb0e67ace5a9db23fef736feb17276cb04f8aa91c427705c18844b93afc6e5ee3f704cc5c02f4200f522be2508a9b0e3df73d1bc66ccf30
data/Gemfile CHANGED
@@ -1,9 +1,7 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
- ruby '~> 2.6'
3
+ ruby '>= 2.6'
4
4
 
5
- gem 'addressable', '~> 2.6'
6
- gem 'curb', '~> 0.9.8'
7
- gem 'nokogiri', '~>1.10.1'
8
- gem 'gyoku', '~>1.3.1'
9
- gem 'version_sorter'
5
+ gem 'addressable', '~> 2.8'
6
+ gem 'curb', '~> 1.0'
7
+ gem 'version_sorter', '~>2.3'
@@ -2,21 +2,15 @@
2
2
 
3
3
  require_relative 'soap_base'
4
4
  require_relative 'soap_error'
5
- require 'gyoku'
6
-
7
- # include OpenSSL
8
- # include Digest
9
5
 
10
6
  module Zm
11
7
  module Client
12
8
  class SoapAccountConnector < SoapBaseConnector
13
-
14
- # SOAP_PATH = '/service/soap/'
15
9
  MAILSPACE = 'urn:zimbraMail'
16
10
  ACCOUNTSPACE = 'urn:zimbraAccount'
17
- A_NODE_PROC = lambda { |n| { n: n.first, _content: n.last } }
18
- A_NODE_PROC_NAME = lambda { |n| { name: n.first, _content: n.last } }
19
- A_NODE_PROC_ARROW_NAME = lambda { |n| { :@name => n.first, content!: n.last } }
11
+ A_NODE_PROC = ->(n) { { n: n.first, _content: n.last } }
12
+ A_NODE_PROC_NAME = ->(n) { { name: n.first, _content: n.last } }
13
+ A_NODE_PROC_ARROW_NAME = ->(n) { { :@name => n.first, content!: n.last } }
20
14
 
21
15
  def initialize(scheme, host, port)
22
16
  super(scheme, host, port, '/service/soap/')
@@ -322,26 +316,20 @@ module Zm
322
316
  curl_request(body)
323
317
  end
324
318
 
325
- def create_identity(token, name, attrs = [])
319
+ def create_identity(token, name, attrs = {})
326
320
  soap_name = :CreateIdentityRequest
327
- req = { identity: { :@name => name, a: attrs.to_a.map(&A_NODE_PROC_ARROW_NAME) } }
328
- body = init_hash_arrow_request(token, soap_name, ACCOUNTSPACE)
329
- body[:Envelope][:Body][soap_name].merge!(req)
330
- body_xml = Gyoku.xml(body, { :key_converter => :none })
331
- # puts body_xml
332
- # todo ne fonctionne pas en JS !
333
- curl_xml(body_xml)
321
+ req = { identity: { name: name, _attrs: attrs } }
322
+ body = init_hash_request(token, soap_name, ACCOUNTSPACE)
323
+ body[:Body][soap_name].merge!(req)
324
+ curl_request(body)
334
325
  end
335
326
 
336
- def modify_identity(token, id, attrs = [])
327
+ def modify_identity(token, id, attrs = {})
337
328
  soap_name = :ModifyIdentityRequest
338
- req = { identity: { :@id => id, a: attrs.to_a.map(&A_NODE_PROC_ARROW_NAME) } }
339
- body = init_hash_arrow_request(token, soap_name, ACCOUNTSPACE)
340
- body[:Envelope][:Body][soap_name].merge!(req)
341
- body_xml = Gyoku.xml(body, { :key_converter => :none })
342
- # puts body_xml
343
- # todo ne fonctionne pas en JS !
344
- curl_xml(body_xml)
329
+ req = { identity: { id: id, _attrs: attrs } }
330
+ body = init_hash_request(token, soap_name, ACCOUNTSPACE)
331
+ body[:Body][soap_name].merge!(req)
332
+ curl_request(body)
345
333
  end
346
334
 
347
335
  def delete_identity(token, id)
@@ -362,18 +350,6 @@ module Zm
362
350
  curl_request(body)
363
351
  end
364
352
 
365
- def modify_prefs(token, prefs)
366
- soap_name = :ModifyPrefsRequest
367
- req = { pref: prefs.map { |pref, value| { name: pref, _content: value } } }
368
- body = init_hash_request(token, soap_name, ACCOUNTSPACE)
369
- body[:Body][soap_name].merge!(req) if req.any?
370
- #puts body
371
- #curl_request(body)
372
- #puts SoapXmlBuilder.new(body).to_xml
373
- # todo ne fonctionne pas en JS !
374
- curl_xml(SoapXmlBuilder.new(body).to_xml)
375
- end
376
-
377
353
  def get_filter_rules(token)
378
354
  soap_name = :GetFilterRulesRequest
379
355
  body = init_hash_request(token, soap_name)
@@ -481,26 +457,6 @@ module Zm
481
457
  }
482
458
  }.merge(hash_header(token))
483
459
  end
484
-
485
- def init_hash_arrow_request(token, soap_name, namespace = MAILSPACE)
486
- { Envelope: {
487
- :@xmlns => 'http://schemas.xmlsoap.org/soap/envelope/',
488
- '@xmlns:urn' => 'urn:zimbra',
489
- Header: {
490
- context: {
491
- authToken: token,
492
- :@xmlns => BASESPACE,
493
- format: {
494
- :@type => 'js'
495
- }
496
- }
497
- },
498
- Body: {
499
- soap_name => { :@xmlns => namespace }
500
- }
501
- }
502
- }
503
- end
504
460
  end
505
461
  end
506
462
  end
@@ -2,15 +2,12 @@
2
2
 
3
3
  require_relative 'soap_base'
4
4
  require_relative 'soap_error'
5
- require_relative 'soap_xml_builder'
6
5
 
7
6
  module Zm
8
7
  module Client
9
8
  class SoapAdminConnector < SoapBaseConnector
10
-
11
- # SOAP_PATH = '/service/admin/soap/'
12
9
  ADMINSPACE = 'urn:zimbraAdmin'
13
- A_NODE_PROC = lambda { |n| { n: n.first, _content: n.last } }
10
+ A_NODE_PROC = ->(n) { { n: n.first, _content: n.last } }
14
11
 
15
12
  attr_accessor :token
16
13
 
@@ -45,7 +42,7 @@ module Zm
45
42
  def count_object(type)
46
43
  soap_name = :CountObjectsRequest
47
44
  body = init_hash_request(soap_name)
48
- req = { type: type}
45
+ req = { type: type }
49
46
  body[:Body][soap_name].merge!(req)
50
47
  curl_request(body)
51
48
  end
@@ -88,7 +85,7 @@ module Zm
88
85
  curl_request(body)
89
86
  end
90
87
 
91
- def create_data_source(name, account_id, type, attrs = { })
88
+ def create_data_source(name, account_id, type, attrs = {})
92
89
  req = {
93
90
  id: account_id,
94
91
  dataSource: {
@@ -139,22 +136,28 @@ module Zm
139
136
  curl_request(body)
140
137
  end
141
138
 
142
- def create_cos(name, attrs = nil)
143
- req = { name: name }
139
+ def create_cos(name, attrs = [])
140
+ req = { name: { _content: name } }
141
+ req[:a] = attrs.map do |i|
142
+ if i.last.is_a?(Array)
143
+ i.last.map do |j|
144
+ [i.first, j]
145
+ end
146
+ else
147
+ [i]
148
+ end
149
+ end.flatten(1).map(&A_NODE_PROC)
150
+
144
151
  body = init_hash_request(:CreateCosRequest)
145
152
  body[:Body][:CreateCosRequest].merge!(req)
146
- # a: attrs.to_a.map(&A_NODE_PROC)
147
- # a: attrs.to_a.map { |n| { n: n.first, _content: n.last } }
148
- # puts SoapXmlBuilder.new(body).to_xml
149
- # todo ne fonctionne pas !
150
- curl_xml(SoapXmlBuilder.new(body).to_xml)
153
+ curl_request(body)
151
154
  end
152
155
 
153
- def modify_cos(id, attrs = nil)
156
+ def modify_cos(id, _attrs = nil)
154
157
  # req = { _jsns: ADMINSPACE, id: id, a: attrs.to_a.map{ |n| { n: n.first, _content: n.last } } }
155
158
  req = { _jsns: ADMINSPACE, id: id }
156
159
  body = { Body: { ModifyCosRequest: req } }.merge(hash_header(@token))
157
- # todo ne fonctionne pas !
160
+ # TODO: ne fonctionne pas !
158
161
  # peut-être seul la version xml fonctionne. Il faudrait créer une fonction qui converti le json en xml
159
162
  curl_request(body)
160
163
  end
@@ -162,7 +165,15 @@ module Zm
162
165
  def create_account(name, password = nil, attrs = [])
163
166
  soap_name = :CreateAccountRequest
164
167
  req = { name: name, password: password }.reject { |_, v| v.nil? }
165
- req[:a] = attrs.map { |i| i.last.is_a?(Array) ? i.last.map{|j|[i.first, j]} : [i] }.flatten(1).map(&A_NODE_PROC)
168
+ req[:a] = attrs.map do |i|
169
+ if i.last.is_a?(Array)
170
+ i.last.map do |j|
171
+ [i.first, j]
172
+ end
173
+ else
174
+ [i]
175
+ end
176
+ end.flatten(1).map(&A_NODE_PROC)
166
177
  # req[:a] = attrs.map{|i|i.last.is_a?(Array) ? i.last.map{|j|[i.first, j]} : [i]}.flatten(1).map { |n| { n: n.first, _content: n.last } }
167
178
  body = init_hash_request(soap_name)
168
179
  body[:Body][soap_name].merge!(req)
@@ -173,7 +184,15 @@ module Zm
173
184
  soap_name = :CreateCalendarResourceRequest
174
185
  req = { name: name, password: password }
175
186
  req.reject! { |_, v| v.nil? }
176
- req[:a] = attrs.map { |i| i.last.is_a?(Array) ? i.last.map{|j|[i.first, j]} : [i] }.flatten(1).map(&A_NODE_PROC)
187
+ req[:a] = attrs.map do |i|
188
+ if i.last.is_a?(Array)
189
+ i.last.map do |j|
190
+ [i.first, j]
191
+ end
192
+ else
193
+ [i]
194
+ end
195
+ end.flatten(1).map(&A_NODE_PROC)
177
196
  body = init_hash_request(soap_name)
178
197
  body[:Body][soap_name].merge!(req)
179
198
  curl_request(body)
@@ -182,7 +201,15 @@ module Zm
182
201
  def create_distribution_list(name, attrs = [])
183
202
  soap_name = :CreateDistributionListRequest
184
203
  req = { name: name }
185
- req[:a] = attrs.map { |i| i.last.is_a?(Array) ? i.last.map{|j|[i.first, j]} : [i] }.flatten(1).map(&A_NODE_PROC)
204
+ req[:a] = attrs.map do |i|
205
+ if i.last.is_a?(Array)
206
+ i.last.map do |j|
207
+ [i.first, j]
208
+ end
209
+ else
210
+ [i]
211
+ end
212
+ end.flatten(1).map(&A_NODE_PROC)
186
213
  body = init_hash_request(soap_name)
187
214
  body[:Body][soap_name].merge!(req)
188
215
  curl_request(body)
@@ -210,14 +237,6 @@ module Zm
210
237
  curl_request(body)
211
238
  end
212
239
 
213
- def set_password(id, new_password)
214
- soap_name = :SetPasswordRequest
215
- req = { id: id, newPassword: new_password }
216
- body = init_hash_request(soap_name)
217
- body[:Body][soap_name].merge!(req)
218
- curl_request(body)
219
- end
220
-
221
240
  def add_account_alias(id, email)
222
241
  generic_alias(:AddAccountAliasRequest, id, email)
223
242
  end
@@ -226,7 +245,6 @@ module Zm
226
245
  generic_alias(:RemoveAccountAliasRequest, id, email)
227
246
  end
228
247
 
229
-
230
248
  def rename_account(id, email)
231
249
  generic_rename(:RenameAccountRequest, id, email)
232
250
  end
@@ -240,7 +258,7 @@ module Zm
240
258
  end
241
259
 
242
260
  def generic_members(soap_name, id, emails)
243
- req = { id: id, dlm: emails.map { |email| {_content: email} } }
261
+ req = { id: id, dlm: emails.map { |email| { _content: email } } }
244
262
  body = init_hash_request(soap_name)
245
263
  body[:Body][soap_name].merge!(req)
246
264
  curl_request(body)
@@ -371,8 +389,8 @@ module Zm
371
389
  curl_request(body)
372
390
  end
373
391
 
374
- def search_directory(query = nil, maxResults = nil, limit = nil, offset = nil, domain = nil, applyCos = nil, applyConfig = nil, sortBy = nil, types = nil, sortAscending = nil, countOnly = nil, attrs = nil)
375
-
392
+ def search_directory(query = nil, maxResults = nil, limit = nil, offset = nil, domain = nil, applyCos = nil,
393
+ applyConfig = nil, sortBy = nil, types = nil, sortAscending = nil, countOnly = nil, attrs = nil)
376
394
  # Désactivé car moins performant !
377
395
  # req = Hash[method(__method__).parameters.map{ |p|[p.last, (eval p.last.to_s)] }].select!{ |k,v|!v.nil? }
378
396
 
@@ -400,7 +418,8 @@ module Zm
400
418
  curl_request(body)
401
419
  end
402
420
 
403
- def get_quota_usage(domain = nil, allServers = nil, limit = nil, offset = nil, sortBy = nil, sortAscending = nil, refresh = nil, target_server_id = nil)
421
+ def get_quota_usage(domain = nil, allServers = nil, limit = nil, offset = nil, sortBy = nil, sortAscending = nil,
422
+ refresh = nil, target_server_id = nil)
404
423
  soap_name = :GetQuotaUsageRequest
405
424
  req = {
406
425
  domain: domain,
@@ -421,9 +440,9 @@ module Zm
421
440
  def get_mailbox(id)
422
441
  soap_name = :GetMailboxRequest
423
442
  req = {
424
- mbox: {
425
- id: id
426
- }
443
+ mbox: {
444
+ id: id
445
+ }
427
446
  }
428
447
  body = init_hash_request(soap_name)
429
448
  body[:Body][soap_name].merge!(req)
@@ -504,7 +523,8 @@ module Zm
504
523
  soap_name = :MailQueueActionRequest
505
524
  value = [value] unless value.is_a?(Array)
506
525
  body = init_hash_request(soap_name)
507
- req = { server: { name: server_name, queue: { name: queue_name, action: { op: op, by: by, _content: value.join(',') } } } }
526
+ req = { server: { name: server_name,
527
+ queue: { name: queue_name, action: { op: op, by: by, _content: value.join(',') } } } }
508
528
  body[:Body][soap_name].merge!(req)
509
529
  curl_request(body)
510
530
  end
@@ -515,7 +535,6 @@ module Zm
515
535
  req = { query: {} }
516
536
  body[:Body][soap_name].merge!(req)
517
537
  curl_request(body)
518
- # curl_xml(SoapXmlBuilder.new(body).to_xml)
519
538
  end
520
539
 
521
540
  def set_password(id, new_password)
@@ -54,18 +54,10 @@ module Zm
54
54
  soapbody
55
55
  end
56
56
 
57
- def curl_xml(xml, error_handler = SoapError)
58
- logger.debug xml
59
- @curl.http_post(xml)
60
-
61
- soapbody = JSON.parse(@curl.body_str, symbolize_names: true)
62
- raise(error_handler, soapbody) if @curl.status.to_i >= 400
63
-
64
- soapbody
65
- end
66
-
67
57
  def hash_header(token, target_server = nil)
68
- context = { authToken: token, userAgent: { name: :zmsoap }, targetServer: target_server }.delete_if { |_, v| v.nil? }
58
+ context = { authToken: token, userAgent: { name: :zmsoap }, targetServer: target_server }.delete_if do |_, v|
59
+ v.nil?
60
+ end
69
61
  { Header: { context: context, _jsns: BASESPACE } }
70
62
  end
71
63
  end
@@ -39,7 +39,8 @@ module Zm
39
39
  end
40
40
 
41
41
  def create!
42
- sac.create_cos(name, instance_variables_array(attrs_write))
42
+ rep = sac.create_cos(name, instance_variables_array(attrs_write))
43
+ @id = rep[:Body][:CreateCosResponse][:cos].first[:id]
43
44
  end
44
45
 
45
46
  def servers
@@ -47,7 +48,7 @@ module Zm
47
48
  end
48
49
 
49
50
  def accounts
50
- # todo sélectionner tous les comptes qui ont zimbraCOSID=self.id
51
+ # TODO: sélectionner tous les comptes qui ont zimbraCOSID=self.id
51
52
  end
52
53
 
53
54
  private
@@ -4,18 +4,17 @@ module Zm
4
4
  module Client
5
5
  # class account identity
6
6
  class Identity < Base::AccountObject
7
-
8
7
  INSTANCE_VARIABLE_KEYS = %i[id name zimbraPrefIdentityName zimbraPrefFromDisplay zimbraPrefFromAddress
9
- zimbraPrefFromAddressType zimbraPrefReplyToEnabled zimbraPrefReplyToDisplay zimbraPrefReplyToAddress
10
- zimbraPrefDefaultSignatureId zimbraPrefForwardReplySignatureId zimbraPrefWhenSentToEnabled
11
- zimbraPrefWhenInFoldersEnabled zimbraPrefWhenSentToAddresses]
8
+ zimbraPrefFromAddressType zimbraPrefReplyToEnabled zimbraPrefReplyToDisplay zimbraPrefReplyToAddress
9
+ zimbraPrefDefaultSignatureId zimbraPrefForwardReplySignatureId zimbraPrefWhenSentToEnabled
10
+ zimbraPrefWhenInFoldersEnabled zimbraPrefWhenSentToAddresses].freeze
12
11
 
13
12
  ATTRS_WRITE = %i[zimbraPrefIdentityName zimbraPrefFromDisplay zimbraPrefFromAddress
14
- zimbraPrefFromAddressType zimbraPrefReplyToEnabled zimbraPrefReplyToDisplay zimbraPrefReplyToAddress
15
- zimbraPrefDefaultSignatureId zimbraPrefForwardReplySignatureId zimbraPrefWhenSentToEnabled
16
- zimbraPrefWhenInFoldersEnabled zimbraPrefWhenSentToAddresses]
13
+ zimbraPrefFromAddressType zimbraPrefReplyToEnabled zimbraPrefReplyToDisplay zimbraPrefReplyToAddress
14
+ zimbraPrefDefaultSignatureId zimbraPrefForwardReplySignatureId zimbraPrefWhenSentToEnabled
15
+ zimbraPrefWhenInFoldersEnabled zimbraPrefWhenSentToAddresses].freeze
17
16
 
18
- attr_accessor *INSTANCE_VARIABLE_KEYS
17
+ attr_accessor(*INSTANCE_VARIABLE_KEYS)
19
18
 
20
19
  def all_instance_variable_keys
21
20
  INSTANCE_VARIABLE_KEYS
@@ -33,7 +32,7 @@ module Zm
33
32
  end
34
33
 
35
34
  def create!
36
- rep = @parent.sacc.create_identity(@parent.token, name, instance_variables_array(ATTRS_WRITE))
35
+ rep = @parent.sacc.create_identity(@parent.token, name, Hash[instance_variables_array(ATTRS_WRITE)])
37
36
  init_from_json(rep[:Body][:CreateIdentityResponse][:identity].first)
38
37
  end
39
38
 
@@ -44,9 +43,9 @@ module Zm
44
43
  arrow_attr_sym = "@#{k}".to_sym
45
44
 
46
45
  if v.respond_to?(:empty?) && v.empty?
47
- self.remove_instance_variable(arrow_attr_sym) if self.instance_variable_get(arrow_attr_sym)
46
+ remove_instance_variable(arrow_attr_sym) if instance_variable_get(arrow_attr_sym)
48
47
  else
49
- self.instance_variable_set(arrow_attr_sym, v)
48
+ instance_variable_set(arrow_attr_sym, v)
50
49
  end
51
50
  end
52
51
  end
@@ -60,12 +59,11 @@ module Zm
60
59
  super
61
60
  end
62
61
 
63
- def rename!(new_name)
64
- end
62
+ def rename!(new_name); end
65
63
 
66
64
  def clone
67
65
  new_identity = super do |obj|
68
- [:@zimbraPrefDefaultSignatureId, :@zimbraPrefForwardReplySignatureId].each do |arrow_key|
66
+ %i[@zimbraPrefDefaultSignatureId @zimbraPrefForwardReplySignatureId].each do |arrow_key|
69
67
  obj.remove_instance_variable(arrow_key) if obj.instance_variable_get(arrow_key)
70
68
  end
71
69
  end
@@ -9,8 +9,8 @@ module Zm
9
9
 
10
10
  module VERSION
11
11
  MAJOR = 0
12
- MINOR = 17
13
- TINY = 1
12
+ MINOR = 18
13
+ TINY = 0
14
14
 
15
15
  STRING = [MAJOR, MINOR, TINY].compact.join('.')
16
16
  end
@@ -1,25 +1,29 @@
1
1
  # frozen_string_literal: true
2
- lib = File.expand_path('../lib/', __FILE__)
3
- $:.unshift lib unless $:.include?(lib)
2
+
3
+ lib = File.expand_path('lib', __dir__)
4
+ $LOAD_PATH.unshift lib unless $LOAD_PATH.include?(lib)
4
5
 
5
6
  require './lib/zm-ruby-client'
6
7
 
7
8
  Gem::Specification.new do |s|
9
+ s.platform = Gem::Platform::RUBY
8
10
  s.name = 'zm-ruby-client'
9
- s.version = Zm::Client::gem_version.to_s
11
+ s.version = Zm::Client.gem_version.to_s
10
12
  s.date = `date '+%Y-%m-%d'`
11
13
  s.summary = 'zm-ruby-client'
12
14
  s.description = 'Zimbra Soap Librairy using SOAP Json interface'
15
+
16
+ s.required_ruby_version = '>= 2.6'
17
+ s.license = 'GPL-3.0'
18
+
13
19
  s.authors = ['Maxime Désécot']
14
20
  s.email = 'maxime.desecot@gmail.com'
15
- s.files = `git ls-files`.split("\n")
16
21
  s.homepage = 'https://github.com/RaoH37/zm-ruby-client'
22
+
23
+ s.files = `git ls-files`.split("\n")
17
24
  s.require_paths = ['lib']
18
- s.license = 'GPL-3.0'
19
25
 
20
- s.add_dependency('addressable', ['~> 2.6'])
21
- s.add_dependency('curb', ['~> 0.9.7'])
22
- s.add_dependency('nokogiri', ['~> 1.10.1'])
23
- s.add_dependency('gyoku', ['~> 1.3.1'])
26
+ s.add_dependency('addressable', ['~> 2.8'])
27
+ s.add_dependency('curb', ['~> 1.0'])
24
28
  s.add_dependency('version_sorter', ['~> 2.3.0'])
25
- end
29
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zm-ruby-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.17.1
4
+ version: 0.18.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Maxime Désécot
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-03-31 00:00:00.000000000 Z
11
+ date: 2023-04-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: addressable
@@ -16,56 +16,28 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '2.6'
19
+ version: '2.8'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '2.6'
26
+ version: '2.8'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: curb
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 0.9.7
33
+ version: '1.0'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 0.9.7
41
- - !ruby/object:Gem::Dependency
42
- name: nokogiri
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - "~>"
46
- - !ruby/object:Gem::Version
47
- version: 1.10.1
48
- type: :runtime
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - "~>"
53
- - !ruby/object:Gem::Version
54
- version: 1.10.1
55
- - !ruby/object:Gem::Dependency
56
- name: gyoku
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - "~>"
60
- - !ruby/object:Gem::Version
61
- version: 1.3.1
62
- type: :runtime
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - "~>"
67
- - !ruby/object:Gem::Version
68
- version: 1.3.1
40
+ version: '1.0'
69
41
  - !ruby/object:Gem::Dependency
70
42
  name: version_sorter
71
43
  requirement: !ruby/object:Gem::Requirement
@@ -144,7 +116,6 @@ files:
144
116
  - lib/zm/client/connector/soap_admin.rb
145
117
  - lib/zm/client/connector/soap_base.rb
146
118
  - lib/zm/client/connector/soap_error.rb
147
- - lib/zm/client/connector/soap_xml_builder.rb
148
119
  - lib/zm/client/constant.rb
149
120
  - lib/zm/client/contact.rb
150
121
  - lib/zm/client/contact/contact.rb
@@ -286,14 +257,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
286
257
  requirements:
287
258
  - - ">="
288
259
  - !ruby/object:Gem::Version
289
- version: '0'
260
+ version: '2.6'
290
261
  required_rubygems_version: !ruby/object:Gem::Requirement
291
262
  requirements:
292
263
  - - ">="
293
264
  - !ruby/object:Gem::Version
294
265
  version: '0'
295
266
  requirements: []
296
- rubygems_version: 3.3.22
267
+ rubygems_version: 3.4.10
297
268
  signing_key:
298
269
  specification_version: 4
299
270
  summary: zm-ruby-client
@@ -1,68 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'nokogiri'
4
- # https://stackoverflow.com/questions/11933451/converting-nested-hash-into-xml-using-nokogiri
5
-
6
- class SoapXmlBuilder
7
- ATTRS_NODE_PROC = ->(k, _) { k.to_s.start_with?('_') }
8
-
9
- def initialize(hash)
10
- @hash = hash
11
- end
12
-
13
- def to_xml
14
- builder = Nokogiri::XML::Builder.new do |xml|
15
- xml.Envelope('xmlns' => 'http://schemas.xmlsoap.org/soap/envelope/', 'xmlns:urn' => 'urn:zimbra') do
16
- header(xml)
17
- body(xml)
18
- end
19
- end
20
- builder.to_xml
21
- end
22
-
23
- private
24
-
25
- def header(xml)
26
- return unless @hash[:Header]
27
-
28
- xml.Header do
29
- xml.context_('xmlns' => 'urn:zimbra') do
30
- xml.authToken @hash[:Header][:context][:authToken]
31
- if @hash[:Header][:context][:targetServer]
32
- xml.targetServer @hash[:Header][:context][:targetServer]
33
- end
34
- xml.format('type' => 'js')
35
- end
36
- end
37
- end
38
-
39
- def body(xml)
40
- return unless @hash[:Body]
41
-
42
- xml.Body do
43
- generate_xml(@hash[:Body], xml)
44
- end
45
- end
46
-
47
- def generate_xml(hash, xml)
48
- hash.each do |req_name, req_h|
49
- xml.send(req_name, transform_keys(req_h.select(&ATTRS_NODE_PROC))) do
50
- req_h.reject(&ATTRS_NODE_PROC).each do |label, value|
51
- if value.is_a?(Hash)
52
- generate_xml(value, xml)
53
- elsif value.is_a?(Array)
54
- value.each do |el|
55
- xml.send(label, el.reject(&ATTRS_NODE_PROC), el[:_content])
56
- end
57
- else
58
- xml.send(label, value)
59
- end
60
- end
61
- end
62
- end
63
- end
64
-
65
- def transform_keys(hash)
66
- Hash[hash.map { |k, v| [k.to_s.sub(/\A_/, '').sub('jsns', 'xmlns'), v] }]
67
- end
68
- end