oddb2xml 2.0.4 → 2.0.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,15 +1,7 @@
1
1
  ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- NjA0ZDE5ZTQ1MGZhNDZiYTQ5YTY2ZTEyYTBiOTMwMWJmODQ1ODdjYw==
5
- data.tar.gz: !binary |-
6
- OWVlNWVkNzJiYmNkNDk5NWNlOTAyNGRjODBiM2Y1ZjEwZWM1MTIyNg==
2
+ SHA1:
3
+ metadata.gz: 4e7b29934682850002244797289099295579fb51
4
+ data.tar.gz: a3d02cc3c125315dc26938cb6ce77ec033f98561
7
5
  SHA512:
8
- metadata.gz: !binary |-
9
- OGNhZWJkMjNhMjBhYmE3NTAyNTcxYzczYTc4NGYzZDcwMGNhYzA2M2QwZThk
10
- N2IyZmMyNTZlMWU5NDkxOTQ4YmVkNGRjMmYwNjQ3OTZhY2I5NDM3ZTQ2OWYw
11
- NTFhMmIzZTg3YWYwZTIwNmZlM2VlOTc2YzIzMDg3YjNiZjg3OTg=
12
- data.tar.gz: !binary |-
13
- YzQ4NjJjOTU1ZTMzZjRjZmY4OTc3NzM4ZGNlZTdjNDA1NGU0YmU2MDRjMjc4
14
- NjQ2MjVkNjk1Mzk1MmY2ZjBhNTNmMGVmMjhiNjMyMGRlMWQxMTAxOWE0MGVl
15
- ZGYwMzhiMzk1Y2U0MWZlZmE3MmZmZmQ0ZDZiZDY4MTJkMWE0NjU=
6
+ metadata.gz: 035cfd64bf3ffffa1a1e0b99c41331326dbb4cf181033c73491c89d81a785f48033e269cd004a262ba646996374c2807229960a140b9b839dca9c2adca528995
7
+ data.tar.gz: 2f50567e9e4d2e84e1bbf1ca34ae185d1b7b91f323772bde33e29059e56d7d99a2d552d8e40dc1f2d15a0eb7143d60db64d8ace9caf6b42641f1340437c70391
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- oddb2xml (2.0.4)
4
+ oddb2xml (2.0.5)
5
5
  archive-tar-minitar (~> 0.5.2)
6
6
  mechanize (~> 2.5.1)
7
7
  nokogiri (~> 1.5.10)
data/History.txt CHANGED
@@ -1,3 +1,9 @@
1
+ === 2.0.5 / 31.03.2015
2
+
3
+ * --calc adds boolean flag is_active_agent
4
+ * --calc fixes recognition of some substances
5
+ * --calc fixes recognition of dose/unit/qty
6
+
1
7
  === 2.0.4 / 30.03.2015
2
8
 
3
9
  * --calc now recognizes correct labels, like 'A):' and stops when seeing first ':' in label-description
@@ -634,6 +634,7 @@ module Oddb2xml
634
634
  def build_calc
635
635
  packungen_xlsx = File.join(Oddb2xml::WorkDir, "swissmedic_package.xlsx")
636
636
  idx = 0
637
+ return unless File.exists?(packungen_xlsx)
637
638
  workbook = RubyXL::Parser.parse(packungen_xlsx)
638
639
  items = {}
639
640
  row_nr = 0
@@ -686,10 +687,16 @@ module Oddb2xml
686
687
  composition.substances.each { |substance|
687
688
  xml.SUBSTANCE {
688
689
  xml.SUBSTANCE_NAME substance.name
690
+ xml.IS_ACTIVE_AGENT substance.is_active_agent
689
691
  if substance.unit
690
692
  xml.QTY substance.qty
691
693
  xml.UNIT substance.unit
692
694
  end
695
+ if substance.chemical_substance
696
+ xml.CHEMICAL_SUBSTANCE substance.chemical_substance
697
+ xml.CHEMICAL_QTY substance.chemical_qty
698
+ xml.CHEMICAL_UNIT substance.chemical_unit
699
+ end
693
700
  }
694
701
  }
695
702
  } if composition.substances
data/lib/oddb2xml/calc.rb CHANGED
@@ -170,7 +170,7 @@ public
170
170
  unless composition
171
171
  @compositions = []
172
172
  else
173
- @compositions = ParseUtil.parse_compositions(composition)
173
+ @compositions = ParseUtil.parse_compositions(composition, active_substance)
174
174
  end
175
175
  end
176
176
 
@@ -245,7 +245,7 @@ public
245
245
  puts "liquid_form in einheit_M #{einheit_M} matched: #{x}" if $VERBOSE
246
246
  update_rule('liquid_form einheit_M')
247
247
  @measure = x
248
- return pkg_size_to_int(pkg_size_L, true)
248
+ return pkg_size_to_int(pkg_size_L, false)
249
249
  end
250
250
  }
251
251
  Measurements.each{ |x|
data/lib/oddb2xml/cli.rb CHANGED
@@ -152,7 +152,7 @@ module Oddb2xml
152
152
  end
153
153
  File.open(File.join(WorkDir, file), 'w:utf-8'){ |fh| fh << output }
154
154
  if @options[:calc]
155
- FileUtils.cp(File.join(WorkDir, file), File.join(WorkDir, file.sub('.xml', '_'+Time.now.strftime("%d.%m.%Y_%H.%M")+'.xml')), :verbose => true)
155
+ FileUtils.cp(File.join(WorkDir, file), File.join(WorkDir, file.sub('.xml', '_'+Time.now.strftime("%d.%m.%Y_%H.%M")+'.xml')), :verbose => false)
156
156
  end
157
157
  end
158
158
  rescue Interrupt
@@ -280,7 +280,7 @@ XML
280
280
  return File.expand_path(file)
281
281
  end
282
282
  begin
283
- FileUtils.rm(File.expand_path(file), :verbose => true) if File.exists?(File.expand_path(file))
283
+ FileUtils.rm(File.expand_path(file), :verbose => !defined?(RSpec)) if File.exists?(File.expand_path(file))
284
284
  page = @agent.get(@url)
285
285
  if link_node = page.search(@xpath).first
286
286
  link = Mechanize::Page::Link.new(link_node, @agent, page)
@@ -9,16 +9,34 @@
9
9
  module ParseUtil
10
10
  SCALE_P = %r{pro\s+(?<scale>(?<qty>[\d.,]+)\s*(?<unit>[kcmuµn]?[glh]))}u
11
11
  ParseComposition = Struct.new("ParseComposition", :source, :label, :label_description, :substances, :galenic_form, :route_of_administration)
12
- ParseSubstance = Struct.new("ParseSubstance", :name, :qty, :unit, :chemical_substance, :chemical_dose)
12
+ ParseSubstance = Struct.new("ParseSubstance", :name, :qty, :unit, :chemical_substance, :chemical_qty, :chemical_unit, :is_active_agent, :dose, :cdose)
13
13
  def ParseUtil.capitalize(string)
14
14
  string.split(/\s+/u).collect { |word| word.capitalize }.join(' ')
15
15
  end
16
16
 
17
- def ParseUtil.parse_compositions(composition)
17
+ def ParseUtil.dose_to_qty_unit(string, filler=nil)
18
+ return nil unless string
19
+ dose = string.split(/\b\s*(?![.,\d\-]|Mio\.?)/u, 2)
20
+ if dose && (scale = SCALE_P.match(filler)) && dose[1] && !dose[1].include?('/')
21
+ unit = dose[1] << '/'
22
+ num = scale[:qty].to_f
23
+ if num <= 1
24
+ unit << scale[:unit]
25
+ else
26
+ unit << scale[:scale]
27
+ end
28
+ dose[1] = unit
29
+ elsif dose and dose.size == 2
30
+ unit = dose[1]
31
+ end
32
+ dose
33
+ end
34
+
35
+ def ParseUtil.parse_compositions(composition, active_agents_string = '')
18
36
  rep_1 = '----'; to_1 = '('
19
37
  rep_2 = '-----'; to_2 = ')'
20
38
  rep_3 = '------'; to_3 = ','
21
-
39
+ active_agents = active_agents_string ? active_agents_string.downcase.split(/,\s+/) : []
22
40
  comps = []
23
41
  label_pattern = /^(?<label>A|I|B|II|C|III|D|IV|E|V|F|VI)(\):|\))\s*(?<description>[^:]+)/
24
42
  composition_text = composition.gsub(/\r\n?/u, "\n")
@@ -39,39 +57,46 @@ module ParseUtil
39
57
  substances = []
40
58
  filler = line.split(',')[-1].sub(/\.$/, '')
41
59
  filler_match = /^(?<name>[^,\d]+)\s*(?<dose>[\d\-.]+(\s*(?:(Mio\.?\s*)?(U\.\s*Ph\.\s*Eur\.|[^\s,]+))))/.match(filler)
42
- components = line.split(/([^\(]+\([^)]+\)[^,]+|),/).each {
60
+ components = line.gsub(/(\d),(\d+)/, "\\1.\\2").split(/([^\(]+\([^)]+\)[^,]+|),/).each {
43
61
  |component|
44
62
  next unless component.size > 0
63
+ next if /^ratio:/i.match(component.strip)
45
64
  to_consider = component.strip.split(':')[-1].gsub(to_1, rep_1).gsub(to_2, rep_2).gsub(to_3, rep_3) # remove label
46
65
  # very ugly hack to ignore ,()
47
- ptrn1 = /^(?<name>.+)\s+(?<dose>[\d\-.]+(\s*(?:(Mio\.?\s*)?(U\.\s*Ph\.\s*Eur\.|[^\s,]+))))/
48
- m = ptrn1.match(to_consider)
66
+ ptrn1 = /^(?<name>.+)(\s+|$)(?<dose>[\d\-.]+(\s*(?:(Mio\.?\s*)?(U\.\s*Ph\.\s*Eur\.|[^\s,]+))))/
67
+ m = /^(?<name>.+)(\s+|$)/.match(to_consider)
68
+ m_with_dose = ptrn1.match(to_consider)
69
+ m = m_with_dose if m_with_dose
49
70
  if m2 = /^(|[^:]+:\s)(E\s+\d+)$/.match(component.strip)
50
- to_add = ParseSubstance.new(m2[2], '', '')
71
+ to_add = ParseSubstance.new(m2[2], '', nil, nil, nil, nil, active_agents.index(m2[2].downcase) ? true : false)
51
72
  substances << to_add
52
73
  elsif m
53
- ptrn = /(\s*(?:ut|corresp\.?)\s+(?<chemical>[^\d,]+)\s*(?<cdose>[\d\-.]+(\s*(?:(Mio\.?\s*)?(U\.\s*Ph\.\s*Eur\.|[^\s,]+))(\s*[mv]\/[mv])?))?)/
54
- m3 = ptrn.match(to_consider)
55
- dose = nil
56
- unit = nil
57
- name = m[:name].split(/\s/).collect{ |x| x.capitalize }.join(' ').strip.gsub(rep_3, to_3).gsub(rep_2, to_2).gsub(rep_1, to_1)
58
- dose = m[:dose].split(/\b\s*(?![.,\d\-]|Mio\.?)/u, 2) if m[:dose]
59
- if dose && (scale = SCALE_P.match(filler)) && dose[1] && !dose[1].include?('/')
60
- unit = dose[1] << '/'
61
- num = scale[:qty].to_f
62
- if num <= 1
63
- unit << scale[:unit]
64
- else
65
- unit << scale[:scale]
66
- end
67
- elsif dose.size == 2
68
- unit = dose[1]
74
+ ptrn = /(?<name>.+)\s+(?<dose>[\d\-.]+(\s*(?:(Mio\.?\s*)?(U\.\s*Ph\.\s*Eur\.|[^\s,]+))))(\s*(?:ut|corresp\.?)\s+(?<chemical>[^\d,]+)\s*(?<cdose>[\d\-.]+(\s*(?:(Mio\.?\s*)?(U\.\s*Ph\.\s*Eur\.|[^\s,]+))(\s*[mv]\/[mv])?))?)/
75
+ m_with_chemical = ptrn.match(to_consider)
76
+ m = m_with_chemical if m_with_chemical
77
+ name = m[:name].strip
78
+ chemical = m_with_chemical ? m[:chemical] : nil
79
+ cdose = m_with_chemical ? m[:cdose] : nil
80
+ dose = m_with_dose ? m[:dose] : nil
81
+ if m_with_chemical and active_agents.index(m_with_chemical[:chemical].strip)
82
+ is_active_agent = true
83
+ name = m[:chemical].strip
84
+ dose = m[:cdose]
85
+ chemical = m[:name].strip
86
+ cdose = m[:dose]
87
+ else
88
+ is_active_agent = active_agents.index(m[:name].strip) != nil
69
89
  end
70
- next if /\s+pro($|\s+)|emulsion|solution/i.match(name)
71
- chemical = m3 ? capitalize(m3[:chemical]) : nil
72
- cdose = m3 ? m3[:cdose] : nil
73
- substances << ParseSubstance.new(name, dose ? dose[0].to_f : nil, unit ? unit.gsub(rep_3, to_3).gsub(rep_2, to_2).gsub(rep_1, to_1) : nil,
74
- chemical, cdose)
90
+ unit = nil
91
+ name = name.gsub(rep_3, to_3).gsub(rep_2, to_2).gsub(rep_1, to_1)
92
+ emulsion_pattern = /\s+pro($|\s+)|emulsion|solution/i
93
+ next if emulsion_pattern.match(name)
94
+ name = name.split(/\s/).collect{ |x| x.capitalize }.join(' ').strip
95
+ chemical = chemical.split(/\s/).collect{ |x| x.capitalize }.join(' ').strip if chemical
96
+ qty, unit = ParseUtil.dose_to_qty_unit(dose, filler)
97
+ cqty, cunit = ParseUtil.dose_to_qty_unit(cdose, filler)
98
+ dose = "#{qty} #{unit}" if unit and unit.match(/\//)
99
+ substances << ParseSubstance.new(name, qty, unit, chemical, cqty, cunit, is_active_agent, dose, cdose)
75
100
  end
76
101
  }
77
102
  comps << ParseComposition.new(line, label, label_description, substances) if substances.size > 0
@@ -1,3 +1,3 @@
1
1
  module Oddb2xml
2
- VERSION = "2.0.4"
2
+ VERSION = "2.0.5"
3
3
  end
data/spec/builder_spec.rb CHANGED
@@ -18,6 +18,16 @@ module Kernel
18
18
  end
19
19
  end
20
20
 
21
+ def setup_package_xlsx_for_calc
22
+ src = File.expand_path(File.join(File.dirname(__FILE__), 'data', 'swissmedic_package-galenic.xlsx'))
23
+ dest = File.join(Oddb2xml::WorkDir, 'swissmedic_package.xlsx')
24
+ FileUtils.makedirs(Oddb2xml::WorkDir)
25
+ FileUtils.cp(src, dest, { :verbose => false, :preserve => true})
26
+ FileUtils.cp(File.expand_path(File.join(File.dirname(__FILE__), 'data', 'XMLPublications.zip')),
27
+ File.join(Oddb2xml::WorkDir, 'downloads'),
28
+ { :verbose => false, :preserve => true})
29
+ end
30
+
21
31
  def check_validation_via_xsd
22
32
  @oddb2xml_xsd = File.expand_path(File.join(File.dirname(__FILE__), '..', 'oddb2xml.xsd'))
23
33
  File.exists?(@oddb2xml_xsd).should eq true
@@ -181,6 +191,7 @@ describe Oddb2xml::Builder do
181
191
  let(:cli) do
182
192
  options = Oddb2xml::Options.new
183
193
  options.parser.parse!('--append -I 80 -e'.split(' '))
194
+ setup_package_xlsx_for_calc
184
195
  Oddb2xml::Cli.new(options.opts)
185
196
  end
186
197
 
@@ -208,11 +219,12 @@ describe Oddb2xml::Builder do
208
219
  let(:cli) do
209
220
  options = Oddb2xml::Options.new
210
221
  options.parser.parse!('-e'.split(' '))
222
+ cleanup_directories_before_run
223
+ setup_package_xlsx_for_calc
211
224
  Oddb2xml::Cli.new(options.opts)
212
225
  end
213
226
 
214
227
  it 'should contain the correct prices' do
215
- cleanup_directories_before_run
216
228
  res = buildr_capture(:stdout){ cli.run }
217
229
  @article_xml = File.expand_path(File.join(Oddb2xml::WorkDir, 'oddb_article.xml'))
218
230
  File.exists?(@article_xml).should eq true
@@ -230,7 +242,6 @@ describe Oddb2xml::Builder do
230
242
  end
231
243
  end
232
244
 
233
-
234
245
  def checkItemForRefdata(doc, pharmacode, isRefdata)
235
246
  article = XPath.match( doc, "//ART[PHAR=#{pharmacode.to_s}]").first
236
247
  name = article.elements['DSCRD'].text
@@ -434,12 +445,14 @@ describe Oddb2xml::Builder do
434
445
  let(:cli) do
435
446
  options = Oddb2xml::Options.new
436
447
  options.parser.parse!('-e --skip-download'.split(' '))
448
+ setup_package_xlsx_for_calc
437
449
  Oddb2xml::Cli.new(options.opts)
438
450
  end
439
451
 
440
452
  let(:cli_I80) do
441
453
  options = Oddb2xml::Options.new
442
454
  options.parser.parse!('-e -I 80 --skip-download'.split(' '))
455
+ setup_package_xlsx_for_calc
443
456
  Oddb2xml::Cli.new(options.opts)
444
457
  end
445
458
  search_path_reseller = "//ART[PHAR=0023722]/ARTPRI[PTYP='RESELLERPUB']/PRICE"
@@ -567,5 +580,4 @@ describe Oddb2xml::Builder do
567
580
  IO.readlines(dat_filename).each{ |line| check_article(line, true, true) }
568
581
  end
569
582
  end
570
-
571
583
  end
data/spec/calc_spec.rb CHANGED
@@ -12,6 +12,7 @@ require "#{Dir.pwd}/lib/oddb2xml/calc"
12
12
  include Oddb2xml
13
13
 
14
14
  describe Oddb2xml::Calc do
15
+ RunAllTests = true
15
16
 
16
17
  after(:each) do
17
18
  FileUtils.rm(Dir.glob(File.join(Oddb2xml::WorkDir, '*.*')))
@@ -138,6 +139,8 @@ Corresp. 5300 kJ.",
138
139
  #:count => 5, :multi => 1
139
140
  }
140
141
  )
142
+
143
+ if RunAllTests
141
144
  context 'should return correct value for liquid' do
142
145
  pkg_size_L = '1 x 5 x 200'
143
146
  einheit_M = 'ml'
@@ -317,6 +320,13 @@ Corresp. 5300 kJ.",
317
320
  XPath.match( doc, "//ARTICLE[GTIN='7680555940018']/COMPOSITIONS/COMPOSITION/LABEL_DESCRIPTION").first.text.should eq 'Glucoselösung'
318
321
  XPath.match( doc, "//ARTICLE[GTIN='7680555940018']/COMPOSITIONS/COMPOSITION/LABEL").each{ |x| puts x.text }
319
322
  XPath.match( doc, "//ARTICLE[GTIN='7680555940018']/COMPOSITIONS/COMPOSITION/LABEL").last.text.should eq 'III'
323
+ XPath.match( doc, "//ARTICLE[GTIN='7680555940018']/COMPOSITIONS/COMPOSITION/LABEL").last.text.should eq 'III'
324
+ XPath.match( doc, "//ARTICLE[GTIN='7680434541015']/COMPOSITIONS/COMPOSITION/SUBSTANCES/SUBSTANCE/SUBSTANCE_NAME").last.text.should eq 'Matricariae Extractum Isopropanolicum Liquidum'
325
+ XPath.match( doc, "//ARTICLE[GTIN='7680434541015']/COMPOSITIONS/COMPOSITION/SUBSTANCES/SUBSTANCE/CHEMICAL_SUBSTANCE").last.text.should eq 'Levomenolum'
326
+ XPath.match( doc, "//ARTICLE[GTIN='7680434541015']/COMPOSITIONS/COMPOSITION/SUBSTANCES/SUBSTANCE/QTY").last.text.should eq '98.9'
327
+ XPath.match( doc, "//ARTICLE[GTIN='7680434541015']/COMPOSITIONS/COMPOSITION/SUBSTANCES/SUBSTANCE/UNIT").last.text.should eq 'g/100 g'
328
+ XPath.match( doc, "//ARTICLE[GTIN='7680434541015']/COMPOSITIONS/COMPOSITION/SUBSTANCES/SUBSTANCE/CHEMICAL_QTY").last.text.should eq '10-50'
329
+ XPath.match( doc, "//ARTICLE[GTIN='7680434541015']/COMPOSITIONS/COMPOSITION/SUBSTANCES/SUBSTANCE/CHEMICAL_UNIT").last.text.should eq 'mg/100 g'
320
330
  end
321
331
  end
322
332
 
@@ -358,10 +368,10 @@ Corresp. 5300 kJ.",
358
368
  context 'find correct result compositions' do
359
369
  result = Calc.new(nil, nil, nil, 'rutosidum trihydricum, aescinum', 'rutosidum trihydricum 20 mg, aescinum 25 mg, aromatica, excipiens pro compresso.')
360
370
  specify { expect(result.compositions.first.substances.first.name).to eq 'Rutosidum Trihydricum' }
361
- specify { expect(result.compositions.first.substances.first.qty).to eq 20}
371
+ specify { expect(result.compositions.first.substances.first.qty.to_f).to eq 20}
362
372
  specify { expect(result.compositions.first.substances.first.unit).to eq 'mg'}
363
373
  specify { expect(result.compositions.first.substances[1].name).to eq 'Aescinum' }
364
- specify { expect(result.compositions.first.substances[1].qty).to eq 25}
374
+ specify { expect(result.compositions.first.substances[1].qty.to_f).to eq 25}
365
375
  specify { expect(result.compositions.first.substances[1].unit).to eq 'mg'}
366
376
  end
367
377
 
@@ -377,14 +387,14 @@ Corresp. 5300 kJ.",
377
387
  specify { expect(bifidobacterium).not_to eq nil}
378
388
  if bifidobacterium
379
389
  specify { expect(bifidobacterium.name).to eq 'Bifidobacterium Infantis Min.' }
380
- skip { expect(bifidobacterium.qty).to eq '10^9'}
390
+ skip { expect(bifidobacterium.qty.to_f).to eq '10^9'}
381
391
  skip { expect(bifidobacterium.unit).to eq 'CFU'}
382
392
  end
383
393
  e_127 = info.compositions.first.substances.find{ |x| x.name.match(/E 127/i) }
384
394
  skip { expect(e_127).not_to eq nil}
385
395
  if e_127
386
396
  specify { expect(e_127.name).to eq 'E 127' }
387
- specify { expect(e_127.unit).to eq ''}
397
+ specify { expect(e_127.unit).to eq nil}
388
398
  end
389
399
  end
390
400
 
@@ -400,14 +410,14 @@ Corresp. 5300 kJ.",
400
410
  specify { expect(globulina).not_to eq nil}
401
411
  if globulina
402
412
  specify { expect(globulina.name).to eq 'Globulina Equina (immunisé Avec Coeur, Tissu Pulmonaire, Reins De Porcins)' }
403
- specify { expect(globulina.qty).to eq 8.0}
413
+ specify { expect(globulina.qty.to_f).to eq 8.0}
404
414
  specify { expect(globulina.unit).to eq 'mg'}
405
415
  end
406
416
  e_216 = info.compositions.first.substances.find{ |x| x.name.match(/E 216/i) }
407
417
  specify { expect(e_216).not_to eq nil}
408
418
  if e_216
409
419
  specify { expect(e_216.name).to eq 'E 216' }
410
- specify { expect(e_216.unit).to eq ''}
420
+ specify { expect(e_216.unit).to eq nil}
411
421
  end
412
422
  e_218 = info.compositions.first.substances.find{ |x| x.name.match(/E 218/i) }
413
423
  specify { expect(e_218).not_to eq nil}
@@ -419,9 +429,11 @@ Corresp. 5300 kJ.",
419
429
  'glucosum anhydricum, zinci acetas dihydricus, isoleucinum, leucinum',
420
430
  text
421
431
  )
432
+ # Line_1 = 'I) Glucoselösung: glucosum anhydricum 150 g ut glucosum monohydricum, natrii dihydrogenophosphas dihydricus 2.34 g, zinci acetas dihydricus 6.58 mg, aqua ad iniectabilia q.s. ad solutionem pro 500 ml.'
422
433
  specify { expect(result.compositions.first.substances.first.name).to eq 'Glucosum Anhydricum'}
423
434
  specify { expect(result.compositions.first.substances.first.chemical_substance).to eq 'Glucosum Monohydricum'}
424
- specify { expect(result.compositions.first.substances.first.chemical_dose).to eq nil}
435
+ specify { expect(result.compositions.first.substances.first.qty.to_f).to eq 150.0}
436
+ specify { expect(result.compositions.first.substances.first.unit).to eq 'g/500 ml'}
425
437
 
426
438
  specify { expect(result.compositions[0].source).to eq Line_1}
427
439
  specify { expect(result.compositions[0].label).to eq 'I'}
@@ -430,11 +442,11 @@ Corresp. 5300 kJ.",
430
442
  specify { expect(result.compositions[2].label).to eq 'III' }
431
443
  glucosum = result.compositions.first.substances.first
432
444
  specify { expect(glucosum.name).to eq 'Glucosum Anhydricum' }
433
- specify { expect(glucosum.qty).to eq 150.0}
445
+ specify { expect(glucosum.qty.to_f).to eq 150.0}
434
446
  specify { expect(glucosum.unit).to eq 'g/500 ml'}
435
447
  specify { expect(result.compositions.size).to eq 3}
436
448
  specify { expect(result.compositions[0].substances.size).to eq 3}
437
- specify { expect(result.compositions[1].substances.size).to eq 3} # should have glycerolum, natrii oleas, aqua
449
+ specify { expect(result.compositions[1].substances.size).to eq 5} # should have glycerolum, natrii oleas, aqua
438
450
  specify { expect(result.compositions[2].substances.size).to eq 4}
439
451
  specify { expect(result.compositions[1].source).to eq Line_2}
440
452
  specify { expect(result.compositions[2].source).to eq Line_3}
@@ -444,7 +456,7 @@ Corresp. 5300 kJ.",
444
456
  specify { expect(lecithinum).not_to eq nil}
445
457
  if lecithinum
446
458
  specify { expect(lecithinum.name).to eq 'Lecithinum Ex Ovo' }
447
- specify { expect(lecithinum.qty).to eq 3.0}
459
+ specify { expect(lecithinum.qty.to_f).to eq 3.0}
448
460
  specify { expect(lecithinum.unit).to eq 'g/250 ml'}
449
461
  end
450
462
 
@@ -453,7 +465,7 @@ Corresp. 5300 kJ.",
453
465
  specify { expect(leucinum).not_to eq nil}
454
466
  if leucinum
455
467
  specify { expect(leucinum.name).to eq 'Leucinum' }
456
- specify { expect(leucinum.qty).to eq 3.13}
468
+ specify { expect(leucinum.qty.to_f).to eq 3.13}
457
469
  specify { expect(leucinum.unit).to eq 'g/400 ml'}
458
470
  end
459
471
  leucinum_I = result.compositions[0].substances.find{ |x| x.name.eql?('Leucinum') }
@@ -463,19 +475,9 @@ Corresp. 5300 kJ.",
463
475
  aqua = result.compositions[2].substances.find{ |x| /aqua ad/i.match(x.name) }
464
476
  specify { expect(aqua).to eq nil}
465
477
  end
478
+ end
466
479
 
467
- context 'find correct result compositions for tst_grains_de_valse with chemical_dose' do
468
- info = Calc.new(tst_grains_de_valse.name_C, tst_grains_de_valse.package_size_L, tst_grains_de_valse.einheit_M, tst_grains_de_valse.active_substance_0, tst_grains_de_valse.composition_P)
469
- sennosidum = info.compositions.first.substances.find{ |x| x.name.match(/Sennae/i) }
470
- specify { expect(sennosidum).not_to eq nil}
471
- if sennosidum
472
- specify { expect(sennosidum.name).to eq 'Sennae Folii Extractum Methanolicum Siccum 78-104 Mg Corresp. Sennosidum B' }
473
- specify { expect(sennosidum.chemical_substance).to eq 'Sennosidum B' }
474
- specify { expect(sennosidum.chemical_dose).to eq '12.5 mg' }
475
- specify { expect(sennosidum.qty).to eq 12.5}
476
- specify { expect(sennosidum.unit).to eq 'mg'}
477
- end
478
- end
480
+ if RunAllTests
479
481
 
480
482
  context 'find correct result compositions for fluticasoni with chemical_dose' do
481
483
  info = ParseUtil.parse_compositions('fluticasoni-17 propionas 100 µg, lactosum monohydricum q.s. ad pulverem pro 25 mg.')
@@ -483,8 +485,9 @@ Corresp. 5300 kJ.",
483
485
  specify { expect(info.first.substances.size).to eq 1 }
484
486
  fluticasoni = info.first.substances.find{ |x| x.name.match(/Fluticasoni/i) }
485
487
  specify { expect(fluticasoni.name).to eq 'Fluticasoni-17 Propionas' }
486
- specify { expect(fluticasoni.qty).to eq 100.0 }
488
+ specify { expect(fluticasoni.qty.to_f).to eq 100.0 }
487
489
  specify { expect(fluticasoni.unit).to eq 'µg/25 mg' }
490
+ specify { expect(fluticasoni.dose).to eq "100 µg/25 mg" }
488
491
  lactosum = info.first.substances.find{ |x| x.name.match(/Lactosum/i) }
489
492
  specify { expect(lactosum).to eq nil }
490
493
  end
@@ -493,10 +496,10 @@ Corresp. 5300 kJ.",
493
496
  txt = 'calcium carbonicum hahnemanni C7 5 %, chamomilla recutita D5 22.5 %, magnesii hydrogenophosphas trihydricus C5 50 %, passiflora incarnata D5 22.5 %, xylitolum, excipiens ad globulos.'
494
497
  info = ParseUtil.parse_compositions(txt)
495
498
  specify { expect(info.size).to eq 1 }
496
- specify { expect(info.first.substances.size).to eq 4 }
499
+ specify { expect(info.first.substances.size).to eq 6 }
497
500
  recutita = info.first.substances.find{ |x| x.name.match(/recutita/i) }
498
501
  specify { expect(recutita.name).to eq 'Chamomilla Recutita D5' }
499
- specify { expect(recutita.qty).to eq 22.5 }
502
+ specify { expect(recutita.qty.to_f).to eq 22.5 }
500
503
  specify { expect(recutita.unit).to eq '%' }
501
504
  end
502
505
 
@@ -505,9 +508,9 @@ Corresp. 5300 kJ.",
505
508
  info = ParseUtil.parse_compositions(txt)
506
509
  specify { expect(info.size).to eq 1 }
507
510
  specify { expect(info.first.substances.size).to eq 3 }
508
- procainum = info.first.substances.find{ |x| x.name.match(/procainum/i) }
511
+ procainum = info.first.substances.find{ |x| x.name.match(/procain/i) }
509
512
  specify { expect(procainum.name).to eq 'Procainum' }
510
- specify { expect(procainum.qty).to eq 10.0 }
513
+ specify { expect(procainum.qty.to_f).to eq 10.0 }
511
514
  specify { expect(procainum.unit).to eq 'mg/g' }
512
515
  end
513
516
 
@@ -518,10 +521,10 @@ Corresp. 5300 kJ.",
518
521
  info = ParseUtil.parse_compositions(txt)
519
522
  specify { expect(info.first.label).to eq 'I' }
520
523
  specify { expect(info.size).to eq 2 }
521
- specify { expect(info.first.substances.size).to eq 6 }
524
+ specify { expect(info.first.substances.size).to eq 11 }
522
525
  toxoidum = info.first.substances.find{ |x| x.name.match(/Toxoidum Diphtheriae/i) }
523
526
  specify { expect(toxoidum.name).to eq 'Toxoidum Diphtheriae' }
524
- specify { expect(toxoidum.qty).to eq 30.0 }
527
+ specify { expect(toxoidum.qty.to_f).to eq 30.0 }
525
528
  specify { expect(toxoidum.unit).to eq 'U.I./ml' }
526
529
  end
527
530
 
@@ -533,12 +536,11 @@ Corresp. 5300 kJ.",
533
536
  'albuminum humanum colloidale, stanni(II) chloridum dihydricum',
534
537
  text
535
538
  )
536
- # pp info; binding.pry
537
539
  specify { expect(info.compositions.size).to eq 2 }
538
- specify { expect(info.compositions.first.substances.size).to eq 2 }
540
+ specify { expect(info.compositions.first.substances.size).to eq 5 }
539
541
  poloxamerum = info.compositions.first.substances.find{ |x| x.name.match(/poloxamerum/i) }
540
542
  skip { expect(poloxamerum.name).to eq 'Poloxamerum 238' }
541
- skip { expect(poloxamerum.qty).to eq "" }
543
+ skip { expect(poloxamerum.qty.to_f).to eq "" }
542
544
  specify { expect(poloxamerum.unit).to eq "" }
543
545
  end
544
546
 
@@ -548,9 +550,127 @@ Corresp. 5300 kJ.",
548
550
  'pollinis allergeni extractum',
549
551
  text
550
552
  )
551
- # pp info; binding.pry
552
553
  specify { expect(info.compositions.size).to eq 1 }
553
554
  specify { expect(info.compositions.first.label).to eq 'A' }
554
555
  end
555
556
 
557
+ context 'find correct result for 47837 Ecodurex' do
558
+ text = "amiloridi hydrochloridum dihydricum 5.67 mg corresp. amiloridi hydrochloridum anhydricum 5 mg, hydrochlorothiazidum 50 mg, excipiens pro compresso."
559
+ info = Calc.new('Ecodurex', nil, nil,
560
+ 'amiloridi hydrochloridum anhydricum, hydrochlorothiazidum',
561
+ text
562
+ )
563
+ specify { expect(info.compositions.size).to eq 1 }
564
+ specify { expect(info.compositions.first.label).to eq nil }
565
+ substance1 = info.compositions.first.substances.find{ |x| x.name.match(/hydrochlorothiazidum/i) }
566
+ specify { expect(substance1.name).to eq 'Hydrochlorothiazidum' }
567
+ substance3 = info.compositions.first.substances.find{ |x| x.name.match(/amiloridi hydrochloridum/i) }
568
+ specify { expect(substance3.class).to eq Struct::ParseSubstance }
569
+ if substance3
570
+ specify { expect(substance3.name).to eq 'Amiloridi Hydrochloridum Anhydricum' }
571
+ specify { expect(substance3.chemical_substance).to eq 'Amiloridi Hydrochloridum Dihydricum' }
572
+ specify { expect(substance3.qty.to_f).to eq 5 }
573
+ specify { expect(substance3.unit).to eq 'mg' }
574
+ specify { expect(substance3.chemical_qty.to_f).to eq 5.67 }
575
+ specify { expect(substance3.chemical_unit).to eq 'mg' }
576
+ specify { expect(substance3.is_active_agent).to eq true }
577
+ end
578
+
579
+ end
580
+
581
+ context 'find correct result for 45079 Dr. Reckeweg R 51 Thyreosan, gouttes homéopathiques' do
582
+ text = "atropa belladonna D30, iodum D30, lapis albus D12, lycopus virginicus D12, natrii chloridum D30 ana partes 0.1 ml, excipiens ad solutionem pro 1 ml, corresp. ethanolum 35 % V/V."
583
+ info = Calc.new('Dr. Reckeweg R 51 Thyreosan, gouttes homéopathiques', nil, nil,
584
+ 'atropa belladonna D30, iodum D30, lapis albus D12, lycopus virginicus D12, natrii chloridum D30',
585
+ text
586
+ )
587
+ specify { expect(info.compositions.size).to eq 1 }
588
+ specify { expect(info.compositions.first.label).to eq nil }
589
+ substance1 = info.compositions.first.substances.find{ |x| x.name.match(/atropa belladonna/i) }
590
+ specify { expect(substance1.name).to eq 'Atropa Belladonna D30' }
591
+ substance2 = info.compositions.first.substances.find{ |x| x.name.match(/lycopus virginicus/i) }
592
+ specify { expect(substance2.class).to eq Struct::ParseSubstance }
593
+ substance3 = info.compositions.first.substances.find{ |x| x.name.match(/lapis albus/i) }
594
+ specify { expect(substance3.class).to eq Struct::ParseSubstance }
595
+ if substance3
596
+ specify { expect(substance3.name).to eq 'Lapis Albus D12' }
597
+ end
598
+ end
599
+
600
+ context 'find correct result for 00417 Tollwut Impfstoff Mérieu' do
601
+ text = "Praeparatio cryodesiccata: virus rabiei inactivatum (Stamm: Wistar Rabies PM/WI 38-1503-3M) min. 2.5 U.I., albuminum humanum, neomycini sulfas, residui: phenolsulfonphthaleinum.
602
+ Solvens: aqua ad iniectabilia q.s. ad suspensionem pro 1 ml."
603
+ info = Calc.new('Tollwut Impfstoff Mérieu', nil, nil,
604
+ 'virus rabiei inactivatum (Stamm: Wistar Rabies PM/WI 38-1503-3M) ',
605
+ text
606
+ )
607
+ specify { expect(info.compositions.size).to eq 1 }
608
+ specify { expect(info.compositions.first.label).to eq nil }
609
+ substance1 = info.compositions.first.substances.find{ |x| x.name.match(/virus rabiei inactivatu/i) }
610
+ specify { expect(substance1).should_not be nil }
611
+ if substance1
612
+ specify { expect(substance1.name).to eq 'Virus Rabiei Inactivatum (Stamm: Wistar Rabies Pm/wi 38-1503-3M)' }
613
+ end
614
+ substance2 = info.compositions.first.substances.find{ |x| x.name.match(/albuminum humanu/i) }
615
+ if substance2
616
+ specify { expect(substance2.name).to eq 'Albuminum Humanum' }
617
+ end
618
+ specify { expect(substance2.class).to eq Struct::ParseSubstance }
619
+ substance3 = info.compositions.first.substances.find{ |x| x.name.match(/neomycini sulfas/i) }
620
+ specify { expect(substance3.class).to eq Struct::ParseSubstance }
621
+ if substance3
622
+ specify { expect(substance3.name).to eq 'Neomycini Sulfas' }
623
+ end
624
+ end
625
+
626
+ context 'find correct result compositions for tst_grains_de_valse with chemical_dose' do
627
+ info = Calc.new(tst_grains_de_valse.name_C, tst_grains_de_valse.package_size_L, tst_grains_de_valse.einheit_M, tst_grains_de_valse.active_substance_0, tst_grains_de_valse.composition_P)
628
+ sennosidum = info.compositions.first.substances.find{ |x| x.name.match(/Senn/i) }
629
+ specify { expect(sennosidum).not_to eq nil}
630
+ if sennosidum
631
+ specify { expect(sennosidum.name).to eq 'Sennae Folii Extractum Methanolicum Siccum' }
632
+ specify { expect(sennosidum.dose).to eq '78-104 mg' }
633
+ specify { expect(sennosidum.qty.to_f).to eq 78.0}
634
+ specify { expect(sennosidum.unit).to eq 'mg'}
635
+ specify { expect(sennosidum.chemical_substance).to eq 'Sennosidum B' }
636
+ specify { expect(sennosidum.chemical_qty.to_f).to eq 12.5 }
637
+ specify { expect(sennosidum.chemical_unit).to eq 'mg' }
638
+ end
639
+ end
640
+
641
+ end
642
+ context 'find correct result compositions for 56829 Iscador Ag 0,01 mg' do
643
+ text = 'extractum aquosum liquidum fermentatum 0.05 mg ex viscum album (mali) recens 0.01 mg, natrii chloridum, argenti carbonas (0,01 ug pro 100 mg herba recente), aqua q.s. ad solutionem pro 1 ml.'
644
+ info = Calc.new("Iscador M c. Arg. 0,01 mg, Injektionslösung, anthroposophisches Arzneimittel", '2 x 7', 'Ampulle(n)',
645
+ 'viscum album (mali) recens, argenti carbonas (0,01 ug pro 100 mg herba recente)',
646
+ text)
647
+ specify { expect(info.pkg_size).to eq '2 x 7' }
648
+ specify { expect(info.selling_units).to eq 14 }
649
+ specify { expect(info.compositions.first.substances.size).to eq 2 }
650
+ viscum = info.compositions.first.substances.find{ |x| x.name.match(/viscum/i) }
651
+ specify { expect(viscum).not_to eq nil}
652
+ if viscum
653
+ specify { expect(viscum.name).to eq 'Extractum Aquosum Liquidum Fermentatum 0.05 Mg Ex Viscum Album (mali) Recens' }
654
+ specify { expect(viscum.dose).to eq '0.01 mg/ml' }
655
+ specify { expect(viscum.qty.to_f).to eq 0.01}
656
+ specify { expect(viscum.unit).to eq 'mg/ml'}
657
+ specify { expect(viscum.chemical_substance).to eq nil }
658
+ specify { expect(viscum.chemical_qty).to eq nil }
659
+ specify { expect(viscum.chemical_unit).to eq nil }
660
+ end
661
+ # we don't handle argenti at the moment, because it skipped as it contain pro in its name
662
+ if false
663
+ argenti = info.compositions.first.substances.find{ |x| x.name.match(/Argenti/i) }
664
+ specify { expect(argenti).not_to eq nil}
665
+ if argenti
666
+ specify { expect(argenti.name).to eq 'Argenti Carbonas' }
667
+ skip { expect(argenti.dose).to eq '0.01 mg/ml' } # 100 mg/ml
668
+ skip { expect(argenti.qty.to_f).to eq 0.01}
669
+ skip { expect(argenti.unit).to eq 'mg/ml'}
670
+ specify { expect(argenti.chemical_substance).to eq nil }
671
+ specify { expect(argenti.chemical_qty).to eq nil }
672
+ specify { expect(argenti.chemical_unit).to eq nil }
673
+ end
674
+ end
675
+ end
556
676
  end
metadata CHANGED
@@ -1,195 +1,195 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: oddb2xml
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.4
4
+ version: 2.0.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: 2015-03-31 00:00:00.000000000 Z
11
+ date: 2015-04-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rubyzip
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
19
  version: 1.1.3
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
26
  version: 1.1.3
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.5.2
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.5.2
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: mechanize
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ~>
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
47
  version: 2.5.1
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ~>
52
+ - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: 2.5.1
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: nokogiri
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ~>
59
+ - - "~>"
60
60
  - !ruby/object:Gem::Version
61
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
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.4.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.4.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: 1.0.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: 1.0.0
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: rubyXL
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
- - - ~>
101
+ - - "~>"
102
102
  - !ruby/object:Gem::Version
103
103
  version: 3.3.1
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
110
  version: 3.3.1
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: sax-machine
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
- - - ~>
115
+ - - "~>"
116
116
  - !ruby/object:Gem::Version
117
117
  version: 0.1.0
118
118
  type: :runtime
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
- - - ~>
122
+ - - "~>"
123
123
  - !ruby/object:Gem::Version
124
124
  version: 0.1.0
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: bundler
127
127
  requirement: !ruby/object:Gem::Requirement
128
128
  requirements:
129
- - - ! '>='
129
+ - - ">="
130
130
  - !ruby/object:Gem::Version
131
131
  version: '0'
132
132
  type: :development
133
133
  prerelease: false
134
134
  version_requirements: !ruby/object:Gem::Requirement
135
135
  requirements:
136
- - - ! '>='
136
+ - - ">="
137
137
  - !ruby/object:Gem::Version
138
138
  version: '0'
139
139
  - !ruby/object:Gem::Dependency
140
140
  name: rake
141
141
  requirement: !ruby/object:Gem::Requirement
142
142
  requirements:
143
- - - ! '>='
143
+ - - ">="
144
144
  - !ruby/object:Gem::Version
145
145
  version: '0'
146
146
  type: :development
147
147
  prerelease: false
148
148
  version_requirements: !ruby/object:Gem::Requirement
149
149
  requirements:
150
- - - ! '>='
150
+ - - ">="
151
151
  - !ruby/object:Gem::Version
152
152
  version: '0'
153
153
  - !ruby/object:Gem::Dependency
154
154
  name: rspec
155
155
  requirement: !ruby/object:Gem::Requirement
156
156
  requirements:
157
- - - ! '>='
157
+ - - ">="
158
158
  - !ruby/object:Gem::Version
159
159
  version: '0'
160
160
  type: :development
161
161
  prerelease: false
162
162
  version_requirements: !ruby/object:Gem::Requirement
163
163
  requirements:
164
- - - ! '>='
164
+ - - ">="
165
165
  - !ruby/object:Gem::Version
166
166
  version: '0'
167
167
  - !ruby/object:Gem::Dependency
168
168
  name: webmock
169
169
  requirement: !ruby/object:Gem::Requirement
170
170
  requirements:
171
- - - ! '>='
171
+ - - ">="
172
172
  - !ruby/object:Gem::Version
173
173
  version: '0'
174
174
  type: :development
175
175
  prerelease: false
176
176
  version_requirements: !ruby/object:Gem::Requirement
177
177
  requirements:
178
- - - ! '>='
178
+ - - ">="
179
179
  - !ruby/object:Gem::Version
180
180
  version: '0'
181
181
  - !ruby/object:Gem::Dependency
182
182
  name: rdoc
183
183
  requirement: !ruby/object:Gem::Requirement
184
184
  requirements:
185
- - - ! '>='
185
+ - - ">="
186
186
  - !ruby/object:Gem::Version
187
187
  version: '0'
188
188
  type: :development
189
189
  prerelease: false
190
190
  version_requirements: !ruby/object:Gem::Requirement
191
191
  requirements:
192
- - - ! '>='
192
+ - - ">="
193
193
  - !ruby/object:Gem::Version
194
194
  version: '0'
195
195
  description: oddb2xml creates xml files using swissINDEX, BAG-XML and Swissmedic.
@@ -199,9 +199,9 @@ executables:
199
199
  extensions: []
200
200
  extra_rdoc_files: []
201
201
  files:
202
- - .gitignore
203
- - .rspec
204
- - .travis.yml
202
+ - ".gitignore"
203
+ - ".rspec"
204
+ - ".travis.yml"
205
205
  - Gemfile
206
206
  - Gemfile.lock
207
207
  - History.txt
@@ -291,17 +291,17 @@ require_paths:
291
291
  - lib
292
292
  required_ruby_version: !ruby/object:Gem::Requirement
293
293
  requirements:
294
- - - ! '>='
294
+ - - ">="
295
295
  - !ruby/object:Gem::Version
296
296
  version: '0'
297
297
  required_rubygems_version: !ruby/object:Gem::Requirement
298
298
  requirements:
299
- - - ! '>='
299
+ - - ">="
300
300
  - !ruby/object:Gem::Version
301
301
  version: '0'
302
302
  requirements: []
303
303
  rubyforge_project:
304
- rubygems_version: 2.3.0
304
+ rubygems_version: 2.4.5
305
305
  signing_key:
306
306
  specification_version: 4
307
307
  summary: oddb2xml creates xml files.