oddb2xml 2.3.9 → 2.4.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 +4 -4
- data/History.txt +4 -0
- data/lib/oddb2xml/downloader.rb +5 -3
- data/lib/oddb2xml/version.rb +1 -1
- data/spec/builder_spec.rb +7 -7
- data/spec/cli_spec.rb +2 -1
- data/spec/data/vcr/transfer.dat +41 -0
- data/spec/data/vcr/transfer.zip +0 -0
- data/spec/downloader_spec.rb +54 -31
- data/spec/fixtures/vcr_cassettes/oddb2xml.json +153 -7
- metadata +6 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3ee7a2f5a9b16cb824676ba720cfc37bf14f293d
|
4
|
+
data.tar.gz: 3e75b9996fe29533d5479899630fa5b3e48a05f4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2f8d17701b4cd24180ceb9ad11350ffe23b821e39bab8cde731f1e008a49eb52face6cc760c6dfcb76dbdc003260cb5eefbc0557ec68b0cd93b8b9d2443d54a6
|
7
|
+
data.tar.gz: 6157bec8affd1492a2858368bf454dca7e247cfa7bf157e6236a863eba3dcb342968c2376eb1e9f6ff2d1efcd4359c018e61a1b103e94ee584db99d3fb358ffa
|
data/History.txt
CHANGED
data/lib/oddb2xml/downloader.rb
CHANGED
@@ -132,7 +132,9 @@ module Oddb2xml
|
|
132
132
|
include DownloadMethod
|
133
133
|
def download
|
134
134
|
@url ||= 'https://download.epha.ch/cleaned/matrix.csv'
|
135
|
-
download_as('epha_interactions.csv', 'r')
|
135
|
+
content = download_as('epha_interactions.csv', 'r')
|
136
|
+
FileUtils.rm_f('epha_interactions.csv', :verbose => true)
|
137
|
+
content
|
136
138
|
end
|
137
139
|
end
|
138
140
|
class LppvDownloader < Downloader
|
@@ -152,7 +154,7 @@ module Oddb2xml
|
|
152
154
|
Oddb2xml.log("ZurroseDownloader #{__LINE__} download #{@url} @url returns #{content.bytes}")
|
153
155
|
content
|
154
156
|
else
|
155
|
-
file = File.join(
|
157
|
+
file = File.join(Downloads, 'transfer.zip')
|
156
158
|
unless Oddb2xml.skip_download(file)
|
157
159
|
Oddb2xml.log "ZurroseDownloader #{__LINE__}: #{file}"
|
158
160
|
begin
|
@@ -165,7 +167,7 @@ module Oddb2xml
|
|
165
167
|
Oddb2xml.download_finished(file)
|
166
168
|
end
|
167
169
|
end
|
168
|
-
read_xml_from_zip(/transfer.dat/,
|
170
|
+
read_xml_from_zip(/transfer.dat/, file)
|
169
171
|
dest = File.join(Downloads, 'transfer.dat')
|
170
172
|
File.open(dest, 'r:iso-8859-1:utf-8').read
|
171
173
|
end
|
data/lib/oddb2xml/version.rb
CHANGED
data/spec/builder_spec.rb
CHANGED
@@ -268,11 +268,11 @@ def check_article_IGM_format(line, price_kendural=825, add_80_percents=false)
|
|
268
268
|
if /7680353660163\d$/.match(line) # KENDURAL Depottabl 30 Stk
|
269
269
|
puts "found_SL for #{line}" if $VERBOSE
|
270
270
|
found_SL = true
|
271
|
-
expect(line[60..65]).to eq '
|
272
|
-
expect(price_exf).to eq
|
271
|
+
expect(line[60..65]).to eq '000496'
|
272
|
+
expect(price_exf).to eq 496
|
273
273
|
expect(ckzl).to eq '1'
|
274
274
|
expect(price_public).to eq price_kendural # this is a SL-product. Therefore we may not have a price increase
|
275
|
-
expect(line[66..71]).to eq '000'+price_kendural
|
275
|
+
expect(line[66..71]).to eq '000'+sprintf('%03d', price_kendural) # the dat format requires leading zeroes and not point
|
276
276
|
end
|
277
277
|
|
278
278
|
if /7680403330459\d$/.match(line) # CARBADERM
|
@@ -392,7 +392,7 @@ def checkArticleXml(checkERYTHROCIN = true)
|
|
392
392
|
|
393
393
|
erythrocin_gtin = '7680202580475' # picked up from zur rose
|
394
394
|
erythrocin = checkAndGetArticleWithGTIN(doc, erythrocin_gtin)
|
395
|
-
expect(erythrocin.elements['DSCRD'].text).to eq("ERYTHROCIN i.v. Trockensub 1000 mg Amp
|
395
|
+
expect(erythrocin.elements['DSCRD'].text).to eq("ERYTHROCIN i.v. Trockensub 1000 mg Amp") if checkERYTHROCIN
|
396
396
|
|
397
397
|
lansoyl = checkAndGetArticleWithGTIN(doc, Oddb2xml::LANSOYL_GTIN)
|
398
398
|
expect(lansoyl.elements['DSCRD'].text).to eq 'LANSOYL Gel 225 g'
|
@@ -616,7 +616,7 @@ if RUN_ALL
|
|
616
616
|
expect(oddb_dat).to match(/^..2/), "should have a record with '2' in CMUT field"
|
617
617
|
expect(oddb_dat).to match(/^..3/), "should have a record with '3' in CMUT field"
|
618
618
|
expect(oddb_dat).to match(RegExpDesitin), "should have Desitin"
|
619
|
-
IO.readlines(dat_filename).each{ |line| check_article_IGM_format(line) }
|
619
|
+
IO.readlines(dat_filename).each{ |line| check_article_IGM_format(line, 0) }
|
620
620
|
m = /.+DIAPHIN Trocke.*7680555610041.+/.match(oddb_dat)
|
621
621
|
expect(m[0].size).to eq 97 # size of IGM 1 record
|
622
622
|
expect(m[0][74]).to eq '3'
|
@@ -918,7 +918,7 @@ if RUN_ALL
|
|
918
918
|
expect(oddb_dat).to match(/^..2/), "should have a record with '2' in CMUT field"
|
919
919
|
expect(oddb_dat).to match(/^..3/), "should have a record with '3' in CMUT field"
|
920
920
|
expect(oddb_dat).to match(RegExpDesitin), "should have Desitin"
|
921
|
-
IO.readlines(dat_filename).each{ |line| check_article_IGM_format(line) }
|
921
|
+
IO.readlines(dat_filename).each{ |line| check_article_IGM_format(line, 0) }
|
922
922
|
# oddb_dat.should match(/^..1/), "should have a record with '1' in CMUT field" # we have no
|
923
923
|
end
|
924
924
|
end
|
@@ -940,7 +940,7 @@ if RUN_ALL
|
|
940
940
|
expect(File.exists?(dat_filename)).to eq true
|
941
941
|
oddb_dat = IO.read(dat_filename)
|
942
942
|
oddb_dat_lines = IO.readlines(dat_filename)
|
943
|
-
IO.readlines(dat_filename).each{ |line| check_article_IGM_format(line,
|
943
|
+
IO.readlines(dat_filename).each{ |line| check_article_IGM_format(line, 892, true) }
|
944
944
|
end
|
945
945
|
end
|
946
946
|
end
|
data/spec/cli_spec.rb
CHANGED
@@ -181,9 +181,10 @@ describe Oddb2xml::Cli do
|
|
181
181
|
end
|
182
182
|
it 'should create the needed files' do
|
183
183
|
expect(@cli_output).to match(/\sPharma\s/)
|
184
|
+
expect(File.exists?(File.join(Oddb2xml::Downloads, 'transfer.zip'))).to eq true
|
185
|
+
expect(File.exists?(File.join(Oddb2xml::WorkDir, 'transfer.zip'))).to eq false
|
184
186
|
expected = [
|
185
187
|
'duplicate_ean13_from_zur_rose.txt',
|
186
|
-
'transfer.zip',
|
187
188
|
'oddb.dat',
|
188
189
|
].each{ |file|
|
189
190
|
expect(File.exists?(File.join(Oddb2xml::WorkDir, file))).to eq true
|
@@ -0,0 +1,41 @@
|
|
1
|
+
1130020209ERYTHROCIN i.v. Trockensub 1000 mg Amp 004137005995300B080160076802025804752
|
2
|
+
1120020244FERRO-GRADUMET Depottabl 30 Stk 000896001380300C060710076803164401152
|
3
|
+
1120020273KENDURAL Depottabl 30 Stk 000496000000100C060710076803536601632
|
4
|
+
1130020646SELSUN Shampoo Susp 60 ml 000911001650300D100400076801723304142
|
5
|
+
1130020652SELSUN Shampoo Susp (alt) 120 ml 001576002430300D100400076801723306812
|
6
|
+
1130021806EAU PRECIEUSE D�pensier L�s 375 ml 001220001870300D100600040123461177062
|
7
|
+
1125822801EPIMINERAL Paste 20 g 0043200060004000000000000000000000001
|
8
|
+
1125822801EPIMINERAL Paste 20 g 0043200060004000000000000000000000001
|
9
|
+
1125574740ADCETRIS Trockensub 50 mg Durchstf 369513394945101A000000076806213200102
|
10
|
+
1120055805TENSOPLAST Kompressionsbinde 5cmx4.5m 0000000015001000000000040428090182881
|
11
|
+
1125822801EPIMINERAL Paste 20 g 0043200060004000000000000000000000001
|
12
|
+
1120055834TENSOPLAST Kompressionsbinde 10cmx4.5m 0000000025001000000000040428090184931
|
13
|
+
1125822801EPIMINERAL Paste 20 g 0043200060004000000000000000000000001
|
14
|
+
1125822801EPIMINERAL Paste 20 g 0043200060004000000000000000000000001
|
15
|
+
1120058502TUBEGAZE Verband weiss Nr 01 20m Finger Zehen 0000000014201000000000076116004410131
|
16
|
+
1120058519TUBEGAZE Verband weiss Nr 12 20m Finger gross 0000000017001000000000076116004410201
|
17
|
+
1120058525TUBEGAZE Verband weiss Nr 34 20m Arm Fuss 0000000023201000000000076116004410371
|
18
|
+
1122731179HIRUDOID Creme 3 mg/g 40 g 000477000880100D020820076801610505832
|
19
|
+
1130020646SELSUN Shampoo Susp 60 ml 000911001650300D100400076801723304142
|
20
|
+
1120177804ANCOPIR Inj L�s 5 Amp 2 ml 000337000795100B070240076802848601442
|
21
|
+
1120020244FERRO-GRADUMET Depottabl 30 Stk 000896001380300C060710076803164401152
|
22
|
+
1130598003SOFRADEX Gtt Auric 8 ml 000718001545300B120130076803169501572
|
23
|
+
1130023722LANSOYL Gel 225 g 001054001625200D040811076803247501902
|
24
|
+
1120020273KENDURAL Depottabl 30 Stk 000496000000100C060710076803536601632
|
25
|
+
1133603779CARBADERM Creme Tb 300 ml 001622002770300D101000076804033304592
|
26
|
+
11216999473TC Filmtabl 150 mg 60 Stk 017201020530100A080300076805366201372
|
27
|
+
1122465312ZYVOXID Filmtabl 600 mg 10 Stk 084173094135100A080190076805555800542
|
28
|
+
1125819012LEVETIRACETAM DESITIN Mini Filmtab 250 mg 30 Stk 001349002780100B000000076806206900842
|
29
|
+
1121323751MAGNESIUMCHLORID Braun 0.5 molar 10ml Amp 5 Stk 001497002750300B050320076804588202022
|
30
|
+
1125822801EPIMINERAL Paste 20 g 0043200060004000000000000000000000001
|
31
|
+
1125822801EPIMINERAL Paste 20 g 0043200060004000000000000000000000001
|
32
|
+
1120850684LIDOCAIN Streuli 1% 20 mg/2ml 10 Amp 2 ml 000556000975300B010220076803001501052
|
33
|
+
1120935914ROCEPHIN 500 mg i.v. c Solv Durchstf 5 Stk 006084008160100A080130076804462505922
|
34
|
+
1125822801EPIMINERAL Paste 20 g 0043200060004000000000000000000000001
|
35
|
+
1130216094W TROPFEN liq 11.5 g 000658001080201D100700076801659801142
|
36
|
+
1125822801EPIMINERAL Paste 20 g 0043200060004000000000000000000000001
|
37
|
+
1122497134CAVERJECT DC Trockensub 20 mcg Fertspr 2 Stk 003496005420100A059900076805567400752
|
38
|
+
1122134986NAROPIN Inj L�s 0.2 % 100ml Polybag 5 Stk 008275010690300B010220076805401510092
|
39
|
+
1125822801EPIMINERAL Paste 20 g 0043200060004000000000000000000000001
|
40
|
+
1121699999HUMALOG Inj L�s 100 IE/ml Durchstf 10 ml 003040005130101B070610076805329001962
|
41
|
+
1125822801EPIMINERAL Paste 20 g 0043200060004000000000000000000000001
|
Binary file
|
data/spec/downloader_spec.rb
CHANGED
@@ -262,6 +262,9 @@ end
|
|
262
262
|
expect(File.exist?('oddb_orphan.xls')).to eq(false)
|
263
263
|
end
|
264
264
|
end
|
265
|
+
it 'should not save into the download directory' do
|
266
|
+
expect(File.exist?(File.join(Oddb2xml::Downloads, 'oddb_orphan.xls'))).to eq(false)
|
267
|
+
end
|
265
268
|
end
|
266
269
|
end
|
267
270
|
context 'package' do
|
@@ -270,15 +273,16 @@ end
|
|
270
273
|
VCR.insert_cassette('oddb2xml', :tag => :swissmedic, :exclusive => false)
|
271
274
|
common_before
|
272
275
|
@downloader = Oddb2xml::SwissmedicDownloader.new(:package)
|
276
|
+
@bin = @downloader.download
|
273
277
|
end
|
274
278
|
after(:each) do common_after end
|
275
279
|
context 'download_by for package xls' do
|
276
|
-
let(:bin) {
|
277
|
-
@downloader.download
|
278
|
-
}
|
279
280
|
it 'should return valid Binary-String' do
|
280
|
-
expect(bin).to be_a String
|
281
|
-
expect(bin.bytes).not_to be nil
|
281
|
+
expect(@bin).to be_a String
|
282
|
+
expect(@bin.bytes).not_to be nil
|
283
|
+
end
|
284
|
+
it 'should save into the download directory' do
|
285
|
+
expect(File.exist?(File.join(Oddb2xml::Downloads, 'swissmedic_package.xlsx'))).to eq(true)
|
282
286
|
end
|
283
287
|
end
|
284
288
|
end
|
@@ -305,6 +309,7 @@ describe Oddb2xml::EphaDownloader do
|
|
305
309
|
VCR.insert_cassette('oddb2xml', :tag => :epha)
|
306
310
|
@downloader = Oddb2xml::EphaDownloader.new
|
307
311
|
common_before
|
312
|
+
@downloader.download
|
308
313
|
end
|
309
314
|
after(:all) do
|
310
315
|
common_after
|
@@ -321,8 +326,10 @@ describe Oddb2xml::EphaDownloader do
|
|
321
326
|
expect(csv.bytes).not_to be nil
|
322
327
|
end
|
323
328
|
it 'should clean up current directory' do
|
324
|
-
|
325
|
-
|
329
|
+
File.exist?('epha_interactions.csv').should eq(false)
|
330
|
+
end
|
331
|
+
it 'should save under download' do
|
332
|
+
expect(File.exist?(File.join(Oddb2xml::Downloads, 'epha_interactions.csv'))).to eq(true)
|
326
333
|
end
|
327
334
|
end
|
328
335
|
end
|
@@ -413,6 +420,7 @@ describe Oddb2xml::MigelDownloader do
|
|
413
420
|
@downloader = Oddb2xml::MigelDownloader.new
|
414
421
|
VCR.insert_cassette('oddb2xml', :tag => :migel)
|
415
422
|
common_before
|
423
|
+
@downloader.download
|
416
424
|
end
|
417
425
|
after(:each) do common_after end
|
418
426
|
|
@@ -436,12 +444,10 @@ describe Oddb2xml::ZurroseDownloader do
|
|
436
444
|
before(:each) do
|
437
445
|
VCR.configure do |c|
|
438
446
|
c.before_record(:zurrose) do |i|
|
439
|
-
if /
|
447
|
+
if /pillbox/i.match(i.request.uri)
|
440
448
|
puts "#{Time.now}: #{__LINE__}: URI was #{i.request.uri}"
|
441
|
-
|
442
|
-
|
443
|
-
Oddb2xml::GTINS_DRUGS.each{ |ean| to_add << lines.find{ |line| line.index(ean.to_s) || /EPIMINERAL/i.match(line) } }
|
444
|
-
i.response.body = to_add.compact.join("\n")
|
449
|
+
tmp_zip = File.join(Oddb2xml::SpecData, 'vcr', 'transfer.zip')
|
450
|
+
i.response.body = IO.binread(tmp_zip)
|
445
451
|
i.response.headers['Content-Length'] = i.response.body.size
|
446
452
|
end
|
447
453
|
end
|
@@ -449,6 +455,7 @@ describe Oddb2xml::ZurroseDownloader do
|
|
449
455
|
VCR.insert_cassette('oddb2xml', :tag => :zurrose)
|
450
456
|
@downloader = Oddb2xml::ZurroseDownloader.new
|
451
457
|
common_before
|
458
|
+
@downloader.download
|
452
459
|
end
|
453
460
|
after(:each) do common_after end
|
454
461
|
|
@@ -463,6 +470,11 @@ describe Oddb2xml::ZurroseDownloader do
|
|
463
470
|
expect { dat }.not_to raise_error
|
464
471
|
expect(File.exist?('transfer.dat')).to eq(false)
|
465
472
|
expect(File.exist?('oddb2xml_zurrose_transfer.dat')).to eq(false)
|
473
|
+
expect(File.exist?('transfer.zip')).to eq(false)
|
474
|
+
end
|
475
|
+
it 'should save into the download directory' do
|
476
|
+
expect(File.exist?(File.join(Oddb2xml::Downloads, 'transfer.zip'))).to eq(true)
|
477
|
+
expect(File.exist?(File.join(Oddb2xml::Downloads, 'transfer.dat'))).to eq(true)
|
466
478
|
end
|
467
479
|
end
|
468
480
|
end
|
@@ -475,26 +487,32 @@ describe Oddb2xml::MedregbmDownloader do
|
|
475
487
|
c.before_record(:medreg) do |i|
|
476
488
|
if /medregbm.admin.ch/i.match(i.request.uri)
|
477
489
|
puts "#{Time.now}: #{__LINE__}: URI was #{i.request.uri} containing #{i.response.body.size/(1024*1024)} MB "
|
478
|
-
|
479
|
-
|
480
|
-
|
481
|
-
|
482
|
-
|
483
|
-
|
484
|
-
|
485
|
-
|
486
|
-
|
487
|
-
idx
|
488
|
-
|
489
|
-
|
490
|
-
|
491
|
-
|
492
|
-
|
493
|
-
|
494
|
-
|
495
|
-
|
490
|
+
begin
|
491
|
+
medreg_dir = File.join(Oddb2xml::WorkDir, 'medreg')
|
492
|
+
FileUtils.makedirs(medreg_dir)
|
493
|
+
xlsx_name = File.join(medreg_dir, /ListBetrieb/.match(i.request.uri) ? 'Betriebe.xlsx' : 'Personen.xlsx')
|
494
|
+
File.open(xlsx_name, 'wb+') { |f| f.write(i.response.body) }
|
495
|
+
puts "#{Time.now}: Openening saved #{xlsx_name} (#{File.size(xlsx_name)} bytes) will take some time. URI was #{i.request.uri}"
|
496
|
+
workbook = RubyXL::Parser.parse(xlsx_name)
|
497
|
+
worksheet = workbook[0]
|
498
|
+
idx = 1; to_delete = []
|
499
|
+
while (worksheet.sheet_data[idx])
|
500
|
+
idx += 1
|
501
|
+
next unless worksheet.sheet_data[idx-1][0]
|
502
|
+
to_delete << (idx-1) unless Oddb2xml::GTINS_MEDREG.index(worksheet.sheet_data[idx-1][0].value.to_i)
|
503
|
+
end
|
504
|
+
if to_delete.size > 0
|
505
|
+
puts "#{Time.now}: Deleting #{to_delete.size} of the #{idx} items will take some time"
|
506
|
+
to_delete.reverse.each{ |row_id| worksheet.delete_row(row_id) }
|
507
|
+
workbook.write(xlsx_name)
|
508
|
+
i.response.body = IO.binread(xlsx_name)
|
509
|
+
i.response.headers['Content-Length'] = i.response.body.size
|
510
|
+
puts "#{Time.now}: response.body is now #{i.response.body.size/(1024*1024)} MB long. #{xlsx_name} was #{File.size(xlsx_name)}"
|
511
|
+
end
|
512
|
+
rescue
|
513
|
+
puts "Creating empty content, as I am unable to parse the XLSX file"
|
514
|
+
i.response.body = ""
|
496
515
|
i.response.headers['Content-Length'] = i.response.body.size
|
497
|
-
puts "#{Time.now}: response.body is now #{i.response.body.size/(1024*1024)} MB long. #{xlsx_name} was #{File.size(xlsx_name)}"
|
498
516
|
end
|
499
517
|
end
|
500
518
|
end
|
@@ -508,6 +526,7 @@ describe Oddb2xml::MedregbmDownloader do
|
|
508
526
|
VCR.eject_cassette
|
509
527
|
VCR.insert_cassette('oddb2xml', :tag => :medreg)
|
510
528
|
@downloader = Oddb2xml::MedregbmDownloader.new(:company)
|
529
|
+
@downloader.download
|
511
530
|
end
|
512
531
|
after(:each) do common_after end
|
513
532
|
it_behaves_like 'any downloader'
|
@@ -578,6 +597,7 @@ describe Oddb2xml::SwissmedicInfoDownloader do
|
|
578
597
|
VCR.insert_cassette('oddb2xml', :tag => :swissmedicInfo)
|
579
598
|
common_before
|
580
599
|
@downloader = Oddb2xml::SwissmedicInfoDownloader.new
|
600
|
+
@downloader.download
|
581
601
|
end
|
582
602
|
after(:all) do common_after end
|
583
603
|
it_behaves_like 'any downloader'
|
@@ -596,6 +616,9 @@ describe Oddb2xml::SwissmedicInfoDownloader do
|
|
596
616
|
expect { xml }.not_to raise_error
|
597
617
|
expect(File.exist?('swissmedic_info.zip')).to eq(false)
|
598
618
|
end
|
619
|
+
it 'should save into the download directory' do
|
620
|
+
expect(File.exist?(File.join(Oddb2xml::Downloads, 'swissmedic_info.zip'))).to eq(true)
|
621
|
+
end
|
599
622
|
end
|
600
623
|
end
|
601
624
|
|