oddb2xml 1.1.4 → 1.1.5

Sign up to get free protection for your applications and to get access to all the features.
data/History.txt CHANGED
@@ -1,3 +1,7 @@
1
+ === 1.1.5 / 11.01.2013
2
+
3
+ * Add BG tags into article.xml from ywesee BM.txt
4
+
1
5
  === 1.1.4 / 10.01.2013
2
6
 
3
7
  * Add TITD tag into interaction.xml
@@ -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
- #xml.CDBG
477
- #xml.BG
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).to_hash
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]
@@ -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
@@ -204,7 +204,7 @@ module Oddb2xml
204
204
  def initialize(io)
205
205
  @io = io
206
206
  end
207
- def to_hash
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
@@ -1,3 +1,3 @@
1
1
  module Oddb2xml
2
- VERSION = "1.1.4"
2
+ VERSION = "1.1.5"
3
3
  end
@@ -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(:xml) { @downloader.download }
160
+ let(:io) { @downloader.download }
161
161
  it 'should read csv to IO Object' do
162
- xml.should be_a IO
163
- xml.bytes.should_not nil
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
- xml.should_not raise_error(Timeout::Error)
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
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-10 00:00:00.000000000 Z
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: &19703040 !ruby/object:Gem::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: *19703040
24
+ version_requirements: *21104340
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: archive-tar-minitar
27
- requirement: &19702540 !ruby/object:Gem::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: *19702540
35
+ version_requirements: *21103620
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: mechanize
38
- requirement: &19702040 !ruby/object:Gem::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: *19702040
46
+ version_requirements: *21103000
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: nokogiri
49
- requirement: &19701580 !ruby/object:Gem::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: *19701580
57
+ version_requirements: *21102480
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: savon
60
- requirement: &19700940 !ruby/object:Gem::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: *19700940
68
+ version_requirements: *21101700
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: spreadsheet
71
- requirement: &19700500 !ruby/object:Gem::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: *19700500
79
+ version_requirements: *21101060
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: rspec
82
- requirement: &19716280 !ruby/object:Gem::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: *19716280
90
+ version_requirements: *21100460
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: webmock
93
- requirement: &19715780 !ruby/object:Gem::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: *19715780
101
+ version_requirements: *21099960
102
102
  - !ruby/object:Gem::Dependency
103
103
  name: ZenTest
104
- requirement: &19715200 !ruby/object:Gem::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: *19715200
112
+ version_requirements: *21099480
113
113
  - !ruby/object:Gem::Dependency
114
114
  name: hoe
115
- requirement: &19714660 !ruby/object:Gem::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: *19714660
123
+ version_requirements: *21098920
124
124
  - !ruby/object:Gem::Dependency
125
125
  name: rdoc
126
- requirement: &19714100 !ruby/object:Gem::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: *19714100
134
+ version_requirements: *21098500
135
135
  - !ruby/object:Gem::Dependency
136
136
  name: rdoc
137
- requirement: &19713340 !ruby/object:Gem::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: *19713340
145
+ version_requirements: *21097920
146
146
  - !ruby/object:Gem::Dependency
147
147
  name: hoe
148
- requirement: &19711960 !ruby/object:Gem::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: *19711960
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: