oddb2xml 2.1.7 → 2.1.8
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/Gemfile +1 -0
- data/Gemfile.lock +60 -54
- data/History.txt +9 -0
- data/README.md +3 -0
- data/lib/oddb2xml/builder.rb +278 -300
- data/lib/oddb2xml/cli.rb +45 -55
- data/lib/oddb2xml/downloader.rb +23 -19
- data/lib/oddb2xml/extractor.rb +19 -21
- data/lib/oddb2xml/util.rb +2 -1
- data/lib/oddb2xml/version.rb +1 -1
- data/lib/oddb2xml/xml_definitions.rb +29 -12
- data/oddb2xml.gemspec +14 -10
- data/spec/builder_spec.rb +318 -406
- data/spec/calc_spec.rb +7 -14
- data/spec/cli_spec.rb +119 -51
- data/spec/downloader_spec.rb +372 -115
- data/spec/extractor_spec.rb +126 -44
- data/spec/fixtures/vcr_cassettes/oddb2xml.json +1 -0
- data/spec/galenic_spec.rb +1 -3
- data/spec/options_spec.rb +0 -13
- data/spec/parslet_spec.rb +0 -6
- data/spec/spec_helper.rb +105 -240
- data/test_options.rb +7 -2
- metadata +92 -50
- data/spec/data/swissindex.xml +0 -56
- data/spec/data/swissindex_NonPharma_DE.xml +0 -65
- data/spec/data/swissindex_NonPharma_FR.xml +0 -65
- data/spec/data/swissindex_Pharma_DE.xml +0 -82
- data/spec/data/swissindex_Pharma_FR.xml +0 -82
- data/spec/data/swissindex_nonpharma.xml +0 -65
- data/spec/data/swissindex_pharma.xml +0 -82
- data/spec/data/swissmedic_package-galenic.xlsx +0 -0
data/lib/oddb2xml/cli.rb
CHANGED
@@ -13,17 +13,17 @@ require 'date' # for today
|
|
13
13
|
module Oddb2xml
|
14
14
|
|
15
15
|
class Cli
|
16
|
+
attr_reader :options
|
16
17
|
SUBJECTS = %w[product article]
|
17
18
|
ADDITIONS = %w[substance limitation interaction code]
|
18
19
|
OPTIONALS = %w[fi fi_product]
|
19
|
-
LANGUAGES = %w[DE FR] # EN does not exist
|
20
20
|
def initialize(args)
|
21
21
|
@options = args
|
22
22
|
Oddb2xml.save_options(@options)
|
23
23
|
@mutex = Mutex.new
|
24
24
|
# product
|
25
|
-
@items = {} # Items from Preparations.xml in BAG
|
26
|
-
@
|
25
|
+
@items = {} # Items from Preparations.xml in BAG, using GTINs as key
|
26
|
+
@refdata_types = {} # Base index from refdata
|
27
27
|
@flags = {} # narcotics flag files repo
|
28
28
|
@lppvs = {} # lppv.txt from files repo
|
29
29
|
@infos = {} # [option] FI from SwissmedicInfo
|
@@ -36,9 +36,6 @@ module Oddb2xml
|
|
36
36
|
# addres
|
37
37
|
@companies = [] # betrieb
|
38
38
|
@people = [] # medizinalperson
|
39
|
-
LANGUAGES.each do |lang|
|
40
|
-
@index[lang] = {}
|
41
|
-
end
|
42
39
|
@_message = false
|
43
40
|
end
|
44
41
|
def run
|
@@ -69,14 +66,12 @@ module Oddb2xml
|
|
69
66
|
threads << download(:bm_update) # oddb2xml_files
|
70
67
|
threads << download(:lppv) # oddb2xml_files
|
71
68
|
threads << download(:bag) # bag.e-mediat
|
72
|
-
|
73
|
-
|
74
|
-
threads << download(:index, type, lang) # swissindex
|
75
|
-
end
|
69
|
+
types.each do |type|
|
70
|
+
threads << download(:refdata, type) # refdata
|
76
71
|
end
|
77
72
|
end
|
78
73
|
begin
|
79
|
-
threads.map(&:join)
|
74
|
+
# threads.map(&:join) # TODO
|
80
75
|
rescue SystemExit
|
81
76
|
@mutex.synchronize do
|
82
77
|
if @_message
|
@@ -95,6 +90,7 @@ module Oddb2xml
|
|
95
90
|
private
|
96
91
|
def build
|
97
92
|
Oddb2xml.log("Start build")
|
93
|
+
puts "#{File.basename(__FILE__)}:#{__LINE__}: @refdata_types.keys #{@refdata_types.keys}"
|
98
94
|
begin
|
99
95
|
# require 'pry'; binding.pry
|
100
96
|
@_files = {"calc"=>"oddb_calc.xml"} if @options[:calc] and not @options[:extended]
|
@@ -109,14 +105,11 @@ module Oddb2xml
|
|
109
105
|
builder.people = @people
|
110
106
|
else # product
|
111
107
|
if @options[:format] != :dat
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
types.each do |type|
|
116
|
-
index[lang].merge!(@index[lang][type]) if @index[lang][type]
|
117
|
-
end
|
108
|
+
refdata = {}
|
109
|
+
types.each do |type|
|
110
|
+
refdata.merge!(@refdata_types[type]) if @refdata_types[type]
|
118
111
|
end
|
119
|
-
builder.
|
112
|
+
builder.refdata = refdata
|
120
113
|
builder.subject = sbj
|
121
114
|
end
|
122
115
|
# common sources
|
@@ -136,12 +129,9 @@ module Oddb2xml
|
|
136
129
|
output = ''
|
137
130
|
if !@options[:address] and (@options[:format] == :dat)
|
138
131
|
types.each do |type|
|
139
|
-
|
140
|
-
LANGUAGES.each do |lang|
|
141
|
-
index[lang] = @index[lang][type]
|
142
|
-
end
|
132
|
+
refdata1 = {}
|
143
133
|
_sbj = (type == :pharma ? :dat : :with_migel_dat)
|
144
|
-
builder.
|
134
|
+
builder.refdata = @refdata_types[type]
|
145
135
|
builder.subject = _sbj
|
146
136
|
builder.ean14 = @options[:ean14]
|
147
137
|
if type == :nonpharma
|
@@ -166,11 +156,11 @@ module Oddb2xml
|
|
166
156
|
raise Interrupt
|
167
157
|
end
|
168
158
|
end
|
169
|
-
def download(what, type=nil
|
159
|
+
def download(what, type=nil)
|
170
160
|
case what
|
171
161
|
when :company, :person
|
172
162
|
var = (what == :company ? 'companies' : 'people')
|
173
|
-
Thread.new do
|
163
|
+
begin # instead of Thread.new do
|
174
164
|
downloader = MedregbmDownloader.new(what)
|
175
165
|
str = downloader.download
|
176
166
|
self.instance_variable_set(
|
@@ -179,7 +169,7 @@ module Oddb2xml
|
|
179
169
|
)
|
180
170
|
end
|
181
171
|
when :fachinfo
|
182
|
-
Thread.new do
|
172
|
+
begin # instead of Thread.new do
|
183
173
|
downloader = SwissmedicInfoDownloader.new
|
184
174
|
xml = downloader.download
|
185
175
|
@mutex.synchronize do
|
@@ -190,7 +180,7 @@ module Oddb2xml
|
|
190
180
|
end
|
191
181
|
when :orphan, :fridge
|
192
182
|
var = what.to_s + 's'
|
193
|
-
Thread.new do
|
183
|
+
begin # instead of Thread.new do
|
194
184
|
downloader = SwissmedicDownloader.new(what)
|
195
185
|
bin = downloader.download
|
196
186
|
self.instance_variable_set(
|
@@ -200,7 +190,7 @@ module Oddb2xml
|
|
200
190
|
# Oddb2xml.log("SwissmedicExtractor added #{self.instance_variable_get("@#{var}".intern).size} #{var}. File #{bin} was #{File.size(bin)} bytes")
|
201
191
|
end
|
202
192
|
when :interaction
|
203
|
-
Thread.new do
|
193
|
+
begin # instead of Thread.new do
|
204
194
|
downloader = EphaDownloader.new
|
205
195
|
str = downloader.download
|
206
196
|
@mutex.synchronize do
|
@@ -209,7 +199,7 @@ module Oddb2xml
|
|
209
199
|
end
|
210
200
|
end
|
211
201
|
when :migel
|
212
|
-
Thread.new do
|
202
|
+
begin # instead of Thread.new do
|
213
203
|
downloader = MigelDownloader.new
|
214
204
|
bin = downloader.download
|
215
205
|
@mutex.synchronize do
|
@@ -218,7 +208,7 @@ module Oddb2xml
|
|
218
208
|
end
|
219
209
|
end
|
220
210
|
when :package
|
221
|
-
Thread.new do
|
211
|
+
begin # instead of Thread.new do
|
222
212
|
downloader = SwissmedicDownloader.new(:package, @options)
|
223
213
|
bin = downloader.download
|
224
214
|
@mutex.synchronize do
|
@@ -228,7 +218,7 @@ module Oddb2xml
|
|
228
218
|
end
|
229
219
|
end
|
230
220
|
when :bm_update
|
231
|
-
Thread.new do
|
221
|
+
begin # instead of Thread.new do
|
232
222
|
downloader = BMUpdateDownloader.new
|
233
223
|
str = downloader.download
|
234
224
|
@mutex.synchronize do
|
@@ -237,7 +227,7 @@ module Oddb2xml
|
|
237
227
|
end
|
238
228
|
end
|
239
229
|
when :lppv
|
240
|
-
Thread.new do
|
230
|
+
begin # instead of Thread.new do
|
241
231
|
downloader = LppvDownloader.new
|
242
232
|
str = downloader.download
|
243
233
|
@mutex.synchronize do
|
@@ -246,31 +236,33 @@ module Oddb2xml
|
|
246
236
|
end
|
247
237
|
end
|
248
238
|
when :bag
|
249
|
-
Thread.new do
|
239
|
+
begin # instead of Thread.new do
|
250
240
|
downloader = BagXmlDownloader.new(@options)
|
251
241
|
xml = downloader.download
|
252
242
|
@mutex.synchronize do
|
253
243
|
hsh = BagXmlExtractor.new(xml).to_hash
|
254
244
|
@items = hsh
|
255
|
-
Oddb2xml.log("BagXmlDownloader added #{@items.size} items")
|
245
|
+
Oddb2xml.log("BagXmlDownloader added #{@items.size} items. #{@items.keys}")
|
256
246
|
end
|
257
247
|
end
|
258
248
|
when :zurrose
|
259
|
-
Thread.new do
|
249
|
+
begin # instead of Thread.new do
|
260
250
|
downloader = ZurroseDownloader.new(@options, @options[:transfer_dat])
|
261
251
|
xml = downloader.download
|
262
252
|
Oddb2xml.log("zurrose xml #{xml.size} bytes")
|
263
253
|
@mutex.synchronize do
|
264
254
|
hsh = ZurroseExtractor.new(xml, @options[:extended]).to_hash
|
255
|
+
Oddb2xml.log("zurrose added #{hsh.size} items from xml with #{xml.size} bytes")
|
265
256
|
@infos_zur_rose = hsh
|
266
|
-
Oddb2xml.log("zurrose added #{@infos_zur_rose.size} items from xml with #{xml.size} bytes")
|
267
257
|
end
|
268
258
|
end
|
269
|
-
when :
|
270
|
-
Thread.new do
|
271
|
-
downloader =
|
259
|
+
when :refdata
|
260
|
+
begin # instead of Thread.new do
|
261
|
+
downloader = RefdataDownloader.new(@options, type)
|
272
262
|
begin
|
273
263
|
xml = downloader.download
|
264
|
+
Oddb2xml.log("refdata #{type} xml #{xml.size} bytes")
|
265
|
+
xml
|
274
266
|
rescue SystemExit
|
275
267
|
@mutex.synchronize do
|
276
268
|
unless @_message # hook only one exit
|
@@ -280,8 +272,9 @@ module Oddb2xml
|
|
280
272
|
end
|
281
273
|
end
|
282
274
|
@mutex.synchronize do
|
283
|
-
hsh =
|
284
|
-
@
|
275
|
+
hsh = RefdataExtractor.new(xml, type).to_hash
|
276
|
+
@refdata_types[type] = hsh
|
277
|
+
Oddb2xml.log("refdata #{type} added #{hsh.size} keys now #{@refdata_types.keys} items from xml with #{xml.size} bytes")
|
285
278
|
end
|
286
279
|
end
|
287
280
|
end
|
@@ -335,19 +328,16 @@ module Oddb2xml
|
|
335
328
|
lines << ParseComposition.report
|
336
329
|
end
|
337
330
|
unless @options[:address]
|
338
|
-
|
339
|
-
|
340
|
-
|
341
|
-
if
|
342
|
-
|
343
|
-
|
344
|
-
|
345
|
-
|
346
|
-
|
347
|
-
|
348
|
-
else
|
349
|
-
lines << sprintf("\tPharma products: %i", indices)
|
350
|
-
end
|
331
|
+
types.each do |type|
|
332
|
+
if @refdata_types[type]
|
333
|
+
indices = @refdata_types[type].values.flatten.length
|
334
|
+
if type == :nonpharma
|
335
|
+
migel_xls = @migel.values.compact.select{|m| !m[:pharmacode].empty? }.map{|m| m[:pharmacode] }
|
336
|
+
nonpharmas = @refdata_types[type].keys
|
337
|
+
indices += (migel_xls - nonpharmas).length # ignore duplicates, null
|
338
|
+
lines << sprintf("\tNonPharma products: %i", indices)
|
339
|
+
else
|
340
|
+
lines << sprintf("\tPharma products: %i", indices)
|
351
341
|
end
|
352
342
|
end
|
353
343
|
end
|
@@ -365,7 +355,7 @@ module Oddb2xml
|
|
365
355
|
end
|
366
356
|
puts lines.join("\n")
|
367
357
|
end
|
368
|
-
def types #
|
358
|
+
def types # RefData
|
369
359
|
@_types ||=
|
370
360
|
if @options[:nonpharma]
|
371
361
|
[:pharma, :nonpharma]
|
data/lib/oddb2xml/downloader.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
|
3
|
+
require 'net/ntlm/version' # needed to avoid error: uninitialized constant Net::NTLM::VERSION
|
4
|
+
require 'rubyntlm'
|
3
5
|
require 'mechanize'
|
4
6
|
require 'zip'
|
5
7
|
require 'savon'
|
@@ -34,7 +36,7 @@ module Oddb2xml
|
|
34
36
|
end
|
35
37
|
end
|
36
38
|
class Downloader
|
37
|
-
attr_reader :type
|
39
|
+
attr_reader :type, :agent
|
38
40
|
def initialize(options={}, url=nil)
|
39
41
|
@options = options
|
40
42
|
@url = url
|
@@ -55,6 +57,7 @@ module Oddb2xml
|
|
55
57
|
cert_store.add_file(File.expand_path('../../../tools/cacert.pem', __FILE__))
|
56
58
|
@agent.cert_store = cert_store
|
57
59
|
end
|
60
|
+
@agent.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
58
61
|
end
|
59
62
|
protected
|
60
63
|
def retrievable?
|
@@ -133,14 +136,14 @@ module Oddb2xml
|
|
133
136
|
class BMUpdateDownloader < Downloader
|
134
137
|
include DownloadMethod
|
135
138
|
def download
|
136
|
-
@url ||= 'https://raw.
|
139
|
+
@url ||= 'https://raw.githubusercontent.com/zdavatz/oddb2xml_files/master/BM_Update.txt'
|
137
140
|
download_as('oddb2xml_files_bm_update.txt', 'r')
|
138
141
|
end
|
139
142
|
end
|
140
143
|
class LppvDownloader < Downloader
|
141
144
|
include DownloadMethod
|
142
145
|
def download
|
143
|
-
@url ||= 'https://raw.
|
146
|
+
@url ||= 'https://raw.githubusercontent.com/zdavatz/oddb2xml_files/master/LPPV.txt'
|
144
147
|
download_as('oddb2xml_files_lppv.txt', 'r')
|
145
148
|
end
|
146
149
|
end
|
@@ -203,11 +206,10 @@ module Oddb2xml
|
|
203
206
|
content
|
204
207
|
end
|
205
208
|
end
|
206
|
-
class
|
207
|
-
def initialize(options={}, type=:pharma
|
209
|
+
class RefdataDownloader < Downloader
|
210
|
+
def initialize(options={}, type=:pharma)
|
208
211
|
@type = (type == :pharma ? 'Pharma' : 'NonPharma')
|
209
|
-
|
210
|
-
url = "https://index.ws.e-mediat.net/Swissindex/#{@type}/ws_#{@type}_V101.asmx?WSDL"
|
212
|
+
url = "http://refdatabase.refdata.ch/Service/Article.asmx?WSDL"
|
211
213
|
super(options, url)
|
212
214
|
end
|
213
215
|
def init
|
@@ -222,19 +224,21 @@ module Oddb2xml
|
|
222
224
|
end
|
223
225
|
def download
|
224
226
|
begin
|
225
|
-
filename = "
|
226
|
-
file2save = File.join(Downloads, "
|
227
|
+
filename = "refdata_#{@type}.xml"
|
228
|
+
file2save = File.join(Downloads, "refdata_#{@type}.xml")
|
229
|
+
soap = %(<?xml version="1.0" encoding="UTF-8"?>
|
230
|
+
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://refdatabase.refdata.ch/Article_in" xmlns:ns2="http://refdatabase.refdata.ch/">
|
231
|
+
<SOAP-ENV:Body>
|
232
|
+
<ns2:DownloadArticleInput>
|
233
|
+
<ns1:ATYPE>#{@type.upcase}</ns1:ATYPE>
|
234
|
+
</ns2:DownloadArticleInput>
|
235
|
+
</SOAP-ENV:Body>
|
236
|
+
</SOAP-ENV:Envelope>
|
237
|
+
</ns1:ATYPE></ns2:DownloadArticleInput></SOAP-ENV:Body>
|
238
|
+
)
|
227
239
|
return IO.read(file2save) if Oddb2xml.skip_download? and File.exists?(file2save)
|
228
240
|
FileUtils.rm_f(file2save, :verbose => false)
|
229
|
-
|
230
|
-
<?xml version="1.0" encoding="utf-8"?>
|
231
|
-
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
|
232
|
-
<soap:Body>
|
233
|
-
<lang xmlns="http://swissindex.e-mediat.net/Swissindex#{@type}_out_V101">#{@lang}</lang>
|
234
|
-
</soap:Body>
|
235
|
-
</soap:Envelope>
|
236
|
-
XML
|
237
|
-
response = @client.call(:download_all, :xml => soap)
|
241
|
+
response = @client.call(:download, :xml => soap)
|
238
242
|
if response.success?
|
239
243
|
if xml = response.to_xml
|
240
244
|
response = nil # win
|
@@ -282,7 +286,7 @@ XML
|
|
282
286
|
begin
|
283
287
|
FileUtils.rm(File.expand_path(file), :verbose => !defined?(RSpec)) if File.exists?(File.expand_path(file))
|
284
288
|
page = @agent.get(@url)
|
285
|
-
if link_node = page.search(@xpath).first
|
289
|
+
if !page.class.is_a?(String) and link_node = page.search(@xpath).first
|
286
290
|
link = Mechanize::Page::Link.new(link_node, @agent, page)
|
287
291
|
response = link.click
|
288
292
|
response.save_as(file)
|
data/lib/oddb2xml/extractor.rb
CHANGED
@@ -8,7 +8,6 @@ require 'csv'
|
|
8
8
|
require 'oddb2xml/xml_definitions'
|
9
9
|
|
10
10
|
module Oddb2xml
|
11
|
-
Strip_For_Sax_Machine = '<?xml version="1.0" encoding="utf-8"?>'+"\n"
|
12
11
|
module TxtExtractorMethods
|
13
12
|
def initialize(str)
|
14
13
|
@io = StringIO.new(str)
|
@@ -83,8 +82,9 @@ module Oddb2xml
|
|
83
82
|
phar = pac.Pharmacode
|
84
83
|
phar = correct_code(phar.to_s, 7)
|
85
84
|
ean = pac.GTIN
|
85
|
+
binding.pry if pac.GTIN.to_s.eql? '7680324750190' # lansoyl
|
86
86
|
search_key = phar.to_i != 0 ? phar : ean
|
87
|
-
# as common key with
|
87
|
+
# as common key with RefData Pharma/NonPharma data
|
88
88
|
item[:pharmacodes] << phar
|
89
89
|
# packages
|
90
90
|
exf = {:price => '', :valid_date => '', :price_code => ''}
|
@@ -178,38 +178,34 @@ module Oddb2xml
|
|
178
178
|
end
|
179
179
|
end
|
180
180
|
|
181
|
-
class
|
181
|
+
class RefdataExtractor < Extractor
|
182
182
|
def initialize(xml, type)
|
183
183
|
@type = (type == :pharma ? 'PHARMA' : 'NONPHARMA')
|
184
184
|
super(xml)
|
185
185
|
end
|
186
186
|
def to_hash
|
187
187
|
data = {}
|
188
|
-
result =
|
189
|
-
items = result.
|
188
|
+
result = SwissRegArticleEntry.parse(@xml.sub(Strip_For_Sax_Machine, ''), :lazy => true)
|
189
|
+
items = result.ARTICLE.ITEM
|
190
190
|
items.each do |pac|
|
191
191
|
item = {}
|
192
192
|
item[:refdata] = true
|
193
|
-
item[:_type] =
|
193
|
+
item[:_type] = (typ = pac.ATYPE.downcase.to_sym) ? typ: ''
|
194
194
|
item[:ean] = (gtin = pac.GTIN) ? gtin: ''
|
195
195
|
item[:pharmacode] = (phar = pac.PHAR) ? phar: ''
|
196
|
-
item[:
|
197
|
-
item[:
|
198
|
-
item[:
|
196
|
+
item[:last_change] = (date = Time.parse(pac.DT).to_s) ? date: '' # Date and time of last data change
|
197
|
+
item[:desc_de] = (dscr = pac.NAME_DE) ? dscr: ''
|
198
|
+
item[:desc_fr] = (dscr = pac.NAME_FR) ? dscr: ''
|
199
199
|
item[:atc_code] = (code = pac.ATC) ? code.to_s : ''
|
200
|
-
|
201
|
-
|
202
|
-
if comp = pac.COMP
|
203
|
-
item[:company_name] = (nam = comp.NAME) ? nam: ''
|
204
|
-
item[:company_ean] = (gln = comp.GLN) ? gln: ''
|
205
|
-
end
|
200
|
+
item[:company_name] = (nam = pac.AUTH_HOLDER_NAME) ? nam: ''
|
201
|
+
item[:company_ean] = (gln = pac.AUTH_HOLDER_GLN) ? gln: ''
|
206
202
|
unless item[:pharmacode].empty?
|
207
203
|
item[:pharmacode] = correct_code(item[:pharmacode].to_s, 7)
|
208
204
|
unless data[item[:pharmacode]] # pharmacode => GTINs
|
209
|
-
data[item[:
|
205
|
+
data[item[:ean]] = []
|
210
206
|
end
|
211
|
-
data[item[:pharmacode]] << item
|
212
207
|
end
|
208
|
+
data[item[:ean]] = item
|
213
209
|
end
|
214
210
|
data
|
215
211
|
end
|
@@ -327,13 +323,15 @@ module Oddb2xml
|
|
327
323
|
@sheet.each_with_index do |row, i|
|
328
324
|
next if i.zero?
|
329
325
|
phar = correct_code(row[1].to_s.gsub(/[^0-9]/, ''), 7)
|
330
|
-
|
326
|
+
ean = row[0].to_i.to_s
|
327
|
+
ean = '9999'+phar+'99' unless ean.length == 13
|
328
|
+
data[ean] = {
|
331
329
|
:refdata => true,
|
332
|
-
:ean =>
|
330
|
+
:ean => ean,
|
333
331
|
:pharmacode => phar,
|
334
332
|
:desc_de => row[3],
|
335
333
|
:desc_fr => row[4],
|
336
|
-
:
|
334
|
+
:quantity => row[5], # quantity
|
337
335
|
:company_name => row[6],
|
338
336
|
:company_ean => row[7].to_i.to_s,
|
339
337
|
}
|
@@ -497,7 +495,7 @@ module Oddb2xml
|
|
497
495
|
:ean => ean13,
|
498
496
|
:vat => line[96],
|
499
497
|
:description => line[10..59].sub(/\s+$/, ''),
|
500
|
-
:
|
498
|
+
:quantity => '',
|
501
499
|
:pharmacode => pharma_code,
|
502
500
|
:price => sprintf("%.2f", line[60,6].gsub(/(\d{2})$/, '.\1').to_f),
|
503
501
|
:pub_price => sprintf("%.2f", line[66,6].gsub(/(\d{2})$/, '.\1').to_f),
|
data/lib/oddb2xml/util.rb
CHANGED
@@ -33,7 +33,7 @@ module Oddb2xml
|
|
33
33
|
end
|
34
34
|
|
35
35
|
def Oddb2xml.log(msg)
|
36
|
-
return unless @options[:log]
|
36
|
+
# return unless @options[:log]
|
37
37
|
$stdout.puts "#{Time.now.strftime("%Y-%m-%d %H:%M:%S")}: #{msg}"
|
38
38
|
$stdout.flush
|
39
39
|
end
|
@@ -47,6 +47,7 @@ module Oddb2xml
|
|
47
47
|
end
|
48
48
|
|
49
49
|
def Oddb2xml.skip_download(file)
|
50
|
+
return false if defined?(VCR)
|
50
51
|
dest = "#{Downloads}/#{File.basename(file)}"
|
51
52
|
if File.exists?(dest)
|
52
53
|
FileUtils.cp(dest, file, :verbose => false, :preserve => true) unless File.expand_path(file).eql?(dest)
|
data/lib/oddb2xml/version.rb
CHANGED
@@ -3,6 +3,8 @@
|
|
3
3
|
|
4
4
|
require 'sax-machine'
|
5
5
|
|
6
|
+
Strip_For_Sax_Machine = '<?xml version="1.0" encoding="utf-8"?>'+"\n"
|
7
|
+
|
6
8
|
class PriceElement
|
7
9
|
include SAXMachine
|
8
10
|
element :Price
|
@@ -210,18 +212,6 @@ class ItemContent
|
|
210
212
|
element :COMP, :class => CompElement
|
211
213
|
end
|
212
214
|
|
213
|
-
class PharmaContent
|
214
|
-
include SAXMachine
|
215
|
-
attribute :CREATION_DATETIME
|
216
|
-
elements :ITEM, :class => ItemContent
|
217
|
-
end
|
218
|
-
|
219
|
-
class PharmaEntry
|
220
|
-
include SAXMachine
|
221
|
-
element :CREATION_DATETIME
|
222
|
-
element :PHARMA, :class => PharmaContent
|
223
|
-
end
|
224
|
-
|
225
215
|
class MedicalInformationContent
|
226
216
|
include SAXMachine
|
227
217
|
attribute :type
|
@@ -230,6 +220,7 @@ class MedicalInformationContent
|
|
230
220
|
element :title
|
231
221
|
element :authHolder
|
232
222
|
element :authNrs
|
223
|
+
element :authNrs
|
233
224
|
element :style
|
234
225
|
element :content
|
235
226
|
end
|
@@ -249,3 +240,29 @@ class MedicalInformationsEntry
|
|
249
240
|
element :medicalInformations, :class => MedicalInformationsContent
|
250
241
|
end
|
251
242
|
|
243
|
+
class SwissRegItemContentContent
|
244
|
+
include SAXMachine
|
245
|
+
attribute :DT
|
246
|
+
element :ATYPE
|
247
|
+
element :GTIN
|
248
|
+
element :PHAR
|
249
|
+
element :SWMC_AUTHNR
|
250
|
+
element :NAME_DE
|
251
|
+
element :NAME_FR
|
252
|
+
element :ADDSCR
|
253
|
+
element :ATC
|
254
|
+
element :AUTH_HOLDER_NAME
|
255
|
+
element :AUTH_HOLDER_GLN
|
256
|
+
end
|
257
|
+
|
258
|
+
class SwissRegArticleContent
|
259
|
+
include SAXMachine
|
260
|
+
attribute :CREATION_DATETIME
|
261
|
+
elements :ITEM, :class => SwissRegItemContentContent
|
262
|
+
end
|
263
|
+
|
264
|
+
class SwissRegArticleEntry
|
265
|
+
include SAXMachine
|
266
|
+
element :CREATION_DATETIME
|
267
|
+
element :ARTICLE, :class => SwissRegArticleContent
|
268
|
+
end
|
data/oddb2xml.gemspec
CHANGED
@@ -20,20 +20,24 @@ Gem::Specification.new do |spec|
|
|
20
20
|
# We fix the version of the spec to newer versions only in the third position
|
21
21
|
# hoping that these version fix only security/severe bugs
|
22
22
|
# Consulted the Gemfile.lock to get
|
23
|
-
spec.add_dependency 'rubyzip'
|
24
|
-
spec.add_dependency 'archive-tar-minitar'
|
25
|
-
spec.add_dependency 'mechanize'
|
26
|
-
spec.add_dependency 'nokogiri'
|
27
|
-
spec.add_dependency 'savon'
|
28
|
-
spec.add_dependency 'spreadsheet'
|
29
|
-
spec.add_dependency 'rubyXL'
|
30
|
-
spec.add_dependency 'sax-machine'
|
31
|
-
spec.add_dependency 'parslet'
|
32
|
-
|
23
|
+
spec.add_dependency 'rubyzip'#, '~> 1.1.3'
|
24
|
+
spec.add_dependency 'archive-tar-minitar'#, '~> 0.5.2'
|
25
|
+
spec.add_dependency 'mechanize'#, '~> 2.5.1'
|
26
|
+
spec.add_dependency 'nokogiri'#, '~> 1.6.0'
|
27
|
+
spec.add_dependency 'savon'#, '~> 2.11.0'
|
28
|
+
spec.add_dependency 'spreadsheet'#, '~> 1.0.0'
|
29
|
+
spec.add_dependency 'rubyXL'#, '~> 3.3.1'
|
30
|
+
spec.add_dependency 'sax-machine'#, '~> 0.1.0'
|
31
|
+
spec.add_dependency 'parslet'#, '~> 1.7.0'
|
32
|
+
spec.add_dependency 'rubyntlm'#, '>= 0.3.2'
|
33
|
+
spec.add_dependency 'multi_json'#, '>= 0.3.2'
|
34
|
+
|
33
35
|
spec.add_development_dependency "bundler"
|
34
36
|
spec.add_development_dependency "rake"
|
35
37
|
spec.add_development_dependency "rspec"
|
36
38
|
spec.add_development_dependency "webmock"
|
37
39
|
spec.add_development_dependency "rdoc"
|
40
|
+
spec.add_development_dependency "vcr"
|
41
|
+
spec.add_development_dependency "timecop"
|
38
42
|
end
|
39
43
|
|