oddb2xml 1.5.2 → 1.5.3

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.
File without changes
@@ -1,3 +1,7 @@
1
+ === 1.5.3 / 08.07.2013
2
+
3
+ * Add -p option for zurrose transfer.dat
4
+
1
5
  === 1.5.2 / 12.06.2013
2
6
 
3
7
  * Improve NINCD detection
@@ -17,9 +17,10 @@ Usage:
17
17
  -c F, --compress=F Compress format F. {tar.gz|zip}
18
18
  -f F, --format=F File format F, default is xml. {xml|dat}
19
19
  If F is given, -o option is ignored.
20
- -o O, --option=O Optional output. O, only 'fi' is available.
21
20
  -i I, --include=I Include target option for 'dat' format. only 'ean14' is available.
22
21
  'xml' format includes always ean14 records.
22
+ -o O, --option=O Optional output. O, only 'fi' is available.
23
+ -p P, --price=P Price source (transfer.dat). P, only 'zurrose' is available.
23
24
  -t S, --tag-suffix=S XML tag suffix S. Default is none. [A-z0-9]
24
25
  If S is given, it is also used as prefix of filename.
25
26
  -x N, --context=N context N {product|address}. product is default.
@@ -46,6 +47,7 @@ parser.on('-o v', '--option v', /^fi$/) {|v| opts[:fi] = true }
46
47
  parser.on('-i v', '--include v', /^ean14$/) {|v| opts[:ean14] = true }
47
48
  parser.on('-t v', '--tag-suffix v', /^[A-z0-9]*$/i) {|v| opts[:tag_suffix] = v.upcase }
48
49
  parser.on('-x v', '--context v', /^addr(ess)*$/i){|v| opts[:address] = true }
50
+ parser.on('-p v', '--prices v', /^zurrose$/) {|v| opts[:price] = v.intern }
49
51
  #parser.on('--debug') {|v| opts[:debug] = true }
50
52
  parser.on_tail('-h', '--help') { puts help; exit }
51
53
 
@@ -19,7 +19,7 @@ module Oddb2xml
19
19
  class Builder
20
20
  attr_accessor :subject, :index, :items, :flags, :lppvs,
21
21
  :actions, :migel, :orphans, :fridges,
22
- :infos, :packs,
22
+ :infos, :packs, :prices,
23
23
  :ean14, :tag_suffix,
24
24
  :companies, :people
25
25
  def initialize
@@ -31,6 +31,7 @@ module Oddb2xml
31
31
  @infos = {}
32
32
  @packs = {}
33
33
  @migel = {}
34
+ @prices = {} # zurrose
34
35
  @actions = []
35
36
  @orphans = []
36
37
  @fridges = []
@@ -645,7 +646,14 @@ module Oddb2xml
645
646
  #xml.LINENO
646
647
  #xml.NOUNITS
647
648
  #}
648
- if pac
649
+ if !@prices.empty? && de_idx[:ean] && \
650
+ price = @prices[de_idx[:ean]] # zurrose
651
+ xml.ARTPRI {
652
+ xml.VDAT datetime
653
+ xml.PTYP "ZURROSE"
654
+ xml.PRICE price
655
+ }
656
+ elsif pac
649
657
  pac[:prices].each_pair do |key, price|
650
658
  xml.ARTPRI {
651
659
  xml.VDAT price[:valid_date] unless price[:valid_date].empty?
@@ -22,6 +22,7 @@ module Oddb2xml
22
22
  @lppvs = {} # lppv.txt from files repo
23
23
  @infos = {} # [option] FI from SwissmedicInfo
24
24
  @packs = {} # [option] Packungen from Swissmedic for dat
25
+ @prices = {} # [addition] prices from zurrose transfer.txt
25
26
  @migel = {} # [addition] additional Non Pharma products from files repo
26
27
  @actions = [] # [addition] interactions from epha
27
28
  @orphans = [] # [addition] Orphaned drugs from Swissmedic xls
@@ -53,6 +54,9 @@ module Oddb2xml
53
54
  if @options[:nonpharma]
54
55
  threads << download(:migel) # oddb2xml_files
55
56
  end
57
+ if @options[:price] # zurrose
58
+ threads << download(@options[:price])
59
+ end
56
60
  threads << download(:package) # swissmedic
57
61
  threads << download(:bm_update) # oddb2xml_files
58
62
  threads << download(:lppv) # oddb2xml_files
@@ -109,7 +113,7 @@ module Oddb2xml
109
113
  builder.infos = @infos
110
114
  builder.packs = @packs
111
115
  # additional sources
112
- %w[actions orphans fridges migel].each do |addition|
116
+ %w[actions orphans fridges migel prices].each do |addition|
113
117
  builder.send("#{addition}=".intern, self.instance_variable_get("@#{addition}"))
114
118
  end
115
119
  end
@@ -225,6 +229,15 @@ module Oddb2xml
225
229
  @items = hsh
226
230
  end
227
231
  end
232
+ when :zurrose
233
+ Thread.new do
234
+ downloader = ZurroseDownloader.new(@options)
235
+ xml = downloader.download
236
+ @mutex.synchronize do
237
+ hsh = ZurroseExtractor.new(xml).to_hash
238
+ @prices = hsh
239
+ end
240
+ end
228
241
  when :index
229
242
  Thread.new do
230
243
  downloader = SwissIndexDownloader.new(@options, type, lang)
@@ -8,12 +8,13 @@ module Oddb2xml
8
8
  module DownloadMethod
9
9
  private
10
10
  def download_as(file, option='r')
11
+ data = nil
11
12
  begin
12
13
  response = @agent.get(@url)
13
14
  response.save_as(file)
14
15
  response = nil # win
15
16
  io = File.open(file, option)
16
- return io.read
17
+ data = io.read
17
18
  rescue Timeout::Error, Errno::ETIMEDOUT
18
19
  retrievable? ? retry : raise
19
20
  ensure
@@ -22,6 +23,7 @@ module Oddb2xml
22
23
  File.unlink(file)
23
24
  end
24
25
  end
26
+ return data
25
27
  end
26
28
  end
27
29
  class Downloader
@@ -109,6 +111,13 @@ module Oddb2xml
109
111
  download_as('oddb2xml_files_lppv.txt', 'r')
110
112
  end
111
113
  end
114
+ class ZurroseDownloader < Downloader
115
+ include DownloadMethod
116
+ def download
117
+ @url ||= 'http://zurrose.com/fileadmin/main/lib/download.php?file=/fileadmin/user_upload/downloads/DOS/IGM01_ohne_MwSt/Vollstamm/transfer.dat'
118
+ download_as('oddb2xml_zurrose_transfer.dat', 'r:iso-8859-1:utf-8')
119
+ end
120
+ end
112
121
  class MedregbmDownloader < Downloader
113
122
  include DownloadMethod
114
123
  def initialize(type=:company)
@@ -407,4 +407,19 @@ module Oddb2xml
407
407
  data
408
408
  end
409
409
  end
410
+ class ZurroseExtractor < Extractor
411
+ def initialize(dat)
412
+ @io = StringIO.new(dat)
413
+ end
414
+ def to_hash
415
+ data = {}
416
+ while line = @io.gets
417
+ next unless line =~ /(7680\d{9})\r\n$/
418
+ ean = $1.to_s
419
+ price = line[60,6].gsub(/(\d{2})$/, "." + $1.to_s).to_f.round(2).to_s
420
+ data[ean] = price
421
+ end
422
+ data
423
+ end
424
+ end
410
425
  end
@@ -1,3 +1,3 @@
1
1
  module Oddb2xml
2
- VERSION = "1.5.2"
2
+ VERSION = "1.5.3"
3
3
  end
@@ -284,3 +284,23 @@ describe Oddb2xml::MedregbmDownloader do
284
284
  end
285
285
  end
286
286
  end
287
+
288
+ describe Oddb2xml::ZurroseDownloader do
289
+ include ServerMockHelper
290
+ before(:each) do
291
+ setup_zurrose_server_mock
292
+ @downloader = Oddb2xml::ZurroseDownloader.new
293
+ end
294
+ it_behaves_like 'any downloader'
295
+ context 'when download is called' do
296
+ let(:dat) { @downloader.download }
297
+ it 'should read dat as String' do
298
+ dat.should be_a String
299
+ dat.bytes.should_not nil
300
+ end
301
+ it 'should clean up current directory' do
302
+ dat.should_not raise_error(Timeout::Error)
303
+ File.exist?('oddb2xml_zurrose_transfer.dat').should be(false)
304
+ end
305
+ end
306
+ end
@@ -228,6 +228,20 @@ module ServerMockHelper
228
228
  :headers => {'Content-Type' => 'text/plain; charset=utf-8'},
229
229
  :body => stub_response)
230
230
  end
231
+ def setup_zurrose_server_mock
232
+ # dat
233
+ stub_dat_url = 'http://zurrose.com/fileadmin/main/lib/download.php?file=/fileadmin/user_upload/downloads/DOS/IGM01_ohne_MwSt/Vollstamm/transfer.dat'
234
+ stub_response = File.read(File.expand_path('../data/zurrose_transfer.dat', __FILE__))
235
+ stub_request(:get, stub_dat_url).
236
+ with(:headers => {
237
+ 'Accept' => '*/*',
238
+ 'Host' => 'zurrose.com',
239
+ }).
240
+ to_return(
241
+ :status => 200,
242
+ :headers => {'Content-Type' => 'text/plain; charset=utf-8'},
243
+ :body => stub_response)
244
+ end
231
245
  end
232
246
 
233
247
  RSpec.configure do |config|
metadata CHANGED
@@ -1,186 +1,206 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: oddb2xml
3
- version: !ruby/object:Gem::Version
4
- version: 1.5.2
3
+ version: !ruby/object:Gem::Version
4
+ hash: 5
5
5
  prerelease:
6
+ segments:
7
+ - 1
8
+ - 5
9
+ - 3
10
+ version: 1.5.3
6
11
  platform: ruby
7
- authors:
12
+ authors:
8
13
  - Yasuhiro Asaka, Zeno R.R. Davatz
9
14
  autorequire:
10
15
  bindir: bin
11
16
  cert_chain: []
12
- date: 2013-06-12 00:00:00.000000000 Z
13
- dependencies:
14
- - !ruby/object:Gem::Dependency
17
+
18
+ date: 2013-07-08 00:00:00 Z
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
15
21
  name: rubyzip
16
- requirement: !ruby/object:Gem::Requirement
17
- none: false
18
- requirements:
19
- - - ! '>='
20
- - !ruby/object:Gem::Version
21
- version: '0'
22
- type: :runtime
23
22
  prerelease: false
24
- version_requirements: !ruby/object:Gem::Requirement
23
+ requirement: &id001 !ruby/object:Gem::Requirement
25
24
  none: false
26
- requirements:
27
- - - ! '>='
28
- - !ruby/object:Gem::Version
29
- version: '0'
30
- - !ruby/object:Gem::Dependency
31
- name: archive-tar-minitar
32
- requirement: !ruby/object:Gem::Requirement
33
- none: false
34
- requirements:
35
- - - ! '>='
36
- - !ruby/object:Gem::Version
37
- version: '0'
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ hash: 3
29
+ segments:
30
+ - 0
31
+ version: "0"
38
32
  type: :runtime
33
+ version_requirements: *id001
34
+ - !ruby/object:Gem::Dependency
35
+ name: archive-tar-minitar
39
36
  prerelease: false
40
- version_requirements: !ruby/object:Gem::Requirement
37
+ requirement: &id002 !ruby/object:Gem::Requirement
41
38
  none: false
42
- requirements:
43
- - - ! '>='
44
- - !ruby/object:Gem::Version
45
- version: '0'
46
- - !ruby/object:Gem::Dependency
47
- name: mechanize
48
- requirement: !ruby/object:Gem::Requirement
49
- none: false
50
- requirements:
51
- - - ~>
52
- - !ruby/object:Gem::Version
53
- version: 2.5.1
39
+ requirements:
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ hash: 3
43
+ segments:
44
+ - 0
45
+ version: "0"
54
46
  type: :runtime
47
+ version_requirements: *id002
48
+ - !ruby/object:Gem::Dependency
49
+ name: mechanize
55
50
  prerelease: false
56
- version_requirements: !ruby/object:Gem::Requirement
51
+ requirement: &id003 !ruby/object:Gem::Requirement
57
52
  none: false
58
- requirements:
53
+ requirements:
59
54
  - - ~>
60
- - !ruby/object:Gem::Version
55
+ - !ruby/object:Gem::Version
56
+ hash: 25
57
+ segments:
58
+ - 2
59
+ - 5
60
+ - 1
61
61
  version: 2.5.1
62
- - !ruby/object:Gem::Dependency
63
- name: nokogiri
64
- requirement: !ruby/object:Gem::Requirement
65
- none: false
66
- requirements:
67
- - - ! '>='
68
- - !ruby/object:Gem::Version
69
- version: '0'
70
62
  type: :runtime
63
+ version_requirements: *id003
64
+ - !ruby/object:Gem::Dependency
65
+ name: nokogiri
71
66
  prerelease: false
72
- version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
- requirements:
75
- - - ! '>='
76
- - !ruby/object:Gem::Version
77
- version: '0'
78
- - !ruby/object:Gem::Dependency
79
- name: savon
80
- requirement: !ruby/object:Gem::Requirement
67
+ requirement: &id004 !ruby/object:Gem::Requirement
81
68
  none: false
82
- requirements:
83
- - - ! '>='
84
- - !ruby/object:Gem::Version
85
- version: '2.0'
69
+ requirements:
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ hash: 3
73
+ segments:
74
+ - 0
75
+ version: "0"
86
76
  type: :runtime
77
+ version_requirements: *id004
78
+ - !ruby/object:Gem::Dependency
79
+ name: savon
87
80
  prerelease: false
88
- version_requirements: !ruby/object:Gem::Requirement
81
+ requirement: &id005 !ruby/object:Gem::Requirement
89
82
  none: false
90
- requirements:
91
- - - ! '>='
92
- - !ruby/object:Gem::Version
93
- version: '2.0'
94
- - !ruby/object:Gem::Dependency
83
+ requirements:
84
+ - - ">="
85
+ - !ruby/object:Gem::Version
86
+ hash: 3
87
+ segments:
88
+ - 2
89
+ - 0
90
+ version: "2.0"
91
+ type: :runtime
92
+ version_requirements: *id005
93
+ - !ruby/object:Gem::Dependency
95
94
  name: spreadsheet
96
- requirement: !ruby/object:Gem::Requirement
95
+ prerelease: false
96
+ requirement: &id006 !ruby/object:Gem::Requirement
97
97
  none: false
98
- requirements:
99
- - - ! '>='
100
- - !ruby/object:Gem::Version
101
- version: '0'
98
+ requirements:
99
+ - - ">="
100
+ - !ruby/object:Gem::Version
101
+ hash: 3
102
+ segments:
103
+ - 0
104
+ version: "0"
102
105
  type: :runtime
106
+ version_requirements: *id006
107
+ - !ruby/object:Gem::Dependency
108
+ name: rspec
103
109
  prerelease: false
104
- version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
- requirements:
107
- - - ! '>='
108
- - !ruby/object:Gem::Version
109
- version: '0'
110
- - !ruby/object:Gem::Dependency
111
- name: rdoc
112
- requirement: !ruby/object:Gem::Requirement
110
+ requirement: &id007 !ruby/object:Gem::Requirement
113
111
  none: false
114
- requirements:
115
- - - ~>
116
- - !ruby/object:Gem::Version
117
- version: '4.0'
112
+ requirements:
113
+ - - ">="
114
+ - !ruby/object:Gem::Version
115
+ hash: 3
116
+ segments:
117
+ - 0
118
+ version: "0"
118
119
  type: :development
120
+ version_requirements: *id007
121
+ - !ruby/object:Gem::Dependency
122
+ name: webmock
119
123
  prerelease: false
120
- version_requirements: !ruby/object:Gem::Requirement
121
- none: false
122
- requirements:
123
- - - ~>
124
- - !ruby/object:Gem::Version
125
- version: '4.0'
126
- - !ruby/object:Gem::Dependency
127
- name: rspec
128
- requirement: !ruby/object:Gem::Requirement
124
+ requirement: &id008 !ruby/object:Gem::Requirement
129
125
  none: false
130
- requirements:
131
- - - ! '>='
132
- - !ruby/object:Gem::Version
133
- version: '0'
126
+ requirements:
127
+ - - ">="
128
+ - !ruby/object:Gem::Version
129
+ hash: 3
130
+ segments:
131
+ - 0
132
+ version: "0"
134
133
  type: :development
134
+ version_requirements: *id008
135
+ - !ruby/object:Gem::Dependency
136
+ name: hoe
135
137
  prerelease: false
136
- version_requirements: !ruby/object:Gem::Requirement
138
+ requirement: &id009 !ruby/object:Gem::Requirement
137
139
  none: false
138
- requirements:
139
- - - ! '>='
140
- - !ruby/object:Gem::Version
141
- version: '0'
142
- - !ruby/object:Gem::Dependency
143
- name: webmock
144
- requirement: !ruby/object:Gem::Requirement
145
- none: false
146
- requirements:
147
- - - ! '>='
148
- - !ruby/object:Gem::Version
149
- version: '0'
140
+ requirements:
141
+ - - ">="
142
+ - !ruby/object:Gem::Version
143
+ hash: 15
144
+ segments:
145
+ - 3
146
+ - 4
147
+ version: "3.4"
150
148
  type: :development
149
+ version_requirements: *id009
150
+ - !ruby/object:Gem::Dependency
151
+ name: rdoc
151
152
  prerelease: false
152
- version_requirements: !ruby/object:Gem::Requirement
153
+ requirement: &id010 !ruby/object:Gem::Requirement
153
154
  none: false
154
- requirements:
155
- - - ! '>='
156
- - !ruby/object:Gem::Version
157
- version: '0'
158
- - !ruby/object:Gem::Dependency
159
- name: hoe
160
- requirement: !ruby/object:Gem::Requirement
155
+ requirements:
156
+ - - ">="
157
+ - !ruby/object:Gem::Version
158
+ hash: 3
159
+ segments:
160
+ - 0
161
+ version: "0"
162
+ type: :development
163
+ version_requirements: *id010
164
+ - !ruby/object:Gem::Dependency
165
+ name: rdoc
166
+ prerelease: false
167
+ requirement: &id011 !ruby/object:Gem::Requirement
161
168
  none: false
162
- requirements:
163
- - - ! '>='
164
- - !ruby/object:Gem::Version
165
- version: '3.4'
169
+ requirements:
170
+ - - ~>
171
+ - !ruby/object:Gem::Version
172
+ hash: 19
173
+ segments:
174
+ - 3
175
+ - 10
176
+ version: "3.10"
166
177
  type: :development
178
+ version_requirements: *id011
179
+ - !ruby/object:Gem::Dependency
180
+ name: hoe
167
181
  prerelease: false
168
- version_requirements: !ruby/object:Gem::Requirement
182
+ requirement: &id012 !ruby/object:Gem::Requirement
169
183
  none: false
170
- requirements:
171
- - - ! '>='
172
- - !ruby/object:Gem::Version
173
- version: '3.4'
184
+ requirements:
185
+ - - ~>
186
+ - !ruby/object:Gem::Version
187
+ hash: 25
188
+ segments:
189
+ - 2
190
+ - 13
191
+ version: "2.13"
192
+ type: :development
193
+ version_requirements: *id012
174
194
  description: oddb2xml creates xml files using swissINDEX, BAG-XML and Swissmedic.
175
195
  email: yasaka@ywesee.com, zdavatz@ywesee.com
176
- executables:
196
+ executables:
177
197
  - oddb2xml
178
198
  extensions: []
179
- extra_rdoc_files:
199
+
200
+ extra_rdoc_files:
180
201
  - History.txt
181
202
  - Manifest.txt
182
- - README.md
183
- files:
203
+ files:
184
204
  - .gitignore
185
205
  - .rspec
186
206
  - Gemfile
@@ -234,30 +254,40 @@ files:
234
254
  - tools/cacert.pem
235
255
  - tools/set.bat
236
256
  - tools/win_fetch_cacerts.rb
237
- homepage: https://github.com/zdavatz/oddb2xml
257
+ - .gemtest
258
+ homepage:
238
259
  licenses: []
260
+
239
261
  post_install_message:
240
- rdoc_options:
262
+ rdoc_options:
241
263
  - --main
242
- - README.md
243
- require_paths:
264
+ - README.txt
265
+ require_paths:
244
266
  - lib
245
- required_ruby_version: !ruby/object:Gem::Requirement
267
+ required_ruby_version: !ruby/object:Gem::Requirement
246
268
  none: false
247
- requirements:
248
- - - ! '>='
249
- - !ruby/object:Gem::Version
250
- version: '0'
251
- required_rubygems_version: !ruby/object:Gem::Requirement
269
+ requirements:
270
+ - - ">="
271
+ - !ruby/object:Gem::Version
272
+ hash: 3
273
+ segments:
274
+ - 0
275
+ version: "0"
276
+ required_rubygems_version: !ruby/object:Gem::Requirement
252
277
  none: false
253
- requirements:
254
- - - ! '>='
255
- - !ruby/object:Gem::Version
256
- version: '0'
278
+ requirements:
279
+ - - ">="
280
+ - !ruby/object:Gem::Version
281
+ hash: 3
282
+ segments:
283
+ - 0
284
+ version: "0"
257
285
  requirements: []
286
+
258
287
  rubyforge_project: oddb2xml
259
- rubygems_version: 1.8.23
288
+ rubygems_version: 1.8.25
260
289
  signing_key:
261
290
  specification_version: 3
262
291
  summary: oddb2xml creates xml files.
263
292
  test_files: []
293
+