oddb2xml 2.7.1 → 2.7.5

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 (48) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ruby.yml +1 -2
  3. data/.standard.yml +2 -0
  4. data/Gemfile +3 -3
  5. data/History.txt +24 -0
  6. data/README.md +3 -3
  7. data/Rakefile +24 -23
  8. data/bin/check_artikelstamm +11 -11
  9. data/bin/compare_v5 +23 -23
  10. data/bin/oddb2xml +14 -13
  11. data/lib/oddb2xml/builder.rb +1070 -1038
  12. data/lib/oddb2xml/calc.rb +232 -233
  13. data/lib/oddb2xml/chapter_70_hack.rb +38 -32
  14. data/lib/oddb2xml/cli.rb +252 -236
  15. data/lib/oddb2xml/compare.rb +70 -59
  16. data/lib/oddb2xml/compositions_syntax.rb +451 -430
  17. data/lib/oddb2xml/compressor.rb +20 -20
  18. data/lib/oddb2xml/downloader.rb +157 -129
  19. data/lib/oddb2xml/extractor.rb +295 -295
  20. data/lib/oddb2xml/options.rb +34 -35
  21. data/lib/oddb2xml/parslet_compositions.rb +265 -269
  22. data/lib/oddb2xml/semantic_check.rb +39 -33
  23. data/lib/oddb2xml/util.rb +163 -163
  24. data/lib/oddb2xml/version.rb +1 -1
  25. data/lib/oddb2xml/xml_definitions.rb +32 -33
  26. data/lib/oddb2xml.rb +1 -1
  27. data/oddb2xml.gemspec +34 -34
  28. data/shell.nix +17 -0
  29. data/spec/artikelstamm_spec.rb +111 -110
  30. data/spec/builder_spec.rb +490 -505
  31. data/spec/calc_spec.rb +552 -593
  32. data/spec/check_artikelstamm_spec.rb +26 -26
  33. data/spec/cli_spec.rb +173 -174
  34. data/spec/compare_spec.rb +9 -11
  35. data/spec/composition_syntax_spec.rb +390 -409
  36. data/spec/compressor_spec.rb +48 -48
  37. data/spec/data/transfer.dat +1 -0
  38. data/spec/data_helper.rb +47 -49
  39. data/spec/downloader_spec.rb +251 -260
  40. data/spec/extractor_spec.rb +171 -159
  41. data/spec/fixtures/vcr_cassettes/oddb2xml.json +1 -1
  42. data/spec/galenic_spec.rb +233 -256
  43. data/spec/options_spec.rb +116 -119
  44. data/spec/parslet_spec.rb +896 -863
  45. data/spec/spec_helper.rb +153 -153
  46. data/test_options.rb +39 -42
  47. data/tools/win_fetch_cacerts.rb +2 -3
  48. metadata +42 -12
data/spec/spec_helper.rb CHANGED
@@ -5,125 +5,125 @@
5
5
  #
6
6
  # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
7
7
  #
8
- $:.unshift File.join(File.dirname(__FILE__), '..', 'lib')
8
+ $:.unshift File.join(File.dirname(__FILE__), "..", "lib")
9
9
  $:.unshift File.dirname(__FILE__)
10
10
 
11
- require 'rspec'
12
- require 'webmock/rspec'
13
- require 'flexmock/rspec'
14
- require 'pp'
11
+ require "rspec"
12
+ require "webmock/rspec"
13
+ require "flexmock/rspec"
14
+ require "pp"
15
15
 
16
- begin # load pry if is available
17
- require 'pry'
18
- Pry.config.output = STDOUT
16
+ # load pry if is available
17
+ begin
18
+ require "pry"
19
+ Pry.config.output = $stdout
19
20
  rescue LoadError
20
21
  end
21
22
 
22
- require 'vcr'
23
- require 'timecop'
23
+ require "vcr"
24
+ require "timecop"
24
25
 
25
26
  module Oddb2xml
26
27
  # we override here a few directories to make input/output when running specs to
27
28
  # be in different places compared when running
28
- SpecData = File.join(File.dirname(__FILE__), 'data')
29
- WorkDir = File.join(File.dirname(__FILE__), 'run')
30
- Downloads = File.join(WorkDir, 'downloads')
31
- SpecCompressor = File.join(Oddb2xml::SpecData, 'compressor')
32
- DATE_REGEXP = /\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}[-+]\d{4}/
29
+ SpecData = File.join(File.dirname(__FILE__), "data")
30
+ WORK_DIR = File.join(File.dirname(__FILE__), "run")
31
+ DOWNLOADS = File.join(WORK_DIR, "downloads")
32
+ SpecCompressor = File.join(Oddb2xml::SpecData, "compressor")
33
+ DATE_REGEXP = /\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}[-+]\d{4}/
33
34
 
34
35
  GTINS_CALC = [
35
- '7680458820202', # for calc_spec.rb
36
- '7680555940018', # for calc_spec.rb
37
- '7680434541015', # for calc_spec.rb
38
- '7680300150105', # for calc_spec.rb
39
- '7680446250592', # for calc_spec.rb
40
- '7680611860045', # for calc_spec.rb
41
- '7680165980114', # for calc_spec.rb
42
- '7680589430011', # for calc_spec.rb
43
- '7680556740075', # for calc_spec.rb
44
- '7680540151009', # for calc_spec.rb
45
- '7680560890018', # for calc_spec.rb
46
- '7680532900196', # Insulin, gentechnik
47
- '7680555610041', # Diaphin 10 g i.v. drug
48
- ]
49
- FRIDGE_GTIN = '7680002770014' # fridge drug 7680002770014 Coeur-Vaisseaux Sérocytol, suppositoire
50
- ORPHAN_GTIN = '7680587340015' # orphan drug IKSNR 62132: Adcetris, Pulver zur Herstellung einer Infusionslösung
51
- GTINS_DRUGS = [ '733905577161', # 1-DAY ACUVUE Moist Tag -2.00dpt BC 8.5
52
- FRIDGE_GTIN,
53
- ORPHAN_GTIN,
54
- '4042809018288',
55
- '4042809018400',
56
- '4042809018493',
57
- '5000223074777',
58
- '5000223439507',
59
- '7611600441013',
60
- '7611600441020',
61
- '7611600441037',
62
- '7680161050583', # Hirudoid Creme 3 mg/g
63
- '7680172330414', # SELSUN
64
- '7680284860144',
65
- '7680316440115', # FERRO-GRADUMET Depottabl 30 Stk
66
- '7680316950157', # SOFRADEX Gtt Auric 8 ml
67
- '7680324750190', # LANSOYL Gel
68
- '7680353660163',
69
- '7680403330459',
70
- '7680536620137', # 3TC Filmtabl 150 mg
71
- '7680555580054', # ZYVOXID
72
- '7680620690084', # LEVETIRACETAM DESITIN Mini Filmtab 250 mg needed for extractor_spec.rb
73
- ] + GTINS_CALC
74
- FERRO_GRADUMET_GTIN = '7680316440115'
75
- HIRUDOID_GTIN = '7680161050583'
76
- LANSOYL_GTIN = '7680324750190'
77
- LANSOYL_PRICE_RESELLER_PUB = 18.95
78
- LANSOYL_PRICE_ZURROSE = 10.54
79
- LANSOYL_PRICE_ZURROSEPUB = 16.25
80
- LEVETIRACETAM_GTIN = '7680620690084'
81
- LEVETIRACETAM_PRICE_PPUB = 27.8
82
- LEVETIRACETAM_PRICE_ZURROSE = 13.49
83
- LEVETIRACETAM_PRICE_RESELLER_PUB = 24.3
84
- SOFRADEX_GTIN = '7680316950157'
85
- SOFRADEX_PRICE_RESELLER_PUB = 12.9
86
- SOFRADEX_PRICE_ZURROSE = 7.18
87
- SOFRADEX_PRICE_ZURROSEPUB = 15.45
88
- THREE_TC_GTIN = '7680536620137'
89
- ZYVOXID_GTIN = '7680555580054'
36
+ "7680458820202", # for calc_spec.rb
37
+ "7680555940018", # for calc_spec.rb
38
+ "7680434541015", # for calc_spec.rb
39
+ "7680300150105", # for calc_spec.rb
40
+ "7680446250592", # for calc_spec.rb
41
+ "7680611860045", # for calc_spec.rb
42
+ "7680165980114", # for calc_spec.rb
43
+ "7680589430011", # for calc_spec.rb
44
+ "7680556740075", # for calc_spec.rb
45
+ "7680540151009", # for calc_spec.rb
46
+ "7680560890018", # for calc_spec.rb
47
+ "7680532900196", # Insulin, gentechnik
48
+ "7680555610041" # Diaphin 10 g i.v. drug
49
+ ]
50
+ FRIDGE_GTIN = "7680002770014" # fridge drug 7680002770014 Coeur-Vaisseaux Sérocytol, suppositoire
51
+ ORPHAN_GTIN = "7680587340015" # orphan drug IKSNR 62132: Adcetris, Pulver zur Herstellung einer Infusionslösung
52
+ GTINS_DRUGS = ["733905577161", # 1-DAY ACUVUE Moist Tag -2.00dpt BC 8.5
53
+ FRIDGE_GTIN,
54
+ ORPHAN_GTIN,
55
+ "4042809018288",
56
+ "4042809018400",
57
+ "4042809018493",
58
+ "5000223074777",
59
+ "5000223439507",
60
+ "7611600441013",
61
+ "7611600441020",
62
+ "7611600441037",
63
+ "7680161050583", # Hirudoid Creme 3 mg/g
64
+ "7680172330414", # SELSUN
65
+ "7680284860144",
66
+ "7680316440115", # FERRO-GRADUMET Depottabl 30 Stk
67
+ "7680316950157", # SOFRADEX Gtt Auric 8 ml
68
+ "7680324750190", # LANSOYL Gel
69
+ "7680353660163",
70
+ "7680403330459",
71
+ "7680536620137", # 3TC Filmtabl 150 mg
72
+ "7680555580054", # ZYVOXID
73
+ # 7680620690084 is LEVETIRACETAM DESITIN Mini Filmtab 250 mg needed for extractor_spec.rb
74
+ "7680620690084"] +
75
+ GTINS_CALC
76
+ FERRO_GRADUMET_GTIN = "7680316440115"
77
+ HIRUDOID_GTIN = "7680161050583"
78
+ LANSOYL_GTIN = "7680324750190"
79
+ LANSOYL_PRICE_RESELLER_PUB = 18.95
80
+ LANSOYL_PRICE_ZURROSE = 10.54
81
+ LANSOYL_PRICE_ZURROSEPUB = 16.25
82
+ LEVETIRACETAM_GTIN = "7680620690084"
83
+ LEVETIRACETAM_PRICE_PPUB = 27.8
84
+ LEVETIRACETAM_PRICE_ZURROSE = 13.49
85
+ LEVETIRACETAM_PRICE_RESELLER_PUB = 24.3
86
+ SOFRADEX_GTIN = "7680316950157"
87
+ SOFRADEX_PRICE_RESELLER_PUB = 12.9
88
+ SOFRADEX_PRICE_ZURROSE = 7.18
89
+ SOFRADEX_PRICE_ZURROSEPUB = 15.45
90
+ THREE_TC_GTIN = "7680536620137"
91
+ ZYVOXID_GTIN = "7680555580054"
90
92
 
91
93
  GTINS_MEDREG = [
92
- '7601001380028', # Glarus
93
- '7601002017145', # Kantonsspital Glarus AG
94
- '7601001395145', # Kantonstierärztlicher Dienst
95
- '7601001396043', # St. Fridolin Pharma AG
96
- '7601000159199', # Davatz Ursula
97
- '7601000159199', # Davatz Ursula
98
- '7601000254344', # Pfister Daniel 8753 Mollis
99
- '7601000254207', # Züst Peter 8753 Mollis
100
- '7601000752314', # Züst Yvonne 8753 Mollis
101
- ]
102
-
94
+ "7601001380028", # Glarus
95
+ "7601002017145", # Kantonsspital Glarus AG
96
+ "7601001395145", # Kantonstierärztlicher Dienst
97
+ "7601001396043", # St. Fridolin Pharma AG
98
+ "7601000159199", # Davatz Ursula
99
+ "7601000159199", # Davatz Ursula
100
+ "7601000254344", # Pfister Daniel 8753 Mollis
101
+ "7601000254207", # Züst Peter 8753 Mollis
102
+ "7601000752314" # Züst Yvonne 8753 Mollis
103
+ ]
103
104
  end
104
105
 
105
106
  RSpec.configure do |config|
106
- config.mock_with :flexmock
107
- end
107
+ config.mock_with :flexmock
108
+ end
108
109
 
109
110
  VCR.configure do |config|
110
111
  config.cassette_library_dir = "spec/fixtures/vcr_cassettes"
111
112
  config.hook_into :webmock
112
- config.debug_logger = File.open(File.join(File.dirname(File.dirname(__FILE__)), 'vcr.log'), 'w+')
113
+ config.debug_logger = File.open(File.join(File.dirname(File.dirname(__FILE__)), "vcr.log"), "w+")
113
114
  config.debug_logger.sync = true
114
- config.default_cassette_options = { :record =>:once, # ARGV.join(' ').index('downloader_spec') ? :new_episodes : :once ,
115
- :preserve_exact_body_bytes => true,
116
- :allow_playback_repeats => true,
117
- :serialize_with => :json,
118
- :decode_compressed_response => true,
119
- :match_requests_on => [:method, :uri, :body],
120
- }
121
- # :match_requests_on (Array<Symbol, #call>) —
122
- #
123
- # List of request matchers to use to determine what recorded HTTP interaction to replay. Defaults to [:method, :uri]. The built-in matchers are :method, :uri, :host, :path, :headers and :body. You can also pass the name of a registered custom request matcher or any object that responds to #call.
115
+ config.default_cassette_options = {record: :once, # ARGV.join(' ').index('downloader_spec') ? :new_episodes : :once ,
116
+ preserve_exact_body_bytes: true,
117
+ allow_playback_repeats: true,
118
+ serialize_with: :json,
119
+ decode_compressed_response: true,
120
+ match_requests_on: [:method, :uri, :body]}
121
+ # :match_requests_on (Array<Symbol, #call>) —
122
+ #
123
+ # List of request matchers to use to determine what recorded HTTP interaction to replay. Defaults to [:method, :uri]. The built-in matchers are :method, :uri, :host, :path, :headers and :body. You can also pass the name of a registered custom request matcher or any object that responds to #call.
124
124
 
125
125
  config.before_http_request(:real?) do |request|
126
- $stderr.puts("before real request: #{request.method} #{request.uri} #{caller[0..5].join("\n")}")
126
+ warn("before real request: #{request.method} #{request.uri} #{caller[0..5].join("\n")}")
127
127
  $stderr.flush
128
128
  end
129
129
  end
@@ -131,17 +131,20 @@ end
131
131
  AllCompositionLines = File.expand_path("#{__FILE__}/../data/compositions.txt")
132
132
  AllColumn_C_Lines = File.expand_path("#{__FILE__}/../data/column_c.txt")
133
133
 
134
- require 'oddb2xml'
134
+ require "oddb2xml"
135
135
 
136
136
  module Kernel
137
137
  def buildr_capture(stream)
138
138
  begin
139
+ # We know that standardrb complains here. But there is no time to fix it
139
140
  stream = stream.to_s
140
141
  eval "$#{stream} = StringIO.new"
141
142
  yield
142
143
  result = eval("$#{stream}").string
143
144
  ensure
144
- eval "$#{stream} = #{stream.upcase}"
145
+ eval <<-RUBY, binding, __FILE__, __LINE__ + 1
146
+ "$#{stream} = #{stream.upcase}"
147
+ RUBY
145
148
  end
146
149
  result
147
150
  end
@@ -149,19 +152,18 @@ end
149
152
 
150
153
  module ServerMockHelper
151
154
  def cleanup_compressor
152
- [ File.join(Oddb2xml::SpecCompressor, '*.zip'),
153
- File.join(Oddb2xml::SpecCompressor, '*.tar.gz'),
154
- File.join(Oddb2xml::SpecCompressor, 'epha_interactions.txt*'),
155
- File.join(Oddb2xml::SpecCompressor, 'medregbm_company.txt*'),
156
- File.join(Oddb2xml::SpecCompressor, 'medregbm_person.txt*'),
157
- File.join(Oddb2xml::SpecCompressor, 'transfer.dat.*'),
158
- File.join(Oddb2xml::SpecCompressor, 'oddb2xml_files_nonpharma.xls.*'),
159
- ].each { |file| FileUtils.rm_f(Dir.glob(file), :verbose => false) if Dir.glob(file).size > 0 }
155
+ [File.join(Oddb2xml::SpecCompressor, "*.zip"),
156
+ File.join(Oddb2xml::SpecCompressor, "*.tar.gz"),
157
+ File.join(Oddb2xml::SpecCompressor, "epha_interactions.txt*"),
158
+ File.join(Oddb2xml::SpecCompressor, "medregbm_company.txt*"),
159
+ File.join(Oddb2xml::SpecCompressor, "medregbm_person.txt*"),
160
+ File.join(Oddb2xml::SpecCompressor, "transfer.dat.*"),
161
+ File.join(Oddb2xml::SpecCompressor, "oddb2xml_files_nonpharma.xls.*")].each { |file| FileUtils.rm_f(Dir.glob(file), verbose: false) if Dir.glob(file).size > 0 }
160
162
  end
163
+
161
164
  def cleanup_directories_before_run
162
- dirs = [ Oddb2xml::Downloads, Oddb2xml::WorkDir]
163
- dirs.each{ |dir| FileUtils.rm_rf(Dir.glob(File.join(dir, '*')), :verbose => false) }
164
- dirs.each{ |dir| FileUtils.makedirs(dir, :verbose => false) }
165
+ dirs = [Oddb2xml::DOWNLOADS, Oddb2xml::WORK_DIR]
166
+ dirs.each { |dir| FileUtils.rm_rf(Dir.glob(File.join(dir, "*")), verbose: false) }
165
167
  cleanup_compressor
166
168
  mock_downloads
167
169
  end
@@ -177,9 +179,9 @@ def check_elements(xml_name, tests)
177
179
  value = test[1]
178
180
  it "should have correct entries #{value} for path #{path}" do
179
181
  found = false
180
- Nokogiri::XML(File.read(xml_name)).search(path, nil, nil).each do |x|
182
+ Nokogiri::XML(File.read(xml_name)).search(path, nil, nil).each do |x|
181
183
  if value.match(x.text)
182
- found= true
184
+ found = true
183
185
  break
184
186
  end
185
187
  end
@@ -196,8 +198,8 @@ def check_attributes(xml_name, tests)
196
198
  it "should have correct value #{value} for attribute #{attribute} in #{path}" do
197
199
  found = false
198
200
  Nokogiri::XML(File.read(xml_name)).search(path, nil, nil).each do |x|
199
- if value.match(x["#{attribute}"])
200
- found= true
201
+ if value.match(x[attribute.to_s])
202
+ found = true
201
203
  break
202
204
  end
203
205
  end
@@ -210,62 +212,60 @@ RSpec.configure do |config|
210
212
  config.run_all_when_everything_filtered = true
211
213
  config.filter_run :focus
212
214
  config.filter_run_excluding :slow
213
- #config.exclusion_filter = {:slow => true}
215
+ # config.exclusion_filter = {:slow => true}
214
216
 
215
217
  # Run specs in random order to surface order dependencies. If you find an
216
218
  # order dependency and want to debug it, you can fix the order by providing
217
219
  # the seed, which is printed after each run.
218
220
  # --seed 1234
219
- config.order = 'random'
221
+ config.order = "random"
220
222
 
221
223
  # Helper
222
224
  config.include(ServerMockHelper)
223
225
  end
224
226
 
225
227
  def validate_via_xsd(xsd_file, xml_file)
226
- xsd =open(xsd_file).read
228
+ xsd = File.open(xsd_file).read
227
229
  xsd_rtikelstamm_xml = Nokogiri::XML::Schema(xsd)
228
230
  doc = Nokogiri::XML(File.read(xml_file))
229
- xsd_rtikelstamm_xml.validate(doc).each do
230
- |error|
231
- if error.message
232
- puts "Failed validating #{xml_file} with #{File.size(xml_file)} bytes using XSD from #{xsd_file}"
233
- puts "CMD: xmllint --noout --schema #{xsd_file} #{xml_file}"
234
- end
235
- msg = "expected #{error.message} to be nil\nfor #{xml_file}"
236
- puts msg
237
- expect(error.message).to be_nil, msg
231
+ xsd_rtikelstamm_xml.validate(doc).each do |error|
232
+ if error.message
233
+ puts "Failed validating #{xml_file} with #{File.size(xml_file)} bytes using XSD from #{xsd_file}"
234
+ puts "CMD: xmllint --noout --schema #{xsd_file} #{xml_file}"
235
+ end
236
+ msg = "expected #{error.message} to be nil\nfor #{xml_file}"
237
+ puts msg
238
+ expect(error.message).to be_nil, msg
238
239
  end
239
240
  end
240
241
 
241
242
  def mock_downloads
242
- WebMock.enable!
243
- { 'transfer.zip' => ['transfer.dat'],
244
- 'XMLPublications.zip' => ['Preparations.xml', 'ItCodes.xml', 'GL_Diff_SB.xml']
245
- }.each do |zip, entries|
246
- zip_file = File.join(Oddb2xml::SpecData,zip)
247
- files = entries.collect{|entry| File.join(Oddb2xml::SpecData, entry)}
248
- FileUtils.rm(zip_file, :verbose => false) if File.exist?(zip_file)
249
- cmd = "zip --quiet --junk-paths #{zip_file} #{files.join(' ')}"
250
- system(cmd)
251
- end
252
- { 'https://raw.githubusercontent.com/zdavatz/oddb2xml_files/master/interactions_de_utf8.csv' => 'epha_interactions.csv',
253
- 'https://www.swissmedic.ch/swissmedic/de/home/services/listen_neu.html' => 'listen_neu.html',
254
- 'https://www.swissmedic.ch/dam/swissmedic/de/dokumente/internetlisten/status_ophan%20Drug.xlsx.download.xlsx/Liste_OrphanDrug_Internet_2019_01_31.xlsx' => 'swissmedic_orphan.xlsx',
255
- 'https://www.swissmedic.ch/dam/swissmedic/de/dokumente/internetlisten/zugelassene_packungen_ham.xlsx.download.xlsx/Zugelassene_Packungen%20HAM_31012019.xlsx' => 'swissmedic_package.xlsx',
256
- 'http://pillbox.oddb.org/TRANSFER.ZIP' => 'transfer.zip',
257
- 'https://github.com/zdavatz/cpp2sqlite/blob/master/input/atc_codes_multi_lingual.txt' => 'atc.csv',
258
- 'https://raw.githubusercontent.com/zdavatz/oddb2xml_files/master/LPPV.txt' => 'oddb2xml_files_lppv.txt',
259
- 'http://www.xn--spezialittenliste-yqb.ch/File.axd?file=XMLPublications.zip' => 'XMLPublications.zip',
260
- 'http://www.spezialitaetenliste.ch/varia_De.htm' => 'varia_De.htm',
261
- # 'http://refdatabase.refdata.ch/Service/Article.asmx?WSDL' => 'refdata_Pharma.xml',
262
- }.each do |url, file|
263
- inhalt = File.read(File.join(Oddb2xml::SpecData, file))
264
- m = flexmock('open-uri')
265
- m.should_receive(:open).with(url).and_return(inhalt)
266
- stub_request(:any,url).to_return(body: inhalt)
267
- stub_request(:get,url).to_return(body: inhalt)
268
- stub_request(:open,url).to_return(body: inhalt)
269
- end
270
- VCR.eject_cassette; VCR.insert_cassette('oddb2xml')
243
+ WebMock.enable!
244
+ {"transfer.zip" => ["transfer.dat"],
245
+ "XMLPublications.zip" => ["Preparations.xml", "ItCodes.xml", "GL_Diff_SB.xml"]}.each do |zip, entries|
246
+ zip_file = File.join(Oddb2xml::SpecData, zip)
247
+ files = entries.collect { |entry| File.join(Oddb2xml::SpecData, entry) }
248
+ FileUtils.rm(zip_file, verbose: false) if File.exist?(zip_file)
249
+ cmd = "zip --quiet --junk-paths #{zip_file} #{files.join(" ")}"
250
+ system(cmd)
251
+ end
252
+ {"https://raw.githubusercontent.com/zdavatz/oddb2xml_files/master/interactions_de_utf8.csv" => "epha_interactions.csv",
253
+ "https://www.swissmedic.ch/swissmedic/de/home/services/listen_neu.html" => "listen_neu.html",
254
+ "https://www.swissmedic.ch/dam/swissmedic/de/dokumente/internetlisten/status_ophan%20Drug.xlsx.download.xlsx/Liste_OrphanDrug_Internet_2019_01_31.xlsx" => "swissmedic_orphan.xlsx",
255
+ "https://www.swissmedic.ch/dam/swissmedic/de/dokumente/internetlisten/zugelassene_packungen_ham.xlsx.download.xlsx/Zugelassene_Packungen%20HAM_31012019.xlsx" => "swissmedic_package.xlsx",
256
+ "http://pillbox.oddb.org/TRANSFER.ZIP" => "transfer.zip",
257
+ "https://github.com/zdavatz/cpp2sqlite/blob/master/input/atc_codes_multi_lingual.txt" => "atc.csv",
258
+ "https://raw.githubusercontent.com/zdavatz/oddb2xml_files/master/LPPV.txt" => "oddb2xml_files_lppv.txt",
259
+ "http://www.xn--spezialittenliste-yqb.ch/File.axd?file=XMLPublications.zip" => "XMLPublications.zip",
260
+ # 'http://refdatabase.refdata.ch/Service/Article.asmx?WSDL' => 'refdata_Pharma.xml
261
+ "http://www.spezialitaetenliste.ch/varia_De.htm" => "varia_De.htm"}.each do |url, file|
262
+ inhalt = File.read(File.join(Oddb2xml::SpecData, file))
263
+ m = flexmock("open-uri")
264
+ m.should_receive(:open).with(url).and_return(inhalt)
265
+ stub_request(:any, url).to_return(body: inhalt)
266
+ stub_request(:get, url).to_return(body: inhalt)
267
+ stub_request(:open, url).to_return(body: inhalt)
268
+ end
269
+ VCR.eject_cassette
270
+ VCR.insert_cassette("oddb2xml")
271
271
  end
data/test_options.rb CHANGED
@@ -5,66 +5,63 @@
5
5
  # - runs all commands (and add ---skip-download)
6
6
  # - saveds output and downloads to ausgabe/time_stamp
7
7
 
8
-
9
- require 'fileutils'
10
- require 'socket'
11
- require 'oddb2xml/version'
8
+ require "fileutils"
9
+ require "socket"
10
+ require "oddb2xml/version"
12
11
 
13
12
  def test_one_call(cmd)
14
- dest = File.join(Ausgabe, cmd.gsub(/[ -]/, '_'))
15
- all_downloads = File.join(dest, 'downloads')
16
- FileUtils.makedirs(all_downloads) unless File.exists?(all_downloads)
17
- cmd.sub!('oddb2xml', 'oddb2xml --skip-download --log')
18
- files = (Dir.glob('%.xls*') + Dir.glob('*.dat*') + Dir.glob('*.xml'))
19
- FileUtils.rm(files, :verbose => true)
13
+ dest = File.join(Ausgabe, cmd.gsub(/[ -]/, "_"))
14
+ all_downloads = File.join(dest, "downloads")
15
+ FileUtils.makedirs(all_downloads) unless File.exist?(all_downloads)
16
+ cmd.sub!("oddb2xml", "oddb2xml --skip-download --log")
17
+ files = (Dir.glob("%.xls*") + Dir.glob("*.dat*") + Dir.glob("*.xml"))
18
+ FileUtils.rm(files, verbose: true)
20
19
  puts "#{Time.now}: Running cmd #{cmd}"
21
- startTime = Time.now
20
+ start_time = Time.now
22
21
  res = system(cmd)
23
- endTime = Time.now
24
- diffSeconds = (endTime - startTime).to_i
25
- duration = "#{Time.now}: Took #{sprintf('%3d', diffSeconds)} seconds for"
22
+ end_time = Time.now
23
+ diff_seconds = (end_time - start_time).to_i
24
+ duration = "#{Time.now}: Took #{sprintf("%3d", diff_seconds)} seconds for"
26
25
  puts "#{duration} success #{res} for #{cmd}"
27
26
  exit 2 unless res
28
27
  FileUtils.makedirs(dest)
29
- return unless File.directory?('downloads')
30
- FileUtils.cp_r('downloads', dest, :preserve => true, :verbose => true) if Dir.glob(Ausgabe).size > 0
31
- FileUtils.cp(Dir.glob('*.dat'), dest, :preserve => true, :verbose => true) if Dir.glob('*.dat').size > 0
32
- FileUtils.cp(Dir.glob('*.xml'), dest, :preserve => true, :verbose => true) if Dir.glob('*.xml').size > 0
33
- FileUtils.cp(Dir.glob('*.gz'), dest, :preserve => true, :verbose => true) if Dir.glob('*.gz').size > 0
28
+ return unless File.directory?("downloads")
29
+ FileUtils.cp_r("downloads", dest, preserve: true, verbose: true) if Dir.glob(Ausgabe).size > 0
30
+ FileUtils.cp(Dir.glob("*.dat"), dest, preserve: true, verbose: true) if Dir.glob("*.dat").size > 0
31
+ FileUtils.cp(Dir.glob("*.xml"), dest, preserve: true, verbose: true) if Dir.glob("*.xml").size > 0
32
+ FileUtils.cp(Dir.glob("*.gz"), dest, preserve: true, verbose: true) if Dir.glob("*.gz").size > 0
34
33
  downloaded_files = Dir.glob("#{dest}/*/downloads/*")
35
- FileUtils.mv(downloaded_files, all_downloads, :verbose => true) if downloaded_files.size > 0
36
- FileUtils.rm(Dir.glob("#{dest}/*#{Time.now.year}*.xml"), :verbose => true)
34
+ FileUtils.mv(downloaded_files, all_downloads, verbose: true) if downloaded_files.size > 0
35
+ FileUtils.rm(Dir.glob("#{dest}/*#{Time.now.year}*.xml"), verbose: true)
37
36
  end
38
37
 
39
38
  def prepare_for_gem_test
40
- [ "rake clean gem install" , # build and install our gem first
41
- # "gem uninstall --all --ignore-dependencies --executables",
42
- "gem install --no-ri --no-rdoc pkg/*.gem"
43
- ].each {
44
- |cmd|
45
- puts "Running #{cmd}"
46
- exit 1 unless system(cmd)
39
+ ["rake clean gem install", # build and install our gem first
40
+ # "gem uninstall --all --ignore-dependencies --executables",
41
+ "gem install --no-ri --no-rdoc pkg/*.gem"].each { |cmd|
42
+ puts "Running #{cmd}"
43
+ exit 1 unless system(cmd)
47
44
  }
48
45
  end
49
46
 
50
- Ausgabe = File.join(Dir.pwd, 'ausgabe', "#{Oddb2xml::VERSION}-#{Time.now.strftime('%Y.%m.%d')}")
47
+ Ausgabe = File.join(Dir.pwd, "ausgabe", "#{Oddb2xml::VERSION}-#{Time.now.strftime("%Y.%m.%d")}")
51
48
  puts "FQDN hostname #{Socket.gethostbyname(Socket.gethostname).inspect}"
52
49
  FileUtils.makedirs(Ausgabe)
53
50
  prepare_for_gem_test
54
51
  # we will skip some long running tests as travis jobs must finish in less than 50 minutes
55
52
  # unfortunately it returns a very common name
56
- unless 'localhost.localdomain'.eql?(Socket.gethostbyname(Socket.gethostname).first)
57
- test_one_call('oddb2xml -e')
58
- test_one_call('oddb2xml --artikelstamm')
59
- test_one_call('oddb2xml -e -I80')
60
- test_one_call('oddb2xml -f dat --append -I 80')
61
- test_one_call('oddb2xml -f dat --append')
62
- test_one_call('oddb2xml --append')
53
+ unless "localhost.localdomain".eql?(Socket.gethostbyname(Socket.gethostname).first)
54
+ test_one_call("oddb2xml -e")
55
+ test_one_call("oddb2xml --artikelstamm")
56
+ test_one_call("oddb2xml -e -I80")
57
+ test_one_call("oddb2xml -f dat --append -I 80")
58
+ test_one_call("oddb2xml -f dat --append")
59
+ test_one_call("oddb2xml --append")
63
60
  end
64
- test_one_call('oddb2xml --calc')
65
- test_one_call('oddb2xml -t md -c tar.gz')
66
- test_one_call('oddb2xml -o')
67
- test_one_call('oddb2xml -f xml')
68
- test_one_call('oddb2xml -f dat')
69
- test_one_call('oddb2xml -t md')
61
+ test_one_call("oddb2xml --calc")
62
+ test_one_call("oddb2xml -t md -c tar.gz")
63
+ test_one_call("oddb2xml -o")
64
+ test_one_call("oddb2xml -f xml")
65
+ test_one_call("oddb2xml -f dat")
66
+ test_one_call("oddb2xml -t md")
70
67
  # test_one_call('oddb2xml -x address')
@@ -1,13 +1,12 @@
1
- require 'net/http'
1
+ require "net/http"
2
2
 
3
3
  # create a path to the file "C:\%HOME%\cacert.pem"
4
4
  cacert_file = File.join(Dir.home, "cacert.pem")
5
5
 
6
6
  Net::HTTP.start("curl.haxx.se") do |http|
7
-
8
7
  resp = http.get("/ca/cacert.pem")
9
8
  if resp.code == "200"
10
- open(cacert_file, "wb") { |file| file.write(resp.body) }
9
+ File.open(cacert_file, "wb") { |file| file.write(resp.body) }
11
10
  puts "\n\nA bundle of certificate authorities has been installed to"
12
11
  puts "C:\\%HOME%\\cacert.pem\n"
13
12
  puts "* Please set SSL_CERT_FILE in your current command prompt session with:"