oddb2xml 2.2.9 → 2.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: dc4d3a7108297dee9fb8d8070efa75d40f3d8a56
4
- data.tar.gz: 3930fd61351c96d10432261df2c38d5026e01ba0
3
+ metadata.gz: 1ab40ef8c4f53f94608a1e9fc3b0b7a374ef5792
4
+ data.tar.gz: 6d9f87677f27a84001f543383a39a1eff8d67590
5
5
  SHA512:
6
- metadata.gz: ee32efa8ea3a40d8db306d143886ac6b47a3d52d981755a5d11b4bb8afa2d01b24fb699db72ae5050b6b2cad3ffbd6e285646dad71e2d5b810d1d2cd514a4b3d
7
- data.tar.gz: a273149b0c1b926a26e599da00f081e91e1291e40e5ae6ecd981d1e9be1fc78b2756021ac772c68332d5d152ca49ec67e9df799c74eb910ceed44db034d62402
6
+ metadata.gz: 626a02b6dab71eda2290cd3dc8197f622e5cd6ad1884e113b4f4aa0bb252f3e480bc20b9cb9be6dd202b7dff0313aaf7e68171e359c91279572b531dd31b36ce
7
+ data.tar.gz: 0239307754df9f22d634e814da89bfe8430c6aa14b33774c0cbeaa61f2f09e2469b2999cf8e19e3722f39ec8ab3e40fad8ee0e8ca0534d8492cc6ce19a3db000
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- oddb2xml (2.2.9)
4
+ oddb2xml (2.3.0)
5
5
  archive-tar-minitar
6
6
  httpi (>= 2.4.1)
7
7
  mechanize
@@ -51,12 +51,12 @@ GEM
51
51
  webrobots (>= 0.0.9, < 0.2)
52
52
  method_source (0.8.2)
53
53
  mime-types (2.99)
54
- mini_portile (0.6.2)
54
+ mini_portile2 (2.0.0)
55
55
  multi_json (1.11.2)
56
56
  net-http-digest_auth (1.4)
57
57
  net-http-persistent (2.9.4)
58
- nokogiri (1.6.6.4)
59
- mini_portile (~> 0.6.0)
58
+ nokogiri (1.6.7)
59
+ mini_portile2 (~> 2.0.0.rc2)
60
60
  nori (2.6.0)
61
61
  ntlm-http (0.1.1)
62
62
  parslet (1.7.1)
@@ -105,8 +105,8 @@ GEM
105
105
  wasabi (~> 3.4)
106
106
  sax-machine (1.3.2)
107
107
  slop (3.6.0)
108
- spreadsheet (1.0.9)
109
- ruby-ole (>= 1.0)
108
+ spreadsheet (1.1.1)
109
+ ruby-ole (~> 1.0)
110
110
  timecop (0.8.0)
111
111
  unf (0.1.4)
112
112
  unf_ext
@@ -138,4 +138,4 @@ DEPENDENCIES
138
138
  webmock
139
139
 
140
140
  BUNDLED WITH
141
- 1.10.5
141
+ 1.10.6
data/History.txt CHANGED
@@ -1,3 +1,7 @@
1
+ === 2.3.0 /15.12.2015
2
+
3
+ * emit correct NBR_RECORD in oddb*.xml
4
+
1
5
  === 2.2.9 / 1.12.2015
2
6
 
3
7
  * Added value 'C' (Co-marketing) for GENCD from BAG Preparations.xml
@@ -273,18 +273,20 @@ module Oddb2xml
273
273
  ) {
274
274
  Oddb2xml.log "build_substance #{@substances.size} substances"
275
275
  exit 2 if @options[:extended] and @substances.size == 0
276
+ nbr_records = 0
276
277
  @substances.each_with_index do |sub_name, i|
277
- xml.SB('DT' => '') {
278
+ xml.SB('DT' => '') do
278
279
  xml.SUBNO((i + 1).to_i)
279
280
  #xml.NAMD
280
281
  #xml.ANAMD
281
282
  #xml.NAMF
282
283
  xml.NAML sub_name
283
- }
284
+ nbr_records += 1
285
+ end
284
286
  end
285
287
  xml.RESULT {
286
288
  xml.OK_ERROR 'OK'
287
- xml.NBR_RECORD @substances.length.to_s
289
+ xml.NBR_RECORD nbr_records
288
290
  xml.ERROR_CODE ''
289
291
  xml.MESSAGE ''
290
292
  }
@@ -299,6 +301,7 @@ module Oddb2xml
299
301
  xml.doc.tag_suffix = @tag_suffix
300
302
  datetime = Time.new.strftime('%FT%T%z')
301
303
  xml.LIMITATION(XML_OPTIONS) {
304
+ nbr_records = 0
302
305
  @limitations.each do |lim|
303
306
  xml.LIM('DT' => '') {
304
307
  case lim[:key]
@@ -320,11 +323,13 @@ module Oddb2xml
320
323
  if lim[:del]
321
324
  xml.DEL 3
322
325
  end
326
+ nbr_records += 1
327
+
323
328
  }
324
329
  end
325
330
  xml.RESULT {
326
331
  xml.OK_ERROR 'OK'
327
- xml.NBR_RECORD @limitations.length.to_s
332
+ xml.NBR_RECORD nbr_records
328
333
  xml.ERROR_CODE ''
329
334
  xml.MESSAGE ''
330
335
  }
@@ -335,6 +340,7 @@ module Oddb2xml
335
340
  def build_interaction
336
341
  prepare_interactions
337
342
  prepare_codes
343
+ nbr_records = 0
338
344
  _builder = Nokogiri::XML::Builder.new(:encoding => 'utf-8') do |xml|
339
345
  xml.doc.tag_suffix = @tag_suffix
340
346
  datetime = Time.new.strftime('%FT%T%z')
@@ -378,11 +384,12 @@ module Oddb2xml
378
384
  # xml.TXTD
379
385
  # xml.TXTF
380
386
  #}
387
+ nbr_records += 1
381
388
  }
382
389
  end
383
390
  xml.RESULT {
384
391
  xml.OK_ERROR 'OK'
385
- xml.NBR_RECORD @interactions.length.to_s
392
+ xml.NBR_RECORD nbr_records
386
393
  xml.ERROR_CODE ''
387
394
  xml.MESSAGE ''
388
395
  }
@@ -392,6 +399,7 @@ module Oddb2xml
392
399
  end
393
400
  def build_code
394
401
  prepare_codes
402
+ nbr_records = 0
395
403
  Oddb2xml.log "build_code #{@codes.size} codes"
396
404
  _builder = Nokogiri::XML::Builder.new(:encoding => 'utf-8') do |xml|
397
405
  xml.doc.tag_suffix = @tag_suffix
@@ -408,11 +416,12 @@ module Oddb2xml
408
416
  #xml.DSCRD
409
417
  #xml.DSCRF
410
418
  xml.DEL false
419
+ nbr_records += 1
411
420
  }
412
421
  end
413
422
  xml.RESULT {
414
423
  xml.OK_ERROR 'OK'
415
- xml.NBR_RECORD @codes.keys.length
424
+ xml.NBR_RECORD nbr_records
416
425
  xml.ERROR_CODE ''
417
426
  xml.MESSAGE ''
418
427
  }
@@ -451,6 +460,7 @@ module Oddb2xml
451
460
  prepare_interactions
452
461
  prepare_codes
453
462
  add_missing_products_from_swissmedic
463
+ nbr_records = 0
454
464
  Oddb2xml.log "build_product #{@products.size+@missing.size} products"
455
465
  _builder = Nokogiri::XML::Builder.new(:encoding => 'utf-8') do |xml|
456
466
  xml.doc.tag_suffix = @tag_suffix
@@ -491,7 +501,7 @@ module Oddb2xml
491
501
  next if /^Q/i.match(obj[:atc])
492
502
  seq = obj[:seq]
493
503
  length += 1
494
- xml.PRD('DT' => obj[:last_change]) {
504
+ xml.PRD('DT' => obj[:last_change]) do
495
505
  ean = obj[:ean]
496
506
  xml.GTIN ean
497
507
  ppac = ((_ppac = @packs[ean.to_s[4..11].intern] and !_ppac[:is_tier]) ? _ppac : {})
@@ -608,11 +618,12 @@ module Oddb2xml
608
618
  xml.EinheitSwissmedic obj[:eht] unless obj[:eht].empty?
609
619
  xml.SubstanceSwissmedic obj[:sub] unless obj[:sub].empty?
610
620
  xml.CompositionSwissmedic obj[:comp] unless obj[:comp].empty?
611
- }
621
+ nbr_records += 1
622
+ end
612
623
  end
613
624
  xml.RESULT {
614
625
  xml.OK_ERROR 'OK'
615
- xml.NBR_RECORD length.to_s
626
+ xml.NBR_RECORD nbr_records
616
627
  xml.ERROR_CODE ''
617
628
  xml.MESSAGE ''
618
629
  }
@@ -752,6 +763,7 @@ module Oddb2xml
752
763
  prepare_limitations
753
764
  prepare_articles
754
765
  idx = 0
766
+ nbr_records = 0
755
767
  Oddb2xml.log "build_article #{idx} of #{@articles.size} articles"
756
768
  _builder = Nokogiri::XML::Builder.new(:encoding => 'utf-8') do |xml|
757
769
  xml.doc.tag_suffix = @tag_suffix
@@ -784,7 +796,8 @@ module Oddb2xml
784
796
  if !@infos_zur_rose.empty? && ean && @infos_zur_rose[ean]
785
797
  info_zur_rose = @infos_zur_rose[ean] # zurrose
786
798
  end
787
- xml.ART('DT' => obj[:last_change] ? obj[:last_change] : '') {
799
+ xml.ART('DT' => obj[:last_change] ? obj[:last_change] : '') do
800
+ nbr_records += 1
788
801
  xml.REF_DATA (obj[:refdata] || @migel[pharma_code]) ? '1' : '0'
789
802
  xml.PHAR sprintf('%07d', obj[:pharmacode]) if obj[:pharmacode]
790
803
  #xml.GRPCD
@@ -948,11 +961,11 @@ module Oddb2xml
948
961
  xml.NINCD nincd
949
962
  }
950
963
  end
951
- }
964
+ end
952
965
  end
953
966
  xml.RESULT {
954
967
  xml.OK_ERROR 'OK'
955
- xml.NBR_RECORD @articles.length.to_s
968
+ xml.NBR_RECORD nbr_records
956
969
  xml.ERROR_CODE ''
957
970
  xml.MESSAGE ''
958
971
  }
@@ -962,6 +975,7 @@ module Oddb2xml
962
975
  Oddb2xml.add_hash(_builder.to_xml)
963
976
  end
964
977
  def build_fi
978
+ nbr_records = 0
965
979
  _builder = Nokogiri::XML::Builder.new(:encoding => 'utf-8') do |xml|
966
980
  xml.doc.tag_suffix = @tag_suffix
967
981
  datetime = Time.new.strftime('%FT%T%z')
@@ -985,12 +999,13 @@ module Oddb2xml
985
999
  xml.monid info[:monid] unless info[:monid].empty?
986
1000
  xml.style { xml.cdata(info[:style]) } if info[:style]
987
1001
  xml.paragraph { xml.cdata(Nokogiri::HTML.fragment(info[:paragraph].to_html).to_html(:encoding => 'UTF-8')) } if info[:paragraph]
1002
+ nbr_records += 1
988
1003
  }
989
1004
  end
990
1005
  end
991
1006
  xml.RESULT {
992
1007
  xml.OK_ERROR 'OK'
993
- xml.NBR_RECORD length
1008
+ xml.NBR_RECORD nbr_records
994
1009
  xml.ERROR_CODE ''
995
1010
  xml.MESSAGE ''
996
1011
  }
@@ -1000,6 +1015,7 @@ module Oddb2xml
1000
1015
  end
1001
1016
  def build_fi_product
1002
1017
  prepare_products
1018
+ nbr_records = 0
1003
1019
  _builder = Nokogiri::XML::Builder.new(:encoding => 'utf-8') do |xml|
1004
1020
  xml.doc.tag_suffix = @tag_suffix
1005
1021
  datetime = Time.new.strftime('%FT%T%z')
@@ -1027,13 +1043,14 @@ module Oddb2xml
1027
1043
  xml.PRDNO seq[:product_key] unless seq[:product_key].empty?
1028
1044
  # as orphan ?
1029
1045
  xml.DEL @orphan.include?(number) ? true : false
1046
+ nbr_records += 1
1030
1047
  }
1031
1048
  }
1032
1049
  end
1033
1050
  end
1034
1051
  xml.RESULT {
1035
1052
  xml.OK_ERROR 'OK'
1036
- xml.NBR_RECORD length
1053
+ xml.NBR_RECORD nbr_records
1037
1054
  xml.ERROR_CODE ''
1038
1055
  xml.MESSAGE ''
1039
1056
  }
@@ -1042,6 +1059,7 @@ module Oddb2xml
1042
1059
  Oddb2xml.add_hash(_builder.to_xml)
1043
1060
  end
1044
1061
  def build_company
1062
+ nbr_records = 0
1045
1063
  Oddb2xml.log "build_company #{@companies.size} companies"
1046
1064
  _builder = Nokogiri::XML::Builder.new(:encoding => 'utf-8') do |xml|
1047
1065
  xml.doc.tag_suffix = @tag_suffix
@@ -1060,11 +1078,12 @@ module Oddb2xml
1060
1078
  xml.Land c[:country] unless c[:country].empty?
1061
1079
  xml.Betriebstyp c[:type] unless c[:type].empty?
1062
1080
  xml.BTM_Berechtigung c[:authorization] unless c[:authorization].empty?
1081
+ nbr_records += 1
1063
1082
  }
1064
1083
  end
1065
1084
  xml.RESULT {
1066
1085
  xml.OK_ERROR 'OK'
1067
- xml.NBR_RECORD @companies.length
1086
+ xml.NBR_RECORD nbr_records
1068
1087
  xml.ERROR_CODE ''
1069
1088
  xml.MESSAGE ''
1070
1089
  }
@@ -1073,6 +1092,7 @@ module Oddb2xml
1073
1092
  Oddb2xml.add_hash(_builder.to_xml)
1074
1093
  end
1075
1094
  def build_person
1095
+ nbr_records = 0
1076
1096
  Oddb2xml.log "build_person #{@people.size} persons"
1077
1097
  _builder = Nokogiri::XML::Builder.new(:encoding => 'utf-8') do |xml|
1078
1098
  xml.doc.tag_suffix = @tag_suffix
@@ -1090,11 +1110,12 @@ module Oddb2xml
1090
1110
  xml.Bewilligung_Selbstdispensation p[:license] unless p[:license].empty?
1091
1111
  xml.Diplom p[:certificate] unless p[:certificate].empty?
1092
1112
  xml.BTM_Berechtigung p[:authorization] unless p[:authorization].empty?
1113
+ nbr_records += 1
1093
1114
  }
1094
1115
  end
1095
1116
  xml.RESULT {
1096
1117
  xml.OK_ERROR 'OK'
1097
- xml.NBR_RECORD @people.length
1118
+ xml.NBR_RECORD nbr_records
1098
1119
  xml.ERROR_CODE ''
1099
1120
  xml.MESSAGE ''
1100
1121
  }
@@ -1,3 +1,3 @@
1
1
  module Oddb2xml
2
- VERSION = "2.2.9"
2
+ VERSION = "2.3.0"
3
3
  end
data/spec/builder_spec.rb CHANGED
@@ -229,6 +229,14 @@ MEDIZINALPERSON_ELEMENT_TESTS = [
229
229
  ['Personen/Person/BTM_Berechtigung', 'BTM_Berechtigung'],
230
230
  ]
231
231
 
232
+ def check_result(rexml, nbr_record)
233
+ expect(XPath.match(rexml, '//RESULT/NBR_RECORD').size).to eq 1
234
+ expect(XPath.match(rexml, '//RESULT/NBR_RECORD').first.text.to_i).to eq nbr_record
235
+ expect(XPath.match(rexml, '//RESULT/OK_ERROR').first.text).to eq 'OK'
236
+ expect(XPath.match(rexml, '//RESULT/ERROR_CODE').first.text).to eq nil
237
+ expect(XPath.match(rexml, '//RESULT/MESSAGE').first.text).to eq nil
238
+ end
239
+
232
240
  def checkItemForRefdata(doc, pharmacode, isRefdata)
233
241
  article = XPath.match( doc, "//ART[PHAR=#{pharmacode.to_s}]").first
234
242
  name = article.elements['DSCRD'].text
@@ -403,12 +411,13 @@ def checkArticleXml(checkERYTHROCIN = true)
403
411
  # TODO: desitin.elements['QTY'].text.should eq '250 mg'
404
412
  end
405
413
 
406
- def checkProductXml
414
+ def checkProductXml(nbr_record = -1)
407
415
  product_filename = File.expand_path(File.join(Oddb2xml::WorkDir, 'oddb_product.xml'))
408
416
  expect(File.exists?(product_filename)).to eq true
409
417
 
410
418
  # check products
411
419
  doc = REXML::Document.new IO.read(product_filename)
420
+ check_result(doc, nbr_record)
412
421
 
413
422
  desitin = checkAndGetProductWithGTIN(doc, Oddb2xml::LEVETIRACETAM_GTIN)
414
423
  expect(desitin.elements['ATC'].text).to eq('N03AX14')
@@ -445,8 +454,12 @@ end
445
454
  describe Oddb2xml::Builder do
446
455
  NrExtendedArticles = 90
447
456
  NrSubstances = 14
457
+ NrLimitations = 5
458
+ NrInteractions = 5
459
+ NrCodes = 6
448
460
  NrProdno = 23
449
461
  NrPackages = 24
462
+ NrProducts = 19
450
463
  RegExpDesitin = /1125819012LEVETIRACETAM DESITIN Mini Filmtab 250 mg 30 Stk/
451
464
  include ServerMockHelper
452
465
  def common_run_init
@@ -474,6 +487,10 @@ describe Oddb2xml::Builder do
474
487
  expect(File.exists?(oddb_article_xml)).to eq true
475
488
  end
476
489
 
490
+ it 'should have a correct NBR_RECORD in oddb_article.xml' do
491
+ check_result(@rexml, NrProducts)
492
+ end
493
+
477
494
  it 'oddb_article.xml should contain a SHA256' do
478
495
  expect(XPath.match(@rexml, "//ART" ).first.attributes['SHA256'].size).to eq 64
479
496
  expect(XPath.match(@rexml, "//ART" ).size).to eq XPath.match(@rexml, "//ART" ).size
@@ -547,6 +564,16 @@ describe Oddb2xml::Builder do
547
564
  Oddb2xml::Cli.new(options.opts).run
548
565
  end
549
566
 
567
+ it 'should have a correct NBR_RECORD in oddb_fi_product.xml' do
568
+ rexml = REXML::Document.new File.read('oddb_fi_product.xml')
569
+ check_result(rexml, 0)
570
+ end
571
+
572
+ it 'should have a correct NBR_RECORD in oddb_fi.xml' do
573
+ rexml = REXML::Document.new File.read('oddb_fi.xml')
574
+ check_result(rexml, 2)
575
+ end
576
+
550
577
  it 'should return produce a correct oddb_fi.xml' do
551
578
  expect(File.exists?(@oddb_fi_xml)).to eq true
552
579
  inhalt = IO.read(@oddb_fi_xml)
@@ -568,8 +595,9 @@ if RUN_ALL
568
595
 
569
596
  it 'should generate a valid oddb_product.xml' do
570
597
  expect(@res).to match(/products/) if @res
571
- checkProductXml
598
+ checkProductXml(NrProducts)
572
599
  end
600
+
573
601
  end
574
602
 
575
603
  context 'when -f dat is given' do
@@ -646,7 +674,7 @@ if RUN_ALL
646
674
 
647
675
  it 'should generate a valid oddb_product.xml' do
648
676
  expect(@res).to match(/products/) if @res != nil
649
- checkProductXml
677
+ checkProductXml(NrProducts)
650
678
  end
651
679
 
652
680
  it 'should contain the correct (increased) prices' do
@@ -679,22 +707,37 @@ if RUN_ALL
679
707
  check_elements(oddb_code_xml, CODE_ELEMENT_TESTS)
680
708
  end
681
709
 
710
+ it 'should have a correct NBR_RECORD in oddb_code.xml' do
711
+ rexml = REXML::Document.new File.read(oddb_code_xml)
712
+ check_result(rexml, NrCodes)
713
+ end
714
+
682
715
  context 'XSD interaction' do
683
716
  check_attributes(oddb_interaction_xml, INTERACTION_ATTRIBUTE_TESTS)
684
717
  check_elements(oddb_interaction_xml, INTERACTION_ELEMENT_TESTS)
685
718
  end
686
719
 
720
+ it 'should have a correct NBR_RECORD in oddb_interaction.xml' do
721
+ rexml = REXML::Document.new File.read(oddb_interaction_xml)
722
+ check_result(rexml, NrInteractions)
723
+ end
724
+
687
725
  context 'XSD substance' do
688
726
  check_attributes(oddb_substance_xml, SUBSTANCE_ATTRIBUTE_TESTS)
689
727
  check_elements(oddb_substance_xml, SUBSTANCE_ELEMENT_TESTS)
690
728
  end
691
729
 
730
+ it 'should have a correct NBR_RECORD in oddb_substance.xml' do
731
+ rexml = REXML::Document.new File.read('oddb_substance.xml')
732
+ check_result(rexml, NrSubstances)
733
+ end
734
+
692
735
  it 'should emit a correct oddb_article.xml' do
693
736
  checkArticleXml
694
737
  end
695
738
 
696
739
  it 'should produce a correct oddb_product.xml' do
697
- checkProductXml
740
+ checkProductXml(NrProducts)
698
741
  end
699
742
 
700
743
  it 'should report correct output on stdout' do
@@ -761,13 +804,18 @@ if RUN_ALL
761
804
  expect(XPath.match( doc, "//PHAR" ).find_all{|x| x.text.match('0000000') }.size).to eq(1) # from refdata_pharma.xml
762
805
  end
763
806
 
807
+ it 'should have a correct NBR_RECORD in oddb_limitation.xml' do
808
+ rexml = REXML::Document.new File.read('oddb_limitation.xml')
809
+ check_result(rexml, NrLimitations)
810
+ end
811
+
764
812
  it 'should emit a correct oddb_limitation.xml' do
765
813
  # check limitations
766
814
  limitation_filename = File.expand_path(File.join(Oddb2xml::WorkDir, 'oddb_limitation.xml'))
767
815
  expect(File.exists?(limitation_filename)).to eq true
768
816
  doc = REXML::Document.new File.new(limitation_filename)
769
817
  limitations = XPath.match( doc, "//LIM" )
770
- expect(limitations.size).to be >= 4
818
+ expect(limitations.size).to eql NrLimitations
771
819
  expect(XPath.match( doc, "//SwissmedicNo5" ).find_all{|x| x.text.match('28486') }.size).to eq(1)
772
820
  expect(XPath.match( doc, "//LIMNAMEBAG" ).find_all{|x| x.text.match('ZYVOXID') }.size).to eq(1)
773
821
  expect(XPath.match( doc, "//LIMNAMEBAG" ).find_all{|x| x.text.match('070240') }.size).to eq(1)
@@ -823,13 +871,13 @@ if RUN_ALL
823
871
  it 'should add 80 percent to zur_rose pubbprice' do
824
872
  expect(File.exists?(oddb_article_xml)).to eq true
825
873
  FileUtils.cp(oddb_article_xml, File.join(Oddb2xml::WorkDir, 'tst-e80.xml'))
826
- checkProductXml
874
+ checkProductXml(NrProducts)
827
875
  checkArticleXml
828
876
  checkPrices(true)
829
877
  end
830
878
 
831
879
  it 'should generate a correct oddb_product.xml' do
832
- checkProductXml
880
+ checkProductXml(NrProducts)
833
881
  end
834
882
 
835
883
  it 'should generate an article with the COOL (fridge) attribute' do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: oddb2xml
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.2.9
4
+ version: 2.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yasuhiro Asaka, Zeno R.R. Davatz, Niklaus Giger
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-12-01 00:00:00.000000000 Z
11
+ date: 2015-12-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rubyzip