oddb2xml 1.6.1 → 1.6.2
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 -1
- data/History.txt +4 -0
- data/lib/oddb2xml/extractor.rb +74 -73
- data/lib/oddb2xml/version.rb +1 -1
- data/spec/compressor_spec.rb +1 -1
- data/spec/downloader_spec.rb +12 -12
- data/spec/extractor_spec.rb +59 -0
- metadata +2 -2
data/Gemfile
CHANGED
data/History.txt
CHANGED
data/lib/oddb2xml/extractor.rb
CHANGED
@@ -74,85 +74,86 @@ module Oddb2xml
|
|
74
74
|
item[:pharmacodes] = []
|
75
75
|
item[:packages] = {} # pharmacode => package
|
76
76
|
seq.xpath('.//Pack').each do |pac|
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
:
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
77
|
+
phar = pac.attr('Pharmacode')
|
78
|
+
phar = correct_code(phar.to_s, 7)
|
79
|
+
ean = pac.at_xpath('.//GTIN')
|
80
|
+
search_key = phar.to_i != 0 ? phar : ean.text
|
81
|
+
# as common key with swissINDEX
|
82
|
+
item[:pharmacodes] << phar
|
83
|
+
# packages
|
84
|
+
item[:packages][search_key] = {
|
85
|
+
:pharmacode => phar,
|
86
|
+
:ean => (ean) ? ean.text : '',
|
87
|
+
:swissmedic_category => (cat = pac.at_xpath('.//SwissmedicCategory')) ? cat.text : '',
|
88
|
+
:swissmedic_number8 => (num = pac.at_xpath('.//SwissmedicNo8')) ? num.text.rjust(8, '0') : '',
|
89
|
+
:narcosis_flag => (flg = pac.at_xpath('.//FlagNarcosis')) ? flg.text : '',
|
90
|
+
:prices => {
|
91
|
+
:exf_price => {
|
92
|
+
:price => (exf = pac.at_xpath('.//ExFactoryPrice/Price')) ? exf.text : '',
|
93
|
+
:valid_date => (exf = pac.at_xpath('.//ExFactoryPrice/ValidFromDate')) ? exf.text : '',
|
94
|
+
:price_code => (exf = pac.at_xpath('.//ExFactoryPrice/PriceTypeCode')) ? exf.text : '',
|
95
|
+
},
|
96
|
+
:pub_price => {
|
97
|
+
:price => (pub = pac.at_xpath('.//PublicPrice/Price')) ? pub.text : '',
|
98
|
+
:valid_date => (pub = pac.at_xpath('.//PublicPrice/ValidFromDate')) ? pub.text : '',
|
99
|
+
:price_code => (pub = pac.at_xpath('.//PublicPrice/PriceTypeCode')) ? pub.text : '',
|
99
100
|
}
|
100
101
|
}
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
102
|
+
}
|
103
|
+
# related all limitations
|
104
|
+
item[:packages][search_key][:limitations] = []
|
105
|
+
limitations = Hash.new{|h,k| h[k] = [] }
|
106
|
+
# in seq
|
107
|
+
limitations[:seq] = (lims = seq.xpath('.//Limitations/Limitation')) ? lims.to_a : nil
|
108
|
+
# in it-codes
|
109
|
+
limitations[:itc] = (lims = seq.xpath('.//ItCodes/ItCode/Limitations/Limitation')) ? lims.to_a : nil
|
110
|
+
# in pac
|
111
|
+
limitations[:pac] = (lims = pac.xpath('.//Limitations/Limitation')) ? lims.to_a : nil
|
112
|
+
limitations.each_pair do |lim_key, lims|
|
113
|
+
key = ''
|
114
|
+
id = ''
|
115
|
+
case lim_key
|
116
|
+
when :seq, :itc
|
117
|
+
key = :swissmedic_number5
|
118
|
+
id = item[key].to_s
|
119
|
+
when :pac
|
120
|
+
key = :swissmedic_number8
|
121
|
+
id = item[:packages][search_key][key].to_s
|
122
|
+
end
|
123
|
+
if id.empty? or id == '0'
|
124
|
+
key = :pharmacode
|
125
|
+
id = phar.to_s
|
126
|
+
end
|
127
|
+
lims.each do |lim|
|
128
|
+
limitation = {
|
129
|
+
:it => item[:it_code],
|
130
|
+
:key => key,
|
131
|
+
:id => id,
|
132
|
+
:code => (lic = lim.at_xpath('.//LimitationCode')) ? lic.text : '',
|
133
|
+
:type => (lit = lim.at_xpath('.//LimitationType')) ? lit.text : '',
|
134
|
+
:value => (liv = lim.at_xpath('.//LimitationValue')) ? liv.text : '',
|
135
|
+
:niv => (niv = lim.at_xpath('.//LimitationNiveau')) ? niv.text : '',
|
136
|
+
:desc_de => (dsc = lim.at_xpath('.//DescriptionDe')) ? dsc.text : '',
|
137
|
+
:desc_fr => (dsc = lim.at_xpath('.//DescriptionFr')) ? dsc.text : '',
|
138
|
+
:vdate => (dat = lim.at_xpath('.//ValidFromDate')) ? dat.text : '',
|
139
|
+
}
|
140
|
+
deleted = false
|
141
|
+
if upto = ((thr = lim.at_xpath('.//ValidThruDate')) ? thr.text : nil) and
|
142
|
+
upto =~ /\d{2}\.\d{2}\.\d{2}/
|
143
|
+
begin
|
144
|
+
deleted = true if Date.strptime(upto, '%d.%m.%y') >= Date.today
|
145
|
+
rescue ArgumentError
|
145
146
|
end
|
146
|
-
limitation[:del] = deleted
|
147
|
-
item[:packages][phar][:limitations] << limitation
|
148
147
|
end
|
148
|
+
limitation[:del] = deleted
|
149
|
+
item[:packages][search_key][:limitations] << limitation
|
149
150
|
end
|
150
|
-
# limitation points
|
151
|
-
pts = pac.at_xpath('.//PointLimitations/PointLimitation/Points') # only first points
|
152
|
-
item[:packages][phar][:limitation_points] = pts ? pts.text : ''
|
153
|
-
# pharmacode => seq (same data)
|
154
|
-
data[phar] = item
|
155
151
|
end
|
152
|
+
# limitation points
|
153
|
+
pts = pac.at_xpath('.//PointLimitations/PointLimitation/Points') # only first points
|
154
|
+
item[:packages][search_key][:limitation_points] = pts ? pts.text : ''
|
155
|
+
# pharmacode => seq (same data)
|
156
|
+
data[search_key] = item
|
156
157
|
end
|
157
158
|
end
|
158
159
|
data
|
data/lib/oddb2xml/version.rb
CHANGED
data/spec/compressor_spec.rb
CHANGED
@@ -14,7 +14,7 @@ shared_examples_for 'any compressor' do
|
|
14
14
|
@compressor.finalize!.should == true
|
15
15
|
compress_file = @compressor.instance_variable_get(:@compress_file)
|
16
16
|
File.exists?(compress_file).should == true
|
17
|
-
File.unstub
|
17
|
+
File.unstub(:unlink)
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
data/spec/downloader_spec.rb
CHANGED
@@ -36,7 +36,7 @@ describe Oddb2xml::BagXmlDownloader do
|
|
36
36
|
xml.should =~ /DescriptionDe/
|
37
37
|
end
|
38
38
|
it 'should clean up current directory' do
|
39
|
-
xml.
|
39
|
+
expect { xml }.not_to raise_error
|
40
40
|
File.exist?('XMLPublications.zip').should be(false)
|
41
41
|
end
|
42
42
|
end
|
@@ -100,7 +100,7 @@ describe Oddb2xml::SwissmedicDownloader do
|
|
100
100
|
bin.bytes.should_not nil
|
101
101
|
end
|
102
102
|
it 'should clean up current directory' do
|
103
|
-
bin.
|
103
|
+
expect { bin }.not_to raise_error
|
104
104
|
File.exist?('oddb_orphan.xls').should be(false)
|
105
105
|
end
|
106
106
|
end
|
@@ -117,7 +117,7 @@ describe Oddb2xml::SwissmedicDownloader do
|
|
117
117
|
bin.bytes.should_not nil
|
118
118
|
end
|
119
119
|
it 'should clean up current directory' do
|
120
|
-
bin.
|
120
|
+
expect { bin }.not_to raise_error
|
121
121
|
File.exist?('oddb_fridge.xls').should be(false)
|
122
122
|
end
|
123
123
|
end
|
@@ -134,7 +134,7 @@ describe Oddb2xml::SwissmedicDownloader do
|
|
134
134
|
bin.bytes.should_not nil
|
135
135
|
end
|
136
136
|
it 'should clean up current directory' do
|
137
|
-
bin.
|
137
|
+
expect { bin }.not_to raise_error
|
138
138
|
File.exist?('oddb_package.xls').should be(false)
|
139
139
|
end
|
140
140
|
end
|
@@ -160,7 +160,7 @@ describe Oddb2xml::SwissmedicInfoDownloader do
|
|
160
160
|
xml.should =~ /content/
|
161
161
|
end
|
162
162
|
it 'should clean up current directory' do
|
163
|
-
xml.
|
163
|
+
expect { xml }.not_to raise_error
|
164
164
|
File.exist?('swissmedic_info.zip').should be(false)
|
165
165
|
end
|
166
166
|
end
|
@@ -180,7 +180,7 @@ describe Oddb2xml::EphaDownloader do
|
|
180
180
|
csv.bytes.should_not nil
|
181
181
|
end
|
182
182
|
it 'should clean up current directory' do
|
183
|
-
csv.
|
183
|
+
expect { csv }.not_to raise_error
|
184
184
|
File.exist?('epha_interactions.csv').should be(false)
|
185
185
|
end
|
186
186
|
end
|
@@ -200,7 +200,7 @@ describe Oddb2xml::BMUpdateDownloader do
|
|
200
200
|
txt.bytes.should_not nil
|
201
201
|
end
|
202
202
|
it 'should clean up current directory' do
|
203
|
-
txt.
|
203
|
+
expect { txt }.not_to raise_error
|
204
204
|
File.exist?('oddb2xml_files_bm_update.txt').should be(false)
|
205
205
|
end
|
206
206
|
end
|
@@ -220,7 +220,7 @@ describe Oddb2xml::LppvDownloader do
|
|
220
220
|
txt.bytes.should_not nil
|
221
221
|
end
|
222
222
|
it 'should clean up current directory' do
|
223
|
-
txt.
|
223
|
+
expect { txt }.not_to raise_error
|
224
224
|
File.exist?('oddb2xml_files_lppv.txt').should be(false)
|
225
225
|
end
|
226
226
|
end
|
@@ -240,7 +240,7 @@ describe Oddb2xml::MigelDownloader do
|
|
240
240
|
bin.bytes.should_not nil
|
241
241
|
end
|
242
242
|
it 'should clean up current directory' do
|
243
|
-
bin.
|
243
|
+
expect { bin }.not_to raise_error
|
244
244
|
File.exist?('oddb2xml_files_nonpharma.txt').should be(false)
|
245
245
|
end
|
246
246
|
end
|
@@ -261,7 +261,7 @@ describe Oddb2xml::MedregbmDownloader do
|
|
261
261
|
txt.bytes.should_not nil
|
262
262
|
end
|
263
263
|
it 'should clean up current directory' do
|
264
|
-
txt.
|
264
|
+
expect { txt }.not_to raise_error
|
265
265
|
File.exist?('oddb_company.xls').should be(false)
|
266
266
|
end
|
267
267
|
end
|
@@ -278,7 +278,7 @@ describe Oddb2xml::MedregbmDownloader do
|
|
278
278
|
txt.bytes.should_not nil
|
279
279
|
end
|
280
280
|
it 'should clean up current directory' do
|
281
|
-
txt.
|
281
|
+
expect { txt }.not_to raise_error
|
282
282
|
File.exist?('oddb_person.xls').should be(false)
|
283
283
|
end
|
284
284
|
end
|
@@ -299,7 +299,7 @@ describe Oddb2xml::ZurroseDownloader do
|
|
299
299
|
dat.bytes.should_not nil
|
300
300
|
end
|
301
301
|
it 'should clean up current directory' do
|
302
|
-
dat.
|
302
|
+
expect { dat }.not_to raise_error
|
303
303
|
File.exist?('oddb2xml_zurrose_transfer.dat').should be(false)
|
304
304
|
end
|
305
305
|
end
|
data/spec/extractor_spec.rb
CHANGED
@@ -6,6 +6,65 @@ describe Oddb2xml::Extractor do
|
|
6
6
|
it "pending"
|
7
7
|
end
|
8
8
|
|
9
|
+
describe Oddb2xml::TxtExtractorMethods do
|
10
|
+
it "pending"
|
11
|
+
end
|
12
|
+
|
13
|
+
describe Oddb2xml::BagXmlExtractor do
|
14
|
+
context 'should handle articles with and without pharmacode' do
|
15
|
+
subject do
|
16
|
+
dat = File.read(File.expand_path('../data/Preparation.xml', __FILE__))
|
17
|
+
Oddb2xml::BagXmlExtractor.new(dat).to_hash
|
18
|
+
end
|
19
|
+
it {
|
20
|
+
@items = subject.to_hash
|
21
|
+
with_pharma = @items['1699947']
|
22
|
+
expect(with_pharma).not_to be_nil
|
23
|
+
expect(with_pharma[:atc_code]).not_to be_nil
|
24
|
+
expect(with_pharma[:pharmacodes]).not_to be_nil
|
25
|
+
expect(with_pharma[:packages].size).to eq(1)
|
26
|
+
expect(with_pharma[:packages].first[0]).to eq('1699947')
|
27
|
+
expect(with_pharma[:packages].first[1][:prices][:pub_price][:price]).to eq('205.3')
|
28
|
+
expect(@items.size).to eq(2)
|
29
|
+
no_pharma = @items['7680620690084']
|
30
|
+
expect(no_pharma).not_to be_nil
|
31
|
+
expect(no_pharma[:atc_code]).not_to be_nil
|
32
|
+
expect(no_pharma[:pharmacodes]).not_to be_nil
|
33
|
+
expect(no_pharma[:packages].size).to eq(1)
|
34
|
+
expect(no_pharma[:packages].first[0]).to eq('7680620690084')
|
35
|
+
expect(no_pharma[:packages].first[1][:prices][:pub_price][:price]).to eq('27.8')
|
36
|
+
}
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
describe Oddb2xml::SwissIndexExtractor do
|
41
|
+
it "pending"
|
42
|
+
end
|
43
|
+
|
44
|
+
describe Oddb2xml::SwissmedicExtractor do
|
45
|
+
it "pending"
|
46
|
+
end
|
47
|
+
|
48
|
+
describe Oddb2xml::MigelExtractor do
|
49
|
+
it "pending"
|
50
|
+
end
|
51
|
+
|
52
|
+
describe Oddb2xml::SwissmedicInfoExtractor do
|
53
|
+
it "pending"
|
54
|
+
end
|
55
|
+
|
56
|
+
describe Oddb2xml::EphaExtractor do
|
57
|
+
it "pending"
|
58
|
+
end
|
59
|
+
|
60
|
+
describe Oddb2xml::MedregbmExtractor do
|
61
|
+
it "pending"
|
62
|
+
end
|
63
|
+
|
64
|
+
describe Oddb2xml::ZurroseExtractor do
|
65
|
+
it "pending"
|
66
|
+
end
|
67
|
+
|
9
68
|
describe Oddb2xml::ZurroseExtractor do
|
10
69
|
context 'when transfer.dat is empty' do
|
11
70
|
subject { Oddb2xml::ZurroseExtractor.new("") }
|
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.2
|
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: 2013-12-
|
12
|
+
date: 2013-12-09 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rubyzip
|