oddb2xml 1.7.3 → 1.7.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.
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