oddb2xml 1.7.3 → 1.7.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,15 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: c63629fc30c3dc92cc4ca7bfef2f194d39ae5ee4
4
- data.tar.gz: 9a39a16d9eff949f9ec69142be1654052746819b
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ NjdkN2Q1MWNlY2EzMmNmNTZiNWJmYWM3N2Q1ZWM5N2NlNjU5MDhkMw==
5
+ data.tar.gz: !binary |-
6
+ OTRiMzM1OTUyN2ZhYjhiNTg2NzQ3Mzg3MzhkMjk5NDgxNzNmZmJmMQ==
5
7
  SHA512:
6
- metadata.gz: d69ac02e7d81df3f3f0533d7ba85446732342e33cc6fe0ffeda94c5d8e8e5ab180a2a6e72799b53f4c42bf446814253eb3823f1d58a8d1fe30f8ebfd81ed15e6
7
- data.tar.gz: 5d6bb6ea7c8d26e0264f7b886ecbe1482dc97e53ba377c2cc3b1ff17471d96462ee70383598aba53013aa1ed50ed96c66882587907ec3f6936b7c7560e81019e
8
+ metadata.gz: !binary |-
9
+ ZmU3MzM1ZDY3M2VlZGRiMjJmNDQ3OTBkM2FhNmMwOTZiNDkyODY2ODgzNTEx
10
+ NDlkNTc1OTc2MzZhZTY2YTc3NzZhZWNlNjMyYzk1Njg4NmI1N2EyZjE2MTkz
11
+ NWVlMDhkYjBkMDQ3ZmNhNmVkZjViMzhkMDZkYzM2NzUzZmQxM2U=
12
+ data.tar.gz: !binary |-
13
+ YTk3ZGY1M2MyZWMyODBmNmYyOGNiNGUyNmU0MWExMDA2ODMyZGNhNzAwYmM2
14
+ OTRiN2UwOTM3NDU4ZjAzNWZmYjI0MmU4NGM5NzcxNDA2YjQzMjNmMTRkMjc2
15
+ MTcyM2MzNjcyMGYwYzkxNGQwYzQzMWZhNjFhYWFhZjgzOTFiOWY=
@@ -9,9 +9,15 @@ before_install:
9
9
  script: bundle exec rake spec
10
10
 
11
11
  rvm:
12
- - 1.8.7
13
12
  - 1.9.3
14
13
  - 2.0.0
14
+ - 2.1
15
+ - ruby-head
16
+
17
+ matrix:
18
+ allow_failures:
19
+ - rvm: ruby-head
20
+
15
21
  notifications:
16
22
  email:
17
23
  recipients:
data/Gemfile CHANGED
@@ -1,20 +1,6 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
- gem 'rubyzip', '1.0.0'
4
- gem 'archive-tar-minitar'
5
- gem 'mechanize', '~> 2.5.1'
6
- gem 'nokogiri', '~> 1.5.10'
7
- gem 'savon', '>= 2.0'
8
- gem 'spreadsheet'
9
- gem 'rubyXL', '1.2.10'
10
-
11
- group :development do
12
- gem 'rspec'
13
- gem 'webmock'
14
-
15
- gem 'hoe', '>= 3.4'
16
- gem 'rdoc'
17
- end
3
+ gemspec
18
4
 
19
5
  group :debugger do
20
6
  gem 'pry-debugger'
@@ -1,29 +1,39 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ oddb2xml (1.7.4)
5
+ archive-tar-minitar
6
+ mechanize (~> 2.5.1)
7
+ nokogiri (~> 1.5.10)
8
+ rubyXL (~> 2.5)
9
+ rubyzip (~> 1.0)
10
+ savon (~> 2.0)
11
+ spreadsheet
12
+
1
13
  GEM
2
14
  remote: https://rubygems.org/
3
15
  specs:
4
- addressable (2.3.5)
5
- akami (1.2.0)
16
+ addressable (2.3.6)
17
+ akami (1.2.1)
6
18
  gyoku (>= 0.4.0)
7
- nokogiri (>= 1.4.0)
19
+ nokogiri
8
20
  archive-tar-minitar (0.5.2)
9
21
  builder (3.2.2)
10
22
  coderay (1.1.0)
11
23
  columnize (0.3.6)
12
- crack (0.4.1)
13
- safe_yaml (~> 0.9.0)
14
- debugger (1.6.5)
24
+ crack (0.4.2)
25
+ safe_yaml (~> 1.0.0)
26
+ debugger (1.6.6)
15
27
  columnize (>= 0.3.1)
16
28
  debugger-linecache (~> 1.2.0)
17
- debugger-ruby_core_source (~> 1.3.1)
29
+ debugger-ruby_core_source (~> 1.3.2)
18
30
  debugger-linecache (1.2.0)
19
- debugger-ruby_core_source (1.3.1)
31
+ debugger-ruby_core_source (1.3.2)
20
32
  diff-lcs (1.2.5)
21
- domain_name (0.5.15)
33
+ domain_name (0.5.18)
22
34
  unf (>= 0.0.5, < 1.0.0)
23
35
  gyoku (1.1.1)
24
36
  builder (>= 2.1.2)
25
- hoe (3.7.4)
26
- rake (>= 0.8, < 11.0)
27
37
  httpi (2.1.0)
28
38
  rack
29
39
  rubyntlm (~> 0.3.2)
@@ -39,11 +49,11 @@ GEM
39
49
  method_source (0.8.2)
40
50
  mime-types (1.25.1)
41
51
  net-http-digest_auth (1.4)
42
- net-http-persistent (2.9)
52
+ net-http-persistent (2.9.4)
43
53
  nokogiri (1.5.11)
44
54
  nori (2.3.0)
45
55
  ntlm-http (0.1.1)
46
- pry (0.9.12.4)
56
+ pry (0.9.12.6)
47
57
  coderay (~> 1.0)
48
58
  method_source (~> 0.8)
49
59
  slop (~> 3.4)
@@ -51,23 +61,25 @@ GEM
51
61
  debugger (~> 1.3)
52
62
  pry (~> 0.9.10)
53
63
  rack (1.5.2)
54
- rake (10.1.1)
55
- rdoc (4.1.0)
64
+ rake (10.2.2)
65
+ rdoc (4.1.1)
56
66
  json (~> 1.4)
57
67
  rspec (2.14.1)
58
68
  rspec-core (~> 2.14.0)
59
69
  rspec-expectations (~> 2.14.0)
60
70
  rspec-mocks (~> 2.14.0)
61
- rspec-core (2.14.7)
62
- rspec-expectations (2.14.4)
71
+ rspec-core (2.14.8)
72
+ rspec-expectations (2.14.5)
63
73
  diff-lcs (>= 1.1.3, < 2.0)
64
- rspec-mocks (2.14.4)
74
+ rspec-mocks (2.14.6)
65
75
  ruby-ole (1.2.11.7)
66
- rubyXL (1.2.10)
76
+ rubyXL (2.5.0)
77
+ nokogiri (>= 1.4.4)
78
+ rubyzip (>= 1.0.0)
67
79
  rubyntlm (0.3.4)
68
- rubyzip (1.0.0)
69
- safe_yaml (0.9.7)
70
- savon (2.3.3)
80
+ rubyzip (1.1.2)
81
+ safe_yaml (1.0.1)
82
+ savon (2.4.0)
71
83
  akami (~> 1.2.0)
72
84
  builder (>= 2.1.2)
73
85
  gyoku (~> 1.1.0)
@@ -75,8 +87,8 @@ GEM
75
87
  nokogiri (>= 1.4.0)
76
88
  nori (~> 2.3.0)
77
89
  wasabi (~> 3.2.2)
78
- slop (3.4.7)
79
- spreadsheet (0.9.6)
90
+ slop (3.5.0)
91
+ spreadsheet (0.9.7)
80
92
  ruby-ole (>= 1.0)
81
93
  unf (0.1.3)
82
94
  unf_ext
@@ -85,7 +97,7 @@ GEM
85
97
  httpi (~> 2.0)
86
98
  mime-types (< 2.0.0)
87
99
  nokogiri (>= 1.4.0)
88
- webmock (1.16.1)
100
+ webmock (1.17.4)
89
101
  addressable (>= 2.2.7)
90
102
  crack (>= 0.3.2)
91
103
  webrobots (0.1.1)
@@ -94,15 +106,10 @@ PLATFORMS
94
106
  ruby
95
107
 
96
108
  DEPENDENCIES
97
- archive-tar-minitar
98
- hoe (>= 3.4)
99
- mechanize (~> 2.5.1)
100
- nokogiri (~> 1.5.10)
109
+ bundler
110
+ oddb2xml!
101
111
  pry-debugger
112
+ rake
102
113
  rdoc
103
114
  rspec
104
- rubyXL
105
- rubyzip (= 1.0.0)
106
- savon (>= 2.0)
107
- spreadsheet
108
115
  webmock
@@ -1,29 +1,37 @@
1
- === 1.7.3 / 27.02.2013
1
+ === 1.7.5 / 01.04.2014
2
+
3
+ * Added option -ae
4
+
5
+ === 1.7.4 / 01.04.2014
6
+
7
+ * Added option --extended
8
+
9
+ === 1.7.3 / 27.02.2014
2
10
 
3
11
  * Added rubyzip 1.0.0 as dependency for RubyXL in Rakefile ;/
4
12
 
5
- === 1.7.2 / 27.02.2013
13
+ === 1.7.2 / 27.02.2014
6
14
 
7
15
  * Added rubyzip 1.0.0 as dependency for RubyXL in Gemfile.lock ;/
8
16
 
9
- === 1.7.1 / 27.02.2013
17
+ === 1.7.1 / 27.02.2014
10
18
 
11
19
  * Added rubyzip 1.0.0 as dependency for RubyXL ;/
12
20
 
13
- === 1.7.0 / 27.02.2013
21
+ === 1.7.0 / 27.02.2014
14
22
 
15
23
  * Added rubyXL 1.2.10 as dependency version
16
24
 
17
- === 1.6.9 / 07.01.2013
25
+ === 1.6.9 / 07.01.2014
18
26
 
19
27
  * Updated Rakefile for rubyzip ~> 0.9.9
20
28
  * Remove *.xls/x-Files after extraction
21
29
 
22
- === 1.6.8 / 07.01.2013
30
+ === 1.6.8 / 07.01.2014
23
31
 
24
32
  * Updated Rakefile to include rubyXL
25
33
 
26
- === 1.6.7 / 07.01.2013
34
+ === 1.6.7 / 07.01.2014
27
35
 
28
36
  * Adapted to swissmedic xlsx files
29
37
 
data/Rakefile CHANGED
@@ -1,36 +1,13 @@
1
1
  #!/usr/bin/env ruby
2
2
  # encoding: utf-8
3
+ lib = File.expand_path('../lib', __FILE__)
4
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
+ require 'oddb2xml/version'
6
+ require "bundler/gem_tasks"
3
7
 
4
- require 'rubygems'
5
- require 'hoe'
8
+ # dependencies are now declared in oddb2xml.gemspec
6
9
 
7
- # Hoe.plugin :compiler
8
- # Hoe.plugin :gem_prelude_sucks
9
- # Hoe.plugin :inline
10
- # Hoe.plugin :minitest
11
- # Hoe.plugin :racc
12
- # Hoe.plugin :rubyforge
13
-
14
- Hoe.spec 'oddb2xml' do
15
- self.author = "Yasuhiro Asaka, Zeno R.R. Davatz" # gem.authors
16
- self.email = "yasaka@ywesee.com, zdavatz@ywesee.com"
17
- self.description = "oddb2xml creates xml files using swissINDEX, BAG-XML and Swissmedic."
18
- self.summary = "oddb2xml creates xml files."
19
- self.urls = ["https://github.com/zdavatz/oddb2xml"] # gem.homepage
20
-
21
- # gem.add_runtime_dependency
22
- self.extra_deps << ['rubyzip', '~> 1.0.0']
23
- self.extra_deps << ['archive-tar-minitar']
24
- self.extra_deps << ['mechanize', '~> 2.5.1']
25
- self.extra_deps << ['nokogiri']
26
- self.extra_deps << ['savon', '>= 2.0']
27
- self.extra_deps << ['spreadsheet']
28
- self.extra_deps << ['rubyXL', '~> 1.2.10']
29
-
30
- # gem.add_development_dependency
31
- self.extra_dev_deps << ['rspec']
32
- self.extra_dev_deps << ['webmock']
33
-
34
- self.extra_dev_deps << ['hoe', '>= 3.4']
35
- self.extra_dev_deps << ['rdoc']
36
- end
10
+ desc 'Offer a gem task like hoe'
11
+ task :gem => :build do
12
+ Rake::Task[:build].invoke
13
+ end
@@ -15,7 +15,10 @@ Usage:
15
15
  oddb2xml [option]
16
16
  produced files are found under data
17
17
  -a T, --append=T Additional target. T, only 'nonpharma' is available.
18
+ -ae Combine options nonpharma, extended, prices from ZurRose to create a oddb_with_migel.dat file.
18
19
  -c F, --compress=F Compress format F. {tar.gz|zip}
20
+ -e --extended Get also all articles (including prices) from zurrose which have an EAN13 code.
21
+ (only valid if -p zurrose given)
19
22
  -f F, --format=F File format F, default is xml. {xml|dat}
20
23
  If F is given, -o option is ignored.
21
24
  -i I, --include=I Include target option for 'dat' format. only 'ean14' is available.
@@ -38,6 +41,7 @@ opts = {
38
41
  :fi => false,
39
42
  :adr => false,
40
43
  :nonpharma => false,
44
+ :extended => false,
41
45
  :compress_ext => nil,
42
46
  :format => :xml,
43
47
  :tag_suffix => nil,
@@ -47,7 +51,13 @@ opts = {
47
51
  }
48
52
 
49
53
  parser.on('-a v', '--append v', /^nonpharma$/) {|v| opts[:nonpharma] = true }
54
+ parser.on('-ae') {|v| opts[:nonpharma] = true;
55
+ opts[:extended] = true;
56
+ opts[:format] = :dat;
57
+ opts[:price] = :zurrose;
58
+ }
50
59
  parser.on('-c v', '--compress v', /^tar\.gz|zip$/){|v| opts[:compress_ext] = v }
60
+ parser.on('-e', '--extended') {|v| opts[:extended] = true }
51
61
  parser.on('-f v', '--format v', /^xml|dat$/) {|v| opts[:format] = v.intern }
52
62
  parser.on('-o v', '--option v', /^fi$/) {|v| opts[:fi] = true }
53
63
  parser.on('-i v', '--include v', /^ean14$/) {|v| opts[:ean14] = true }
@@ -99,12 +99,37 @@ module Oddb2xml
99
99
  end
100
100
  @articles << obj
101
101
  end
102
+ if @options[:extended]
103
+ nrAdded = 0
104
+ @prices.each{
105
+ |ean13, info|
106
+ obj = {}
107
+ %w[de fr].each do |lang|
108
+ next if @index[lang] and @index[lang][ean13]
109
+ entry = {
110
+ :desc => info[:description],
111
+ :status => 'I', # or it will not be emitted in the dat
112
+ :atc_code => '',
113
+ :ean => ean13,
114
+ :lang => lang.capitalize,
115
+ :pharmacode => info[:pharmacode],
116
+ :price => info[:price],
117
+ :pub_price => info[:pub_price],
118
+ :type => info[:type],
119
+ }
120
+ obj[lang.intern] = [entry]
121
+ end
122
+ nrAdded += 1
123
+ @articles << obj
124
+ }
125
+ end
102
126
  end
103
127
  end
104
128
  def prepare_substances
105
129
  unless @substances
106
130
  @substances = []
107
131
  @items.values.uniq.each do |seq|
132
+ next unless seq[:substances]
108
133
  seq[:substances].each do |sub|
109
134
  @substances << sub[:name]
110
135
  end
@@ -117,6 +142,7 @@ module Oddb2xml
117
142
  unless @limitations
118
143
  limitations = []
119
144
  @items.values.uniq.each do |seq|
145
+ next unless seq[:packages]
120
146
  seq[:packages].each_value do |pac|
121
147
  limitations += pac[:limitations]
122
148
  end
@@ -539,7 +565,7 @@ module Oddb2xml
539
565
  ) {
540
566
  @articles.each do |obj|
541
567
  obj[:de].each_with_index do |de_idx, i|
542
- fr_idx = obj[:fr][i] # swissindex FR
568
+ fr_idx = obj[:fr][i] # swissindex FR
543
569
  pac,no8 = nil,de_idx[:ean][4..11] # BAG-XML(SL/LS)
544
570
  ppac = nil # Packungen
545
571
  ean = de_idx[:ean]
@@ -547,7 +573,7 @@ module Oddb2xml
547
573
  pac = obj[:seq][:packages][de_idx[:pharmacode]]
548
574
  pac = obj[:seq][:packages][ean] unless pac
549
575
  else
550
- pac = @items[ean][:packages][ean] if @items and @items[ean]
576
+ pac = @items[ean][:packages][ean] if @items and @items[ean] and @items[ean][:packages]
551
577
  end
552
578
  if no8
553
579
  ppac = ((_ppac = @packs[no8.intern] and !_ppac[:is_tier]) ? _ppac : nil)
@@ -599,11 +625,11 @@ module Oddb2xml
599
625
  xml.BG(flag ? 'Y' : 'N')
600
626
  end
601
627
  #xml.EXP
602
- xml.QTY de_idx[:additional_desc] unless de_idx[:additional_desc].empty?
603
- xml.DSCRD de_idx[:desc] unless de_idx[:desc].empty?
604
- xml.DSCRF fr_idx[:desc] unless fr_idx[:desc].empty?
605
- xml.SORTD de_idx[:desc].upcase unless de_idx[:desc].empty?
606
- xml.SORTF fr_idx[:desc].upcase unless fr_idx[:desc].empty?
628
+ xml.QTY de_idx[:additional_desc] if de_idx[:additional_desc] and not de_idx[:additional_desc].empty?
629
+ xml.DSCRD de_idx[:desc] if de_idx[:desc] and not de_idx[:desc].empty?
630
+ xml.DSCRF fr_idx[:desc] if fr_idx[:desc] and not fr_idx[:desc].empty?
631
+ xml.SORTD de_idx[:desc].upcase if de_idx[:desc] and not de_idx[:desc].empty?
632
+ xml.SORTF fr_idx[:desc].upcase if fr_idx[:desc] and not fr_idx[:desc].empty?
607
633
  #xml.QTYUD
608
634
  #xml.QTYUF
609
635
  #xml.IMG
@@ -630,8 +656,8 @@ module Oddb2xml
630
656
  #xml.BAGSL
631
657
  #xml.BAGSLC
632
658
  #xml.LOACD
633
- if de_idx[:status] == "I"
634
- xml.OUTSAL de_idx[:stat_date] unless de_idx[:stat_date].empty?
659
+ if de_idx[:status] == 'I'
660
+ xml.OUTSAL de_idx[:stat_date] if de_idx[:stat_date] and not de_idx[:stat_date].empty?
635
661
  end
636
662
  #xml.STTOX
637
663
  #xml.NOTI
@@ -647,7 +673,7 @@ module Oddb2xml
647
673
  #xml.DEL
648
674
  xml.ARTCOMP {
649
675
  # use ean13(gln) as COMPNO
650
- xml.COMPNO de_idx[:company_ean] unless de_idx[:company_ean].empty?
676
+ xml.COMPNO de_idx[:company_ean] if de_idx[:company_ean] and not de_idx[:company_ean].empty?
651
677
  #xml.ROLE
652
678
  #xml.ARTNO1
653
679
  #xml.ARTNO2
@@ -889,6 +915,7 @@ module Oddb2xml
889
915
  else
890
916
  # fallback via EAN
891
917
  bag_entry_via_ean = @items.values.select do |i|
918
+ next unless i[:packages]
892
919
  i[:packages].values.select {|_pac| _pac[:ean] == de_idx[:ean] }.length != 0
893
920
  end.length
894
921
  if bag_entry_via_ean > 0
@@ -960,15 +987,16 @@ module Oddb2xml
960
987
  obj[:de].each_with_index do |idx, i|
961
988
  ean = idx[:ean]
962
989
  next if ((ean.to_s.length != 13) and !ean14)
990
+ next if idx[:type] == :nonpharma
963
991
  row = ''
964
992
  # Oddb2tdat.parse
965
993
  if idx[:status] =~ /A|I/
966
994
  pac,no8 = nil,nil
967
- if obj[:seq]
995
+ if obj[:seq] and obj[:seq][:packages]
968
996
  pac = obj[:seq][:packages][idx[:pharmacode]]
969
997
  pac = obj[:seq][:packages][ean] unless pac
970
998
  else
971
- pac = @items[ean][:packages][ean] if @items and @items[ean]
999
+ pac = @items[ean][:packages][ean] if @items and @items[ean] and @items[ean][:packages]
972
1000
  end
973
1001
  # :swissmedic_numbers
974
1002
  if pac
@@ -980,7 +1008,7 @@ module Oddb2xml
980
1008
  end
981
1009
  row << "%#{DAT_LEN[:RECA]}s" % '11'
982
1010
  row << "%#{DAT_LEN[:CMUT]}s" % if (phar = idx[:pharmacode] and phar.size > 3) # does not check expiration_date
983
- idx[:status] == "I" ? '3' : '1'
1011
+ idx[:status] == 'I' ? '3' : '1'
984
1012
  else
985
1013
  '3'
986
1014
  end
@@ -988,7 +1016,7 @@ module Oddb2xml
988
1016
  abez = ( # de name
989
1017
  idx[:desc].to_s + " " +
990
1018
  (pac ? pac[:name_de].to_s : '') +
991
- idx[:additional_desc]
1019
+ (idx[:additional_desc] ? idx[:additional_desc] : '')
992
1020
  ).gsub(/"/, '')
993
1021
  row << format_name(abez)
994
1022
  row << "%#{DAT_LEN[:PRMO]}s" % (pac ? format_price(pac[:prices][:exf_price][:price].to_s) : ('0' * DAT_LEN[:PRMO]))
@@ -1048,7 +1076,7 @@ module Oddb2xml
1048
1076
  row << "%0#{DAT_LEN[:PHAR]}d" % idx[:pharmacode].to_i
1049
1077
  abez = ( # de name
1050
1078
  idx[:desc].to_s + " " +
1051
- idx[:additional_desc]
1079
+ (idx[:additional_desc] ? idx[:additional_desc] : '')
1052
1080
  ).gsub(/"/, '')
1053
1081
  row << format_name(abez)
1054
1082
  row << "%#{DAT_LEN[:PRMO]}s" % ('0' * DAT_LEN[:PRMO])
@@ -237,7 +237,8 @@ module Oddb2xml
237
237
  downloader = ZurroseDownloader.new(@options, @options[:transfer_dat])
238
238
  xml = downloader.download
239
239
  @mutex.synchronize do
240
- hsh = ZurroseExtractor.new(xml).to_hash
240
+ hsh = ZurroseExtractor.new(xml, @options[:extended]).to_hash
241
+ @items = hsh if @options[:extended]
241
242
  @prices = hsh
242
243
  end
243
244
  end
@@ -2,7 +2,7 @@
2
2
 
3
3
  require 'zlib'
4
4
  require 'archive/tar/minitar'
5
- require 'zip/zip'
5
+ require 'zip'
6
6
 
7
7
  module Oddb2xml
8
8
  class Compressor
@@ -27,7 +27,7 @@ module Oddb2xml
27
27
  tgz = Zlib::GzipWriter.new(File.open(@compress_file, 'wb'))
28
28
  Minitar.pack(@contents, tgz)
29
29
  when /\.zip$/
30
- Zip::ZipFile.open(@compress_file, Zip::ZipFile::CREATE) do |zip|
30
+ Zip::File.open(@compress_file, Zip::File::CREATE) do |zip|
31
31
  @contents.each do |file|
32
32
  filename = File.basename(file)
33
33
  zip.add(filename, file)
@@ -1,7 +1,7 @@
1
1
  # encoding: utf-8
2
2
 
3
3
  require 'mechanize'
4
- require 'zip/zip'
4
+ require 'zip'
5
5
  require 'savon'
6
6
 
7
7
  module Oddb2xml
@@ -64,7 +64,7 @@ module Oddb2xml
64
64
  def read_xml_form_zip(target, zipfile)
65
65
  xml = ''
66
66
  if RUBY_PLATFORM =~ /mswin|mingw|bccwin|cygwin/i
67
- Zip::ZipFile.open(zipfile) do |zipFile|
67
+ Zip::File.open(zipfile) do |zipFile|
68
68
  zipFile.each do |entry|
69
69
  if entry.name =~ target
70
70
  io = entry.get_input_stream
@@ -78,7 +78,7 @@ module Oddb2xml
78
78
  end
79
79
  end
80
80
  else
81
- Zip::ZipFile.foreach(zipfile) do |entry|
81
+ Zip::File.foreach(zipfile) do |entry|
82
82
  if entry.name =~ target
83
83
  entry.get_input_stream { |io| xml = io.read }
84
84
  end
@@ -415,20 +415,55 @@ module Oddb2xml
415
415
  end
416
416
  end
417
417
  class ZurroseExtractor < Extractor
418
- def initialize(dat)
418
+ # see http://dev.ywesee.com/Bbmb/TransferDat
419
+ def initialize(dat, extended = false)
420
+ @@extended = extended
421
+ @@items_without_ean13s ||= 0
422
+ @@duplicated_ean13s ||= 0
423
+ @@zur_rose_items ||= 0
419
424
  @io = StringIO.new(dat) if dat
420
425
  end
421
426
  def to_hash
422
427
  data = {}
423
428
  while line = @io.gets
424
- next unless line =~ /(7680\d{9})(\d{1})\r\n$/
425
- data[$1.to_s] = {
426
- :vat => $2.to_s,
427
- :price => sprintf("%.2f", line[60,6].gsub(/(\d{2})$/, '.\1').to_f),
428
- :pub_price => sprintf("%.2f", line[66,6].gsub(/(\d{2})$/, '.\1').to_f),
429
+ if @@extended
430
+ next unless line =~ /(\d{13})(\d{1})\r\n$/
431
+ else
432
+ next unless line =~ /(7680\d{9})(\d{1})\r\n$/
433
+ end
434
+ pharma_code = line[3..9]
435
+ if $1.to_s == '0000000000000'
436
+ @@items_without_ean13s += 1
437
+ ean13 = '000000' + pharma_code # dummy ean13
438
+ else
439
+ ean13 = $1.to_s
440
+ end
441
+ if data[ean13]
442
+ puts "Duplicate ean13 #{ean13} in line \nact: #{line.chomp}\norg: #{data[ean13][:line]}"
443
+ @@items_without_ean13s -= 1
444
+ @@duplicated_ean13s += 1
445
+ next
446
+ end
447
+ data[ean13] = {
448
+ :line => line.chomp,
449
+ :ean => ean13,
450
+ :vat => $2.to_s,
451
+ :description => line[10..59], # .sub(/\s+$/, ''),
452
+ :additional_desc => '',
453
+ :pharmacode => pharma_code,
454
+ :price => sprintf("%.2f", line[60,6].gsub(/(\d{2})$/, '.\1').to_f),
455
+ :pub_price => sprintf("%.2f", line[66,6].gsub(/(\d{2})$/, '.\1').to_f),
456
+ :type => :nonpharma,
429
457
  }
458
+ @@zur_rose_items += 1
430
459
  end if @io
431
460
  data
432
461
  end
462
+ at_exit do
463
+ if defined?(@@extended) and @@extended
464
+ puts "Added #{@@items_without_ean13s} via pharmacodes of #{@@zur_rose_items} items when extracting the transfer.dat from \"Zur Rose\""
465
+ puts " found #{@@duplicated_ean13s} lines with duplicated ean13" if @@duplicated_ean13s > 0
466
+ end
467
+ end
433
468
  end
434
469
  end
@@ -1,3 +1,3 @@
1
1
  module Oddb2xml
2
- VERSION = "1.7.3"
2
+ VERSION = "1.7.5"
3
3
  end
@@ -0,0 +1,35 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'oddb2xml/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "oddb2xml"
8
+ spec.version = Oddb2xml::VERSION
9
+ spec.author = "Yasuhiro Asaka, Zeno R.R. Davatz"
10
+ spec.email = "yasaka@ywesee.com, zdavatz@ywesee.com"
11
+ spec.description = "oddb2xml creates xml files using swissINDEX, BAG-XML and Swissmedic."
12
+ spec.summary = "oddb2xml creates xml files."
13
+ spec.homepage = "https://github.com/zdavatz/oddb2xml"
14
+ spec.license = "GPL-v2"
15
+ spec.files = `git ls-files -z`.split("\x0")
16
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
17
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
18
+ spec.require_paths = ["lib"]
19
+
20
+ spec.add_dependency 'rubyzip', '~> 1.0'
21
+ spec.add_dependency 'archive-tar-minitar'
22
+ spec.add_dependency 'mechanize', '~> 2.5.1'
23
+ spec.add_dependency 'nokogiri', '~> 1.5.10'
24
+ spec.add_dependency 'savon', '~> 2.0'
25
+ spec.add_dependency 'spreadsheet'
26
+ spec.add_dependency 'rubyXL', '~> 2.5'
27
+
28
+
29
+ spec.add_development_dependency "bundler"
30
+ spec.add_development_dependency "rake"
31
+ spec.add_development_dependency "rspec"
32
+ spec.add_development_dependency "webmock"
33
+ spec.add_development_dependency "rdoc"
34
+ end
35
+
@@ -133,27 +133,54 @@ describe Oddb2xml::ZurroseExtractor do
133
133
  end
134
134
  it { expect(subject.to_hash).to be_empty }
135
135
  end
136
- context 'when only 1 record have a valid EAN code' do
136
+ context 'when expected line is given' do
137
137
  subject do
138
138
  dat = <<-DAT
139
- 1120020209ERYTRHOCIN I.V. Trockensub Fl 1g 001518002010300B080160000000000000002\r\n
140
139
  1120020244FERRO-GRADUMET Depottabl 30 Stk 000895001090300C060710076803164401152\r\n
141
140
  DAT
142
141
  Oddb2xml::ZurroseExtractor.new(dat)
143
142
  end
144
143
  it { expect(subject.to_hash.keys.length).to eq(1) }
145
144
  it { expect(subject.to_hash.keys.first).to eq("7680316440115") }
145
+ it { expect(subject.to_hash.values.first[:vat]).to eq("2") }
146
+ it { expect(subject.to_hash.values.first[:price]).to eq("8.95") }
146
147
  end
147
- context 'when expected line is given' do
148
+ context 'when Estradiol Creme is given' do
148
149
  subject do
149
150
  dat = <<-DAT
150
- 1120020244FERRO-GRADUMET Depottabl 30 Stk 000895001090300C060710076803164401152\r\n
151
+ 1130921929OESTRADIOL Inj L�s 5 mg 10 Amp 1 ml 000940001630300B070820076802840708402\r\n
151
152
  DAT
152
153
  Oddb2xml::ZurroseExtractor.new(dat)
153
154
  end
155
+ #it { expect(pp subject.to_hash) }
154
156
  it { expect(subject.to_hash.keys.length).to eq(1) }
155
- it { expect(subject.to_hash.keys.first).to eq("7680316440115") }
157
+ it { expect(subject.to_hash.keys.first).to eq("7680284070840") }
156
158
  it { expect(subject.to_hash.values.first[:vat]).to eq("2") }
157
- it { expect(subject.to_hash.values.first[:price]).to eq("8.95") }
159
+ it { expect(subject.to_hash.values.first[:price]).to eq("9.40") }
160
+ it { expect(subject.to_hash.values.first[:pub_price]).to eq("16.30") }
161
+ it { expect(subject.to_hash.values.first[:pharmacode]).to eq("0921929") }
162
+ end
163
+ context 'when SELSUN Shampoo is given' do
164
+ subject do
165
+ dat = <<-DAT
166
+ 1120020652SELSUN Shampoo Susp 120 ml 001576002430300D100400076801723306812\r\n
167
+ DAT
168
+ Oddb2xml::ZurroseExtractor.new(dat)
169
+ end
170
+ it { expect(subject.to_hash.keys.length).to eq(1) }
171
+ it { expect(subject.to_hash.keys.first).to eq("7680172330681") }
172
+ it { expect(subject.to_hash.values.first[:vat]).to eq("2") }
173
+ it { expect(subject.to_hash.values.first[:price]).to eq("15.76") }
174
+ it { expect(subject.to_hash.values.first[:pub_price]).to eq("24.30") }
175
+ it { expect(subject.to_hash.values.first[:pharmacode]).to eq("0020652") }
176
+
158
177
  end
178
+
179
+ x =%(
180
+ Record-Art 1 Länge 97
181
+ :vat => $2.to_s,
182
+ :price => sprintf("%.2f", line[60,6].gsub(/(\d{2})$/, '.\1').to_f),
183
+ :pub_price => sprintf("%.2f", line[66,6].gsub(/(\d{2})$/, '.\1').to_f),
184
+ =
185
+ )
159
186
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: oddb2xml
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.7.3
4
+ version: 1.7.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yasuhiro Asaka, Zeno R.R. Davatz
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-02-27 00:00:00.000000000 Z
11
+ date: 2014-04-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rubyzip
@@ -16,26 +16,26 @@ dependencies:
16
16
  requirements:
17
17
  - - ~>
18
18
  - !ruby/object:Gem::Version
19
- version: 1.0.0
19
+ version: '1.0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ~>
25
25
  - !ruby/object:Gem::Version
26
- version: 1.0.0
26
+ version: '1.0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: archive-tar-minitar
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - '>='
31
+ - - ! '>='
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - '>='
38
+ - - ! '>='
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
@@ -56,42 +56,42 @@ dependencies:
56
56
  name: nokogiri
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - '>='
59
+ - - ~>
60
60
  - !ruby/object:Gem::Version
61
- version: '0'
61
+ version: 1.5.10
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - '>='
66
+ - - ~>
67
67
  - !ruby/object:Gem::Version
68
- version: '0'
68
+ version: 1.5.10
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: savon
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - '>='
73
+ - - ~>
74
74
  - !ruby/object:Gem::Version
75
75
  version: '2.0'
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - '>='
80
+ - - ~>
81
81
  - !ruby/object:Gem::Version
82
82
  version: '2.0'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: spreadsheet
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - '>='
87
+ - - ! '>='
88
88
  - !ruby/object:Gem::Version
89
89
  version: '0'
90
90
  type: :runtime
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
- - - '>='
94
+ - - ! '>='
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
97
  - !ruby/object:Gem::Dependency
@@ -100,80 +100,90 @@ dependencies:
100
100
  requirements:
101
101
  - - ~>
102
102
  - !ruby/object:Gem::Version
103
- version: 1.2.10
103
+ version: '2.5'
104
104
  type: :runtime
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
108
  - - ~>
109
109
  - !ruby/object:Gem::Version
110
- version: 1.2.10
110
+ version: '2.5'
111
111
  - !ruby/object:Gem::Dependency
112
- name: rdoc
112
+ name: bundler
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
- - - ~>
115
+ - - ! '>='
116
116
  - !ruby/object:Gem::Version
117
- version: '4.0'
117
+ version: '0'
118
118
  type: :development
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
- - - ~>
122
+ - - ! '>='
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: rake
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ! '>='
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ! '>='
123
137
  - !ruby/object:Gem::Version
124
- version: '4.0'
138
+ version: '0'
125
139
  - !ruby/object:Gem::Dependency
126
140
  name: rspec
127
141
  requirement: !ruby/object:Gem::Requirement
128
142
  requirements:
129
- - - '>='
143
+ - - ! '>='
130
144
  - !ruby/object:Gem::Version
131
145
  version: '0'
132
146
  type: :development
133
147
  prerelease: false
134
148
  version_requirements: !ruby/object:Gem::Requirement
135
149
  requirements:
136
- - - '>='
150
+ - - ! '>='
137
151
  - !ruby/object:Gem::Version
138
152
  version: '0'
139
153
  - !ruby/object:Gem::Dependency
140
154
  name: webmock
141
155
  requirement: !ruby/object:Gem::Requirement
142
156
  requirements:
143
- - - '>='
157
+ - - ! '>='
144
158
  - !ruby/object:Gem::Version
145
159
  version: '0'
146
160
  type: :development
147
161
  prerelease: false
148
162
  version_requirements: !ruby/object:Gem::Requirement
149
163
  requirements:
150
- - - '>='
164
+ - - ! '>='
151
165
  - !ruby/object:Gem::Version
152
166
  version: '0'
153
167
  - !ruby/object:Gem::Dependency
154
- name: hoe
168
+ name: rdoc
155
169
  requirement: !ruby/object:Gem::Requirement
156
170
  requirements:
157
- - - '>='
171
+ - - ! '>='
158
172
  - !ruby/object:Gem::Version
159
- version: '3.4'
173
+ version: '0'
160
174
  type: :development
161
175
  prerelease: false
162
176
  version_requirements: !ruby/object:Gem::Requirement
163
177
  requirements:
164
- - - '>='
178
+ - - ! '>='
165
179
  - !ruby/object:Gem::Version
166
- version: '3.4'
180
+ version: '0'
167
181
  description: oddb2xml creates xml files using swissINDEX, BAG-XML and Swissmedic.
168
182
  email: yasaka@ywesee.com, zdavatz@ywesee.com
169
183
  executables:
170
184
  - oddb2xml
171
185
  extensions: []
172
- extra_rdoc_files:
173
- - History.txt
174
- - Manifest.txt
175
- - QA.md
176
- - README.md
186
+ extra_rdoc_files: []
177
187
  files:
178
188
  - .gitignore
179
189
  - .rspec
@@ -195,6 +205,7 @@ files:
195
205
  - lib/oddb2xml/extractor.rb
196
206
  - lib/oddb2xml/util.rb
197
207
  - lib/oddb2xml/version.rb
208
+ - oddb2xml.gemspec
198
209
  - spec/builder_spec.rb
199
210
  - spec/cli_spec.rb
200
211
  - spec/compressor_spec.rb
@@ -243,30 +254,73 @@ files:
243
254
  - tools/cacert.pem
244
255
  - tools/set.bat
245
256
  - tools/win_fetch_cacerts.rb
246
- - .gemtest
247
257
  homepage: https://github.com/zdavatz/oddb2xml
248
- licenses: []
258
+ licenses:
259
+ - GPL-v2
249
260
  metadata: {}
250
261
  post_install_message:
251
- rdoc_options:
252
- - --main
253
- - README.md
262
+ rdoc_options: []
254
263
  require_paths:
255
264
  - lib
256
265
  required_ruby_version: !ruby/object:Gem::Requirement
257
266
  requirements:
258
- - - '>='
267
+ - - ! '>='
259
268
  - !ruby/object:Gem::Version
260
269
  version: '0'
261
270
  required_rubygems_version: !ruby/object:Gem::Requirement
262
271
  requirements:
263
- - - '>='
272
+ - - ! '>='
264
273
  - !ruby/object:Gem::Version
265
274
  version: '0'
266
275
  requirements: []
267
- rubyforge_project: oddb2xml
268
- rubygems_version: 2.0.3
276
+ rubyforge_project:
277
+ rubygems_version: 2.2.1
269
278
  signing_key:
270
279
  specification_version: 4
271
280
  summary: oddb2xml creates xml files.
272
- test_files: []
281
+ test_files:
282
+ - spec/builder_spec.rb
283
+ - spec/cli_spec.rb
284
+ - spec/compressor_spec.rb
285
+ - spec/data/GL_Diff_SB.xml
286
+ - spec/data/Gestrichene_Packungen_Emballages_radies.xls
287
+ - spec/data/ItCodes.xml
288
+ - spec/data/PR121001.txt
289
+ - spec/data/PR121002.txt
290
+ - spec/data/Preparation.xml
291
+ - spec/data/Preparations.xml
292
+ - spec/data/Publications.xls
293
+ - spec/data/XMLPublications.zip
294
+ - spec/data/epha_interactions.csv
295
+ - spec/data/medregbm_betrieb.txt
296
+ - spec/data/medregbm_person.txt
297
+ - spec/data/oddb2xml_files_bm_update.txt
298
+ - spec/data/oddb2xml_files_lppv.txt
299
+ - spec/data/oddb2xml_files_nonpharma.xls
300
+ - spec/data/oddb_article.xml
301
+ - spec/data/oddb_fi.xml
302
+ - spec/data/oddb_fi_product.xml
303
+ - spec/data/oddb_limitation.xml
304
+ - spec/data/oddb_product.xml
305
+ - spec/data/oddb_substance.xml
306
+ - spec/data/swissindex.xml
307
+ - spec/data/swissindex_nonpharma.xml
308
+ - spec/data/swissindex_pharma.xml
309
+ - spec/data/swissmedic_fridges.html
310
+ - spec/data/swissmedic_fridges.xls
311
+ - spec/data/swissmedic_fridges.xlsx
312
+ - spec/data/swissmedic_info.html
313
+ - spec/data/swissmedic_info.zip
314
+ - spec/data/swissmedic_info_2.html
315
+ - spec/data/swissmedic_orphans.html
316
+ - spec/data/swissmedic_orphans.xls
317
+ - spec/data/swissmedic_packages.html
318
+ - spec/data/swissmedic_packages.xls
319
+ - spec/data/swissmedic_packages.xlsx
320
+ - spec/data/wsdl.xml
321
+ - spec/data/wsdl_nonpharma.xml
322
+ - spec/data/wsdl_pharma.xml
323
+ - spec/data/zurrose_transfer.dat
324
+ - spec/downloader_spec.rb
325
+ - spec/extractor_spec.rb
326
+ - spec/spec_helper.rb
data/.gemtest DELETED
File without changes