oddb2xml 1.6.6 → 1.6.7
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.
- data/Gemfile +1 -0
- data/Gemfile.lock +2 -0
- data/History.txt +4 -0
- data/Manifest.txt +3 -1
- data/lib/oddb2xml/cli.rb +1 -0
- data/lib/oddb2xml/downloader.rb +9 -11
- data/lib/oddb2xml/extractor.rb +22 -17
- data/lib/oddb2xml/util.rb +2 -2
- data/lib/oddb2xml/version.rb +1 -1
- data/spec/data/swissmedic_fridge.xlsx +0 -0
- data/spec/data/{swissmedic_packages.xls → swissmedic_orphan.xls} +0 -0
- data/spec/data/swissmedic_package.xlsx +0 -0
- data/spec/extractor_spec.rb +30 -6
- metadata +5 -3
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -71,6 +71,7 @@ GEM
|
|
71
71
|
diff-lcs (>= 1.1.3, < 2.0)
|
72
72
|
rspec-mocks (2.14.4)
|
73
73
|
ruby-ole (1.2.11.7)
|
74
|
+
rubyXL (1.2.10)
|
74
75
|
rubyntlm (0.3.4)
|
75
76
|
rubyzip (0.9.9)
|
76
77
|
safe_yaml (0.9.7)
|
@@ -111,6 +112,7 @@ DEPENDENCIES
|
|
111
112
|
pry-debugger
|
112
113
|
rdoc
|
113
114
|
rspec
|
115
|
+
rubyXL
|
114
116
|
rubyzip (= 0.9.9)
|
115
117
|
savon (>= 2.0)
|
116
118
|
spreadsheet
|
data/History.txt
CHANGED
data/Manifest.txt
CHANGED
@@ -45,15 +45,17 @@ spec/data/oddb_substance.xml
|
|
45
45
|
spec/data/swissindex.xml
|
46
46
|
spec/data/swissindex_nonpharma.xml
|
47
47
|
spec/data/swissindex_pharma.xml
|
48
|
+
spec/data/swissmedic_fridge.xlsx
|
48
49
|
spec/data/swissmedic_fridges.html
|
49
50
|
spec/data/swissmedic_fridges.xls
|
50
51
|
spec/data/swissmedic_info.html
|
51
52
|
spec/data/swissmedic_info.zip
|
52
53
|
spec/data/swissmedic_info_2.html
|
54
|
+
spec/data/swissmedic_orphan.xls
|
53
55
|
spec/data/swissmedic_orphans.html
|
54
56
|
spec/data/swissmedic_orphans.xls
|
57
|
+
spec/data/swissmedic_package.xlsx
|
55
58
|
spec/data/swissmedic_packages.html
|
56
|
-
spec/data/swissmedic_packages.xls
|
57
59
|
spec/data/wsdl.xml
|
58
60
|
spec/data/wsdl_nonpharma.xml
|
59
61
|
spec/data/wsdl_pharma.xml
|
data/lib/oddb2xml/cli.rb
CHANGED
data/lib/oddb2xml/downloader.rb
CHANGED
@@ -229,20 +229,20 @@ XML
|
|
229
229
|
@type = type
|
230
230
|
case @type
|
231
231
|
when :orphan
|
232
|
-
action = "
|
233
|
-
@xpath = "//div[@id='
|
232
|
+
action = "arzneimittel/00156/00221/00222/00223/00224/00227/00228/index.html?lang=de"
|
233
|
+
@xpath = "//div[@id='sprungmarke10_3']//a[@title='Humanarzneimittel']"
|
234
234
|
when :fridge
|
235
|
-
action = "
|
236
|
-
@xpath = "//
|
235
|
+
action = "arzneimittel/00156/00221/00222/00235/index.html?lang=de"
|
236
|
+
@xpath = "//div[@id='sprungmarke10_2']//a[@title='Excel-Version']"
|
237
237
|
when :package
|
238
|
-
action = "
|
239
|
-
@xpath = "//div[@id='
|
238
|
+
action = "arzneimittel/00156/00221/00222/00230/index.html?lang=de"
|
239
|
+
@xpath = "//div[@id='sprungmarke10_7']//a[@title='Excel-Version Zugelassene Verpackungen*']"
|
240
240
|
end
|
241
241
|
url = "http://www.swissmedic.ch/#{action}"
|
242
242
|
super({}, url)
|
243
243
|
end
|
244
244
|
def download
|
245
|
-
file = "swissmedic_#{@type}.xls"
|
245
|
+
@type == :orphan ? file = "swissmedic_#{@type}.xls" : file = "swissmedic_#{@type}.xlsx"
|
246
246
|
begin
|
247
247
|
page = @agent.get(@url)
|
248
248
|
if link_node = page.search(@xpath).first
|
@@ -253,13 +253,11 @@ XML
|
|
253
253
|
response = nil # win
|
254
254
|
end
|
255
255
|
end
|
256
|
-
|
257
|
-
return io.read
|
256
|
+
return File.expand_path(file)
|
258
257
|
rescue Timeout::Error, Errno::ETIMEDOUT
|
259
258
|
retrievable? ? retry : raise
|
260
259
|
ensure
|
261
|
-
|
262
|
-
Oddb2xml.download_finished(file)
|
260
|
+
Oddb2xml.download_finished(file, false)
|
263
261
|
end
|
264
262
|
end
|
265
263
|
end
|
data/lib/oddb2xml/extractor.rb
CHANGED
@@ -196,11 +196,14 @@ module Oddb2xml
|
|
196
196
|
end
|
197
197
|
end
|
198
198
|
class SwissmedicExtractor < Extractor
|
199
|
-
def initialize(
|
200
|
-
io = StringIO.new(bin)
|
201
|
-
book = Spreadsheet.open(io, 'rb')
|
202
|
-
@sheet = book.worksheet(0)
|
199
|
+
def initialize(filename, type)
|
203
200
|
@type = type
|
201
|
+
if type == :orphan
|
202
|
+
book = Spreadsheet.open(filename, 'rb')
|
203
|
+
@sheet = book.worksheet(0)
|
204
|
+
else
|
205
|
+
@sheet = RubyXL::Parser.parse(File.expand_path(filename)).worksheets[0]
|
206
|
+
end
|
204
207
|
end
|
205
208
|
def to_arry
|
206
209
|
data = []
|
@@ -208,15 +211,16 @@ module Oddb2xml
|
|
208
211
|
when :orphan
|
209
212
|
i = 1
|
210
213
|
@sheet.each do |row|
|
211
|
-
|
212
|
-
|
214
|
+
number = row[1].to_i
|
215
|
+
if number != 0
|
216
|
+
data << sprintf("%05d", number)
|
213
217
|
end
|
214
218
|
end
|
215
219
|
when :fridge
|
216
220
|
i,c = 1,7
|
217
221
|
@sheet.each do |row|
|
218
|
-
if number =
|
219
|
-
data <<
|
222
|
+
if row[i] and number = row[i].value and row[c] and row[c].value.to_s.downcase == 'x'
|
223
|
+
data << sprintf("%05d", number)
|
220
224
|
end
|
221
225
|
end
|
222
226
|
end
|
@@ -237,20 +241,21 @@ module Oddb2xml
|
|
237
241
|
sub = 14 # :substance_swissmedic
|
238
242
|
@sheet.each_with_index do |row, i|
|
239
243
|
next if (i <= 1)
|
240
|
-
|
241
|
-
|
244
|
+
next unless row[i_5] and row[i_3]
|
245
|
+
no8 = sprintf('%05d',row[i_5].value.to_i) + sprintf('%03d',row[i_3].value.to_i)
|
246
|
+
prodno = sprintf('%05d',row[i_5].value.to_i) + row[p_1_2].value.to_i.to_s
|
242
247
|
unless no8.empty?
|
243
248
|
next if no8.to_i == 0
|
244
249
|
ean_base12 = "7680#{no8}"
|
245
250
|
data[no8.intern] = {
|
246
251
|
:ean => (ean_base12.ljust(12, '0') + calc_checksum(ean_base12)),
|
247
|
-
:prodno => prodno,
|
248
|
-
:ith_swissmedic => row[ith].to_s,
|
249
|
-
:swissmedic_category => row[cat].to_s,
|
250
|
-
:atc_code => row[atc].to_s,
|
251
|
-
:package_size => row[siz].to_s,
|
252
|
-
:einheit_swissmedic => row[eht].to_s,
|
253
|
-
:substance_swissmedic => row[sub].to_s,
|
252
|
+
:prodno => prodno ? prodno : '',
|
253
|
+
:ith_swissmedic => row[ith] ? row[ith].value.to_s : '',
|
254
|
+
:swissmedic_category => row[cat].value.to_s,
|
255
|
+
:atc_code => row[atc] ? row[atc].value.to_s : '',
|
256
|
+
:package_size => row[siz] ? row[siz].value.to_s : '',
|
257
|
+
:einheit_swissmedic => row[eht] ? row[eht].value.to_s : '',
|
258
|
+
:substance_swissmedic => row[sub] ? row[sub].value.to_s : '',
|
254
259
|
:is_tier => (row[typ] == 'Tierarzneimittel' ? true : false),
|
255
260
|
}
|
256
261
|
end
|
data/lib/oddb2xml/util.rb
CHANGED
@@ -16,14 +16,14 @@ module Oddb2xml
|
|
16
16
|
false
|
17
17
|
end
|
18
18
|
|
19
|
-
def Oddb2xml.download_finished(file)
|
19
|
+
def Oddb2xml.download_finished(file, remove_file = true)
|
20
20
|
dest = "#{Backup}/#{File.basename(file)}"
|
21
21
|
if @options[:skip_download]
|
22
22
|
FileUtils.makedirs(Backup)
|
23
23
|
FileUtils.cp(file, dest, :verbose => false)
|
24
24
|
end
|
25
25
|
begin
|
26
|
-
File.unlink(file) if File.exists?(file)
|
26
|
+
File.unlink(file) if File.exists?(file) and remove_file
|
27
27
|
rescue Errno::EACCES # Permission Denied on Windows
|
28
28
|
end
|
29
29
|
end
|
data/lib/oddb2xml/version.rb
CHANGED
Binary file
|
Binary file
|
Binary file
|
data/spec/extractor_spec.rb
CHANGED
@@ -63,13 +63,37 @@ describe Oddb2xml::SwissmedicInfoExtractor do
|
|
63
63
|
subject { Oddb2xml::SwissmedicInfoExtractor.new("") }
|
64
64
|
it { expect(subject.to_hash).to be_empty }
|
65
65
|
end
|
66
|
-
context 'can parse
|
66
|
+
context 'can parse swissmedic_package.xlsx' do
|
67
67
|
it {
|
68
|
-
filename = File.join(File.dirname(__FILE__), 'data/
|
69
|
-
|
70
|
-
@packs
|
71
|
-
|
72
|
-
|
68
|
+
filename = File.join(File.dirname(__FILE__), 'data/swissmedic_package.xlsx')
|
69
|
+
@packs = Oddb2xml::SwissmedicExtractor.new(filename, :package).to_hash
|
70
|
+
expect(@packs.size).to eq(14)
|
71
|
+
first = @packs.first[1]
|
72
|
+
expect(first[:atc_code]).to eq('J06AA')
|
73
|
+
expect(first[:swissmedic_category]).to eq('B')
|
74
|
+
expect(first[:package_size]).to eq('3')
|
75
|
+
expect(first[:einheit_swissmedic]).to eq('Suppositorien')
|
76
|
+
expect(first[:substance_swissmedic]).to eq('globulina equina (immunisé avec coeur, tissu pulmonaire, reins de porcins)')
|
77
|
+
expect(@packs.first[0].to_s).to eq('00274001')
|
78
|
+
}
|
79
|
+
end
|
80
|
+
context 'can parse swissmedic_fridge.xlsx' do
|
81
|
+
it {
|
82
|
+
filename = File.join(File.dirname(__FILE__), 'data/swissmedic_fridge.xlsx')
|
83
|
+
@packs = Oddb2xml::SwissmedicExtractor.new(filename, :fridge).to_arry
|
84
|
+
expect(@packs.size).to eq(17)
|
85
|
+
expect(@packs[0]).to eq("58618")
|
86
|
+
expect(@packs[1]).to eq("00696")
|
87
|
+
}
|
88
|
+
end
|
89
|
+
context 'can parse swissmedic_orphan.xls' do
|
90
|
+
it {
|
91
|
+
filename = File.join(File.dirname(__FILE__), 'data/swissmedic_orphan.xls')
|
92
|
+
@packs = Oddb2xml::SwissmedicExtractor.new(filename, :orphan).to_arry
|
93
|
+
expect(@packs.size).to eq(72)
|
94
|
+
expect(@packs.first).to eq("62132")
|
95
|
+
expect(@packs[7]).to eq("00687")
|
96
|
+
}
|
73
97
|
end
|
74
98
|
end
|
75
99
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: oddb2xml
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.6.
|
4
|
+
version: 1.6.7
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2014-01-07 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rubyzip
|
@@ -229,15 +229,17 @@ files:
|
|
229
229
|
- spec/data/swissindex.xml
|
230
230
|
- spec/data/swissindex_nonpharma.xml
|
231
231
|
- spec/data/swissindex_pharma.xml
|
232
|
+
- spec/data/swissmedic_fridge.xlsx
|
232
233
|
- spec/data/swissmedic_fridges.html
|
233
234
|
- spec/data/swissmedic_fridges.xls
|
234
235
|
- spec/data/swissmedic_info.html
|
235
236
|
- spec/data/swissmedic_info.zip
|
236
237
|
- spec/data/swissmedic_info_2.html
|
238
|
+
- spec/data/swissmedic_orphan.xls
|
237
239
|
- spec/data/swissmedic_orphans.html
|
238
240
|
- spec/data/swissmedic_orphans.xls
|
241
|
+
- spec/data/swissmedic_package.xlsx
|
239
242
|
- spec/data/swissmedic_packages.html
|
240
|
-
- spec/data/swissmedic_packages.xls
|
241
243
|
- spec/data/wsdl.xml
|
242
244
|
- spec/data/wsdl_nonpharma.xml
|
243
245
|
- spec/data/wsdl_pharma.xml
|