oddb2xml 1.1.4 → 1.1.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.
- data/History.txt +4 -0
- data/lib/oddb2xml/builder.rb +8 -3
- data/lib/oddb2xml/cli.rb +11 -4
- data/lib/oddb2xml/downloader.rb +20 -0
- data/lib/oddb2xml/extractor.rb +15 -1
- data/lib/oddb2xml/version.rb +1 -1
- data/spec/downloader_spec.rb +23 -5
- data/spec/spec_helper.rb +15 -0
- metadata +28 -28
data/History.txt
CHANGED
data/lib/oddb2xml/builder.rb
CHANGED
|
@@ -17,7 +17,7 @@ end
|
|
|
17
17
|
|
|
18
18
|
module Oddb2xml
|
|
19
19
|
class Builder
|
|
20
|
-
attr_accessor :subject, :index, :items,
|
|
20
|
+
attr_accessor :subject, :index, :items, :flags,
|
|
21
21
|
:actions,
|
|
22
22
|
:orphans, :fridges,
|
|
23
23
|
:infos,
|
|
@@ -26,6 +26,7 @@ module Oddb2xml
|
|
|
26
26
|
@subject = nil
|
|
27
27
|
@index = {}
|
|
28
28
|
@items = {}
|
|
29
|
+
@flags = {}
|
|
29
30
|
@infos = {}
|
|
30
31
|
@actions = []
|
|
31
32
|
@orphans = []
|
|
@@ -473,8 +474,12 @@ module Oddb2xml
|
|
|
473
474
|
end
|
|
474
475
|
end
|
|
475
476
|
#xml.TEMP
|
|
476
|
-
|
|
477
|
-
|
|
477
|
+
unless de_pac[:ean].empty?
|
|
478
|
+
flag = @flags[de_pac[:ean]]
|
|
479
|
+
# as same flag
|
|
480
|
+
xml.CDBG (flag ? 'Y' : 'N')
|
|
481
|
+
xml.BG (flag ? 'Y' : 'N')
|
|
482
|
+
end
|
|
478
483
|
#xml.EXP
|
|
479
484
|
xml.QTY de_pac[:additional_desc] unless de_pac[:additional_desc].empty?
|
|
480
485
|
xml.DSCRD de_pac[:desc] unless de_pac[:desc].empty?
|
data/lib/oddb2xml/cli.rb
CHANGED
|
@@ -17,6 +17,7 @@ module Oddb2xml
|
|
|
17
17
|
@mutex = Mutex.new
|
|
18
18
|
@items = {} # Items from Preparations.xml in BAG
|
|
19
19
|
@index = {} # Base index from swissINDEX
|
|
20
|
+
@flags = {} # narcotics flag from ywesee
|
|
20
21
|
@infos = {} # [option] FI from SwissmedicInfo
|
|
21
22
|
@actions = [] # [addition] interactions from epha
|
|
22
23
|
@orphans = [] # [addition] Orphaned drugs from Swissmedic xls
|
|
@@ -51,7 +52,7 @@ module Oddb2xml
|
|
|
51
52
|
downloader = EphaDownloader.new
|
|
52
53
|
io = downloader.download
|
|
53
54
|
@mutex.synchronize do
|
|
54
|
-
@actions = EphaExtractor.new(io).
|
|
55
|
+
@actions = EphaExtractor.new(io).to_arry
|
|
55
56
|
end
|
|
56
57
|
end
|
|
57
58
|
# bag
|
|
@@ -63,6 +64,14 @@ module Oddb2xml
|
|
|
63
64
|
@items = hsh
|
|
64
65
|
end
|
|
65
66
|
end
|
|
67
|
+
# ywesee
|
|
68
|
+
threads << Thread.new do
|
|
69
|
+
downloader = YweseeBMDownloader.new
|
|
70
|
+
io = downloader.download
|
|
71
|
+
@mutex.synchronize do
|
|
72
|
+
@flags = YweseeBMExtractor.new(io).to_hash
|
|
73
|
+
end
|
|
74
|
+
end
|
|
66
75
|
LANGUAGES.each do |lang|
|
|
67
76
|
# swissindex
|
|
68
77
|
types.each do |type|
|
|
@@ -96,13 +105,11 @@ module Oddb2xml
|
|
|
96
105
|
builder.subject = sbj
|
|
97
106
|
builder.index = index
|
|
98
107
|
builder.items = @items
|
|
108
|
+
builder.flags = @flags
|
|
99
109
|
# additions
|
|
100
110
|
%w[actions orphans fridges].each do |addition|
|
|
101
111
|
builder.send("#{addition}=".intern, self.instance_variable_get("@#{addition}"))
|
|
102
112
|
end
|
|
103
|
-
#builder.actions = @actions
|
|
104
|
-
#builder.orphans = @orphans
|
|
105
|
-
#builder.fridges = @fridges
|
|
106
113
|
# optionals
|
|
107
114
|
builder.infos = @infos
|
|
108
115
|
builder.tag_suffix = @options[:tag_suffix]
|
data/lib/oddb2xml/downloader.rb
CHANGED
|
@@ -201,4 +201,24 @@ XML
|
|
|
201
201
|
end
|
|
202
202
|
end
|
|
203
203
|
end
|
|
204
|
+
class YweseeBMDownloader < Downloader
|
|
205
|
+
def init
|
|
206
|
+
super
|
|
207
|
+
@url ||= 'http://www.ywesee.com/uploads/Main/BM_Update.txt'
|
|
208
|
+
end
|
|
209
|
+
def download
|
|
210
|
+
file = 'ywesee_bm_update.txt'
|
|
211
|
+
begin
|
|
212
|
+
response = @agent.get(@url)
|
|
213
|
+
response.save_as file
|
|
214
|
+
return File.open(file, 'r')
|
|
215
|
+
rescue Timeout::Error
|
|
216
|
+
retrievable? ? retry : raise
|
|
217
|
+
ensure
|
|
218
|
+
if File.exists? file
|
|
219
|
+
File.unlink file
|
|
220
|
+
end
|
|
221
|
+
end
|
|
222
|
+
end
|
|
223
|
+
end
|
|
204
224
|
end
|
data/lib/oddb2xml/extractor.rb
CHANGED
|
@@ -204,7 +204,7 @@ module Oddb2xml
|
|
|
204
204
|
def initialize(io)
|
|
205
205
|
@io = io
|
|
206
206
|
end
|
|
207
|
-
def
|
|
207
|
+
def to_arry
|
|
208
208
|
data = []
|
|
209
209
|
ixno = 0
|
|
210
210
|
while line = @io.gets
|
|
@@ -225,4 +225,18 @@ module Oddb2xml
|
|
|
225
225
|
data
|
|
226
226
|
end
|
|
227
227
|
end
|
|
228
|
+
class YweseeBMExtractor < Extractor
|
|
229
|
+
def initialize(io)
|
|
230
|
+
@io = io
|
|
231
|
+
end
|
|
232
|
+
def to_hash
|
|
233
|
+
data = {}
|
|
234
|
+
while line = @io.gets
|
|
235
|
+
next if line =~ /\d{13}/
|
|
236
|
+
ean = line.chomp.gsub("\"", '')
|
|
237
|
+
data[ean] = true
|
|
238
|
+
end
|
|
239
|
+
data
|
|
240
|
+
end
|
|
241
|
+
end
|
|
228
242
|
end
|
data/lib/oddb2xml/version.rb
CHANGED
data/spec/downloader_spec.rb
CHANGED
|
@@ -157,16 +157,34 @@ describe Oddb2xml::EphaDownloader do
|
|
|
157
157
|
end
|
|
158
158
|
it_behaves_like 'any downloader'
|
|
159
159
|
context 'when download is called' do
|
|
160
|
-
let(:
|
|
160
|
+
let(:io) { @downloader.download }
|
|
161
161
|
it 'should read csv to IO Object' do
|
|
162
|
-
|
|
163
|
-
|
|
162
|
+
io.should be_a IO
|
|
163
|
+
io.bytes.should_not nil
|
|
164
164
|
end
|
|
165
165
|
it 'should clean up current directory' do
|
|
166
|
-
|
|
166
|
+
io.should_not raise_error(Timeout::Error)
|
|
167
167
|
File.exist?('epha_interactions.csv').should be(false)
|
|
168
168
|
end
|
|
169
169
|
end
|
|
170
170
|
end
|
|
171
171
|
|
|
172
|
-
|
|
172
|
+
describe Oddb2xml::YweseeBMDownloader do
|
|
173
|
+
include ServerMockHelper
|
|
174
|
+
before(:each) do
|
|
175
|
+
setup_ywesee_server_mock
|
|
176
|
+
@downloader = Oddb2xml::YweseeBMDownloader.new
|
|
177
|
+
end
|
|
178
|
+
it_behaves_like 'any downloader'
|
|
179
|
+
context 'when download is called' do
|
|
180
|
+
let(:io) { @downloader.download }
|
|
181
|
+
it 'should read txt to IO Object' do
|
|
182
|
+
io.should be_a IO
|
|
183
|
+
io.bytes.should_not nil
|
|
184
|
+
end
|
|
185
|
+
it 'should clean up current directory' do
|
|
186
|
+
io.should_not raise_error(Timeout::Error)
|
|
187
|
+
File.exist?('ywesee_bm_update.txt').should be(false)
|
|
188
|
+
end
|
|
189
|
+
end
|
|
190
|
+
end
|
data/spec/spec_helper.rb
CHANGED
|
@@ -22,6 +22,7 @@ module ServerMockHelper
|
|
|
22
22
|
setup_swissmedic_server_mock
|
|
23
23
|
setup_swissmedic_info_server_mock
|
|
24
24
|
setup_epha_server_mock
|
|
25
|
+
setup_ywesee_server_mock
|
|
25
26
|
end
|
|
26
27
|
def setup_bag_xml_server_mock
|
|
27
28
|
# zip
|
|
@@ -153,6 +154,20 @@ module ServerMockHelper
|
|
|
153
154
|
:headers => {'Content-Type' => 'text/csv; charset=utf-8'},
|
|
154
155
|
:body => stub_response)
|
|
155
156
|
end
|
|
157
|
+
def setup_ywesee_server_mock
|
|
158
|
+
# txt
|
|
159
|
+
stub_txt_url = 'http://www.ywesee.com/uploads/Main/BM_Update.txt'
|
|
160
|
+
stub_response = File.read(File.expand_path('../data/ywesee_bm_update.txt', __FILE__))
|
|
161
|
+
stub_request(:get, stub_txt_url).
|
|
162
|
+
with(:headers => {
|
|
163
|
+
'Accept' => '*/*',
|
|
164
|
+
'Host' => 'www.ywesee.com',
|
|
165
|
+
}).
|
|
166
|
+
to_return(
|
|
167
|
+
:status => 200,
|
|
168
|
+
:headers => {'Content-Type' => 'text/plain; charset=utf-8'},
|
|
169
|
+
:body => stub_response)
|
|
170
|
+
end
|
|
156
171
|
end
|
|
157
172
|
|
|
158
173
|
RSpec.configure do |config|
|
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.1.
|
|
4
|
+
version: 1.1.5
|
|
5
5
|
prerelease:
|
|
6
6
|
platform: ruby
|
|
7
7
|
authors:
|
|
@@ -9,11 +9,11 @@ authors:
|
|
|
9
9
|
autorequire:
|
|
10
10
|
bindir: bin
|
|
11
11
|
cert_chain: []
|
|
12
|
-
date: 2013-01-
|
|
12
|
+
date: 2013-01-11 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: rubyzip
|
|
16
|
-
requirement: &
|
|
16
|
+
requirement: &21104340 !ruby/object:Gem::Requirement
|
|
17
17
|
none: false
|
|
18
18
|
requirements:
|
|
19
19
|
- - ! '>='
|
|
@@ -21,10 +21,10 @@ dependencies:
|
|
|
21
21
|
version: '0'
|
|
22
22
|
type: :runtime
|
|
23
23
|
prerelease: false
|
|
24
|
-
version_requirements: *
|
|
24
|
+
version_requirements: *21104340
|
|
25
25
|
- !ruby/object:Gem::Dependency
|
|
26
26
|
name: archive-tar-minitar
|
|
27
|
-
requirement: &
|
|
27
|
+
requirement: &21103620 !ruby/object:Gem::Requirement
|
|
28
28
|
none: false
|
|
29
29
|
requirements:
|
|
30
30
|
- - ! '>='
|
|
@@ -32,10 +32,10 @@ dependencies:
|
|
|
32
32
|
version: '0'
|
|
33
33
|
type: :runtime
|
|
34
34
|
prerelease: false
|
|
35
|
-
version_requirements: *
|
|
35
|
+
version_requirements: *21103620
|
|
36
36
|
- !ruby/object:Gem::Dependency
|
|
37
37
|
name: mechanize
|
|
38
|
-
requirement: &
|
|
38
|
+
requirement: &21103000 !ruby/object:Gem::Requirement
|
|
39
39
|
none: false
|
|
40
40
|
requirements:
|
|
41
41
|
- - ! '>='
|
|
@@ -43,10 +43,10 @@ dependencies:
|
|
|
43
43
|
version: '0'
|
|
44
44
|
type: :runtime
|
|
45
45
|
prerelease: false
|
|
46
|
-
version_requirements: *
|
|
46
|
+
version_requirements: *21103000
|
|
47
47
|
- !ruby/object:Gem::Dependency
|
|
48
48
|
name: nokogiri
|
|
49
|
-
requirement: &
|
|
49
|
+
requirement: &21102480 !ruby/object:Gem::Requirement
|
|
50
50
|
none: false
|
|
51
51
|
requirements:
|
|
52
52
|
- - ! '>='
|
|
@@ -54,10 +54,10 @@ dependencies:
|
|
|
54
54
|
version: '0'
|
|
55
55
|
type: :runtime
|
|
56
56
|
prerelease: false
|
|
57
|
-
version_requirements: *
|
|
57
|
+
version_requirements: *21102480
|
|
58
58
|
- !ruby/object:Gem::Dependency
|
|
59
59
|
name: savon
|
|
60
|
-
requirement: &
|
|
60
|
+
requirement: &21101700 !ruby/object:Gem::Requirement
|
|
61
61
|
none: false
|
|
62
62
|
requirements:
|
|
63
63
|
- - ! '>='
|
|
@@ -65,10 +65,10 @@ dependencies:
|
|
|
65
65
|
version: '2.0'
|
|
66
66
|
type: :runtime
|
|
67
67
|
prerelease: false
|
|
68
|
-
version_requirements: *
|
|
68
|
+
version_requirements: *21101700
|
|
69
69
|
- !ruby/object:Gem::Dependency
|
|
70
70
|
name: spreadsheet
|
|
71
|
-
requirement: &
|
|
71
|
+
requirement: &21101060 !ruby/object:Gem::Requirement
|
|
72
72
|
none: false
|
|
73
73
|
requirements:
|
|
74
74
|
- - ! '>='
|
|
@@ -76,10 +76,10 @@ dependencies:
|
|
|
76
76
|
version: '0'
|
|
77
77
|
type: :runtime
|
|
78
78
|
prerelease: false
|
|
79
|
-
version_requirements: *
|
|
79
|
+
version_requirements: *21101060
|
|
80
80
|
- !ruby/object:Gem::Dependency
|
|
81
81
|
name: rspec
|
|
82
|
-
requirement: &
|
|
82
|
+
requirement: &21100460 !ruby/object:Gem::Requirement
|
|
83
83
|
none: false
|
|
84
84
|
requirements:
|
|
85
85
|
- - ! '>='
|
|
@@ -87,10 +87,10 @@ dependencies:
|
|
|
87
87
|
version: '0'
|
|
88
88
|
type: :development
|
|
89
89
|
prerelease: false
|
|
90
|
-
version_requirements: *
|
|
90
|
+
version_requirements: *21100460
|
|
91
91
|
- !ruby/object:Gem::Dependency
|
|
92
92
|
name: webmock
|
|
93
|
-
requirement: &
|
|
93
|
+
requirement: &21099960 !ruby/object:Gem::Requirement
|
|
94
94
|
none: false
|
|
95
95
|
requirements:
|
|
96
96
|
- - ! '>='
|
|
@@ -98,10 +98,10 @@ dependencies:
|
|
|
98
98
|
version: '0'
|
|
99
99
|
type: :development
|
|
100
100
|
prerelease: false
|
|
101
|
-
version_requirements: *
|
|
101
|
+
version_requirements: *21099960
|
|
102
102
|
- !ruby/object:Gem::Dependency
|
|
103
103
|
name: ZenTest
|
|
104
|
-
requirement: &
|
|
104
|
+
requirement: &21099480 !ruby/object:Gem::Requirement
|
|
105
105
|
none: false
|
|
106
106
|
requirements:
|
|
107
107
|
- - ! '>='
|
|
@@ -109,10 +109,10 @@ dependencies:
|
|
|
109
109
|
version: '0'
|
|
110
110
|
type: :development
|
|
111
111
|
prerelease: false
|
|
112
|
-
version_requirements: *
|
|
112
|
+
version_requirements: *21099480
|
|
113
113
|
- !ruby/object:Gem::Dependency
|
|
114
114
|
name: hoe
|
|
115
|
-
requirement: &
|
|
115
|
+
requirement: &21098920 !ruby/object:Gem::Requirement
|
|
116
116
|
none: false
|
|
117
117
|
requirements:
|
|
118
118
|
- - ! '>='
|
|
@@ -120,10 +120,10 @@ dependencies:
|
|
|
120
120
|
version: '3.4'
|
|
121
121
|
type: :development
|
|
122
122
|
prerelease: false
|
|
123
|
-
version_requirements: *
|
|
123
|
+
version_requirements: *21098920
|
|
124
124
|
- !ruby/object:Gem::Dependency
|
|
125
125
|
name: rdoc
|
|
126
|
-
requirement: &
|
|
126
|
+
requirement: &21098500 !ruby/object:Gem::Requirement
|
|
127
127
|
none: false
|
|
128
128
|
requirements:
|
|
129
129
|
- - ! '>='
|
|
@@ -131,10 +131,10 @@ dependencies:
|
|
|
131
131
|
version: '0'
|
|
132
132
|
type: :development
|
|
133
133
|
prerelease: false
|
|
134
|
-
version_requirements: *
|
|
134
|
+
version_requirements: *21098500
|
|
135
135
|
- !ruby/object:Gem::Dependency
|
|
136
136
|
name: rdoc
|
|
137
|
-
requirement: &
|
|
137
|
+
requirement: &21097920 !ruby/object:Gem::Requirement
|
|
138
138
|
none: false
|
|
139
139
|
requirements:
|
|
140
140
|
- - ~>
|
|
@@ -142,10 +142,10 @@ dependencies:
|
|
|
142
142
|
version: '3.10'
|
|
143
143
|
type: :development
|
|
144
144
|
prerelease: false
|
|
145
|
-
version_requirements: *
|
|
145
|
+
version_requirements: *21097920
|
|
146
146
|
- !ruby/object:Gem::Dependency
|
|
147
147
|
name: hoe
|
|
148
|
-
requirement: &
|
|
148
|
+
requirement: &21097400 !ruby/object:Gem::Requirement
|
|
149
149
|
none: false
|
|
150
150
|
requirements:
|
|
151
151
|
- - ~>
|
|
@@ -153,7 +153,7 @@ dependencies:
|
|
|
153
153
|
version: '2.13'
|
|
154
154
|
type: :development
|
|
155
155
|
prerelease: false
|
|
156
|
-
version_requirements: *
|
|
156
|
+
version_requirements: *21097400
|
|
157
157
|
description: oddb2xml creates xml files using swissINDEX, BAG-XML and Swissmedic.
|
|
158
158
|
email: yasaka@ywesee.com, zdavatz@ywesee.com
|
|
159
159
|
executables:
|