oddb2xml 2.7.1 → 2.7.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (46) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ruby.yml +1 -1
  3. data/.standard.yml +2 -0
  4. data/Gemfile +3 -3
  5. data/History.txt +8 -0
  6. data/README.md +1 -1
  7. data/Rakefile +24 -23
  8. data/bin/check_artikelstamm +11 -11
  9. data/bin/compare_v5 +23 -23
  10. data/bin/oddb2xml +14 -13
  11. data/lib/oddb2xml.rb +1 -1
  12. data/lib/oddb2xml/builder.rb +1070 -1038
  13. data/lib/oddb2xml/calc.rb +232 -233
  14. data/lib/oddb2xml/chapter_70_hack.rb +38 -32
  15. data/lib/oddb2xml/cli.rb +252 -236
  16. data/lib/oddb2xml/compare.rb +70 -59
  17. data/lib/oddb2xml/compositions_syntax.rb +448 -430
  18. data/lib/oddb2xml/compressor.rb +20 -20
  19. data/lib/oddb2xml/downloader.rb +153 -127
  20. data/lib/oddb2xml/extractor.rb +302 -289
  21. data/lib/oddb2xml/options.rb +34 -35
  22. data/lib/oddb2xml/parslet_compositions.rb +263 -269
  23. data/lib/oddb2xml/semantic_check.rb +39 -33
  24. data/lib/oddb2xml/util.rb +163 -163
  25. data/lib/oddb2xml/version.rb +1 -1
  26. data/lib/oddb2xml/xml_definitions.rb +32 -33
  27. data/oddb2xml.gemspec +31 -32
  28. data/spec/artikelstamm_spec.rb +111 -110
  29. data/spec/builder_spec.rb +489 -505
  30. data/spec/calc_spec.rb +552 -593
  31. data/spec/check_artikelstamm_spec.rb +26 -26
  32. data/spec/cli_spec.rb +173 -174
  33. data/spec/compare_spec.rb +9 -11
  34. data/spec/composition_syntax_spec.rb +390 -409
  35. data/spec/compressor_spec.rb +48 -48
  36. data/spec/data/transfer.dat +1 -0
  37. data/spec/data_helper.rb +47 -49
  38. data/spec/downloader_spec.rb +247 -260
  39. data/spec/extractor_spec.rb +171 -159
  40. data/spec/galenic_spec.rb +233 -256
  41. data/spec/options_spec.rb +116 -119
  42. data/spec/parslet_spec.rb +833 -861
  43. data/spec/spec_helper.rb +154 -153
  44. data/test_options.rb +39 -42
  45. data/tools/win_fetch_cacerts.rb +2 -3
  46. metadata +19 -3
data/spec/compare_spec.rb CHANGED
@@ -1,23 +1,21 @@
1
- # encoding: utf-8
2
- require 'spec_helper'
1
+ require "spec_helper"
3
2
  require "rexml/document"
4
3
  require "oddb2xml/compare"
5
4
 
6
5
  describe Oddb2xml::CompareV5 do
7
-
8
- context 'when comparing v5' do
6
+ context "when comparing v5" do
9
7
  before(:all) do
10
- @first = File.join(Oddb2xml::SpecData, 'v5_first.xml')
11
- @second = File.join(Oddb2xml::SpecData, 'v5_second.xml')
8
+ @first = File.join(Oddb2xml::SpecData, "v5_first.xml")
9
+ @second = File.join(Oddb2xml::SpecData, "v5_second.xml")
12
10
  expect(File.exist?(@second)).to eq true
13
11
  expect(File.exist?(@first)).to eq true
14
12
  @result = Oddb2xml::CompareV5.new(@first, @second).compare
15
13
  end
16
- it 'should return true' do
17
- expected = {"PRODUCTS"=>{"NR_COMPARED"=>1, "PRODNO"=>0, "SALECD"=>0, "DSCR"=>1, "DSCRF"=>0, "ATC"=>0, "SUBSTANCE"=>1},
18
- "LIMITATIONS"=>{"NR_COMPARED"=>3, "LIMNAMEBAG"=>0, "DSCR"=>0, "DSCRF"=>0, "LIMITATION_PTS"=>1},
19
- "ITEMS"=>{"NR_COMPARED"=>4, "PHARMATYPE"=>0, "GTIN"=>0, "SALECD"=>0, "DSCR"=>0, "DSCRF"=>0, "PEXF"=>2, "PPUB"=>2, "PKG_SIZE"=>0,
20
- "MEASURE"=>0, "DOSAGE_FORM"=>3, "PRODNO"=>0, "PHAR"=>0, "IKSCAT"=>0}}
14
+ it "should return true" do
15
+ expected = {"PRODUCTS" => {"NR_COMPARED" => 1, "PRODNO" => 0, "SALECD" => 0, "DSCR" => 1, "DSCRF" => 0, "ATC" => 0, "SUBSTANCE" => 1},
16
+ "LIMITATIONS" => {"NR_COMPARED" => 3, "LIMNAMEBAG" => 0, "DSCR" => 0, "DSCRF" => 0, "LIMITATION_PTS" => 1},
17
+ "ITEMS" => {"NR_COMPARED" => 4, "PHARMATYPE" => 0, "GTIN" => 0, "SALECD" => 0, "DSCR" => 0, "DSCRF" => 0, "PEXF" => 2, "PPUB" => 2, "PKG_SIZE" => 0,
18
+ "MEASURE" => 0, "DOSAGE_FORM" => 3, "PRODNO" => 0, "PHAR" => 0, "IKSCAT" => 0}}
21
19
  expect(@result).to eq(expected)
22
20
  end
23
21
  end
@@ -1,477 +1,458 @@
1
- # encoding: utf-8
2
-
3
- require 'spec_helper'
1
+ require "spec_helper"
4
2
  require "#{Dir.pwd}/lib/oddb2xml/parslet_compositions"
5
- require 'parslet/rig/rspec'
6
- require 'parslet/convenience'
7
-
8
- RunAllParsingExamples = false # Takes over 3 minutes to run, all the other ones just a few seconds
9
- GoIntoPry = true
10
- NoGoIntoPry = false
11
-
12
- if NoGoIntoPry
13
-
14
- describe CompositionParser do
15
- let(:parser) { CompositionParser.new }
16
- context "identifier parsing" do
17
- let(:dose_parser) { parser.dose }
18
- let(:identifier_parser) { parser.identifier }
19
- let(:identifier_with_comma_parser) { parser.identifier_with_comma }
20
- let(:identifier_without_comma_parser) { parser.identifier_without_comma }
21
- let(:substance_parser) { parser.substance }
22
- let(:salts_parser) { parser.salts }
23
- let(:substance_name_parser) { parser.substance_name }
24
- let(:number_parser) { parser.number }
25
- let(:excipiens_parser) { parser.excipiens }
26
- let(:composition_parser) { parser }
27
-
28
- it "parses identifier" do
29
- text = 'Solvens: conserv.: alcohol benzylicus 18 mg, aqua ad iniectabilia q.s. ad solutionem pro 2 ml.'
30
- res1 = composition_parser.parse_with_debug(text)
31
- pp res1; binding.pry
3
+ require "parslet/rig/rspec"
4
+ require "parslet/convenience"
5
+
6
+ RUN_ALL_PARSING_EXAMPLES = false # Takes over 3 minutes to run, all the other ones just a few seconds
7
+ NO_GO_INTO_PRY = false
8
+ if NO_GO_INTO_PRY
9
+
10
+ describe CompositionParser do
11
+ let(:parser) { CompositionParser.new }
12
+ context "identifier parsing" do
13
+ let(:dose_parser) { parser.dose }
14
+ let(:identifier_parser) { parser.identifier }
15
+ let(:identifier_with_comma_parser) { parser.identifier_with_comma }
16
+ let(:identifier_without_comma_parser) { parser.identifier_without_comma }
17
+ let(:substance_parser) { parser.substance }
18
+ let(:salts_parser) { parser.salts }
19
+ let(:substance_name_parser) { parser.substance_name }
20
+ let(:number_parser) { parser.number }
21
+ let(:excipiens_parser) { parser.excipiens }
22
+ let(:composition_parser) { parser }
23
+
24
+ it "parses identifier" do
25
+ text = "Solvens: conserv.: alcohol benzylicus 18 mg, aqua ad iniectabilia q.s. ad solutionem pro 2 ml."
26
+ res1 = composition_parser.parse_with_debug(text)
27
+ puts res1
28
+ # pp res1; binding.pry
29
+ end
32
30
  end
33
31
  end
34
- end
35
- else
36
-
37
- excipiens_tests = {
38
- 'aqua ad iniectabilia ad solutionem pro 4 ml' => nil,
39
- 'aether q.s. ad solutionem pro 1 g' => 'aether q.s. ad solutionem',
40
- 'saccharum ad globulos pro 1 g' => 'saccarum',
41
- 'q.s. ad solutionem pro 5 ml' => 'q.s. ad solutionem pro 5 ml',
42
- 'excipiens ad solutionem pro 1 g, corresp. ethanolum 31 % V/V.' => 'zzz',
43
- 'excipiens ad emulsionem pro 1 1' => 'aether q.s. ad solutionem',
44
- 'aqua ad iniectabilia q.s. ad solutionem pro 1 ml' => "aqua ad iniectabilia q.s. ad solutionem",
45
- 'aqua q.s. ad suspensionem pro 0.5 ml' => "aqua q.s. ad suspensionem",
46
- 'excipiens ad pulverem corresp. suspensio reconstituta 1 ml' => 'Excipiens',
47
- 'excipiens ad pulverem pro 1000 mg' => 'Excipiens',
48
- 'excipiens ad emulsionem pro 1 ml' => 'Excipiens',
49
- 'excipiens ad pulverem pro charta' => 'Excipiens',
50
- 'excipiens ad pulverem' => 'Excipiens ad pulverem',
51
- 'excipiens ad solutionem pro 1 ml corresp. ethanolum 59.5 % V/V' => 'Excipiens',
52
- 'excipiens ad solutionem pro 2 ml' => 'Excipiens',
53
- 'excipiens ad solutionem pro 3 ml corresp. 50 µg' => 'Excipiens',
54
- 'excipiens ad solutionem pro 4 ml corresp. 50 µg pro dosi' => 'Excipiens',
55
- 'excipiens pro compresso' => 'Excipiens pro compresso',
56
- }
57
-
58
- substance_tests = {
59
- "U = Histamin Equivalent Prick" => 'U = Histamin Equivalent Prick', # 58566
60
- "Vipera aspis > 1000 LD50 mus et Vipera berus > 500 LD50, natrii chloridum" => "Vipera Aspis > 1000 Ld50 Mus",
61
- "Vipera aspis > 1000 LD50 mus et Vipera berus > 500 LD50, natrii chloridum, polysorbatum 80" => "Vipera Aspis > 1000 Ld50 Mus",
62
- "Vipera aspis > 1000 LD50 mus et Vipera berus > 500 LD50, natrii chloridum, polysorbatum 80, aqua ad iniectabilia ad solutionem pro 4 ml" => "Vipera Aspis > 1000 Ld50 Mus",
63
- "Vipera aspis > 1000 LD50 mus et Vipera berus > 500 LD50, natrii chloridum, polysorbatum 80, aqua ad iniectabilia q.s. ad solutionem pro 4 ml" => "Vipera Aspis > 1000 Ld50 Mus",
64
- "antitoxinum equis Fab'" => "Antitoxinum Equis Fab'",
65
- "antitoxinum equis Fab'x" => "Antitoxinum Equis Fab'x",
66
- "calcii gluconas 100 mg corresp. calcium 100 mg" => 'Calcii Gluconas',
67
- "calcii gluconas 100 mg et calcii lactas pentahydricus 25 mg et calcii hydrogenophosphas anhydricus 300 mg corresp. calcium 100 mg" => 'Calcii Gluconas',
68
- "calcii gluconas 100 mg et calcii lactas pentahydricus 25 mg et calcii hydrogenophosphas anhydricus 300 mg" => 'Calcii Gluconas',
69
- "calcii gluconas corresp. calcium 100 mg" => 'Calcii Gluconas Corresp. Calcium',
70
- "calcii lactas pentahydricus 25 mg corresp. calcium 100 mg" => 'Calcii Lactas Pentahydricus',
71
- "calcii lactas pentahydricus 25 mg et calcii hydrogenophosphas anhydricus 300 mg corresp. calcium 100 mg" => 'Calcii Lactas Pentahydricus',
72
- "calcii lactas pentahydricus 25 mg et calcii hydrogenophosphas anhydricus 300 mg" => 'Calcii Lactas Pentahydricus',
73
- "calcii lactas pentahydricus 25 mg" => 'Calcii Lactas Pentahydricus',
74
- "conserv.: E 217, E 219" => "E 217",
75
- "conserv.: E 217, E 219, natrii dehydroacetas" => "E 217",
76
- "conserv.: E 217, E 219, natrii dehydroacetas, excipiens ad solutionem pro 1 ml corresp. 50 µg pro dosi" => "line #{__LINE__}",
77
- "ethanolum 59.5 % V/V" => 'Ethanolum',
78
- "globulina equina (immunisé')" => "Globulina Equina (immunisé')",
79
- "globulina equina (immunisé)" => 'Globulina Equina (immunisé)',
80
- "globulina equina'" => "Globulina Equina'",
81
- "osseinum-hydroxyapatit 200 mg corresp. collagena 52 mg et calcium 43 mg" => "Osseinum-hydroxyapatit",
82
- "viperis antitoxinum equis F(ab')" => "Viperis Antitoxinum Equis F(ab')",
83
- "viperis antitoxinum equis F(ab')2" => "Viperis Antitoxinum Equis F(ab')2",
84
- "viperis antitoxinum equis F(ab)" => "Viperis Antitoxinum Equis F(ab)",
85
- "xylometazolini hydrochloridum 0.5 mg, natrii hyaluronas, conserv.: E 217, E 219, natrii dehydroacetas, excipiens ad solutionem pro 1 ml corresp. 50 µg pro dosi" => "line #{__LINE__}",
86
- '1-Chloro-2,2,5,5-tetramethyl-4-oxoimidazolidine 75 mg' => '1-chloro-2,2,5,5-tetramethyl-4-oxoimidazolidine',
87
- '9,11-linolicum acidum' => "9,11-linolicum Acidum",
88
- '9,11-linolicum' => "9,11-linolicum",
89
- 'A/California/7/2009 virus NYMC X-179A' => 'A/california/7/2009 Virus Nymc X-179a',
90
- 'DER: 1:4' => 'Der: 1:4',
91
- 'DER: 3.5:1' => 'Der: 3.5:1',
92
- 'DER: 6-8:1' => 'Der: 6-8:1',
93
- 'DTPa-IPV-Komponente (Suspension)' => 'Dtpa-ipv-komponente (suspension)',
94
- 'DTPa-IPV-Komponente' => 'Dtpa-ipv-komponente',
95
- 'E 160(a)' => 'E 160(a)',
96
- 'E 270' => 'E 270',
97
- 'X-179A' => 'X-179a',
98
- 'X179A' => 'X179a',
99
- 'absinthii herba 1.2 g pro charta' => "Absinthii Herba",
100
- 'acidum 9,11-linolicum 3.25 mg' => "Acidum 9,11-linolicum",
101
- 'acidum 9,11-linolicum' => "Acidum 9,11-linolicum",
102
- 'antiox.: E 321' => 'E 321',
103
- 'benzoe 40 guttae' => 'Benzoe',
104
- 'benzoe 40 ml' => 'Benzoe',
105
- 'color.: E 160(a)' => 'E 160', # TODO: or E 160(a) ??
106
- 'ethanolum 70-78 % V/V' => "Ethanolum",
107
- 'ginseng extractum corresp. ginsenosidea 3.4 mg' => 'Ginseng Extractum Corresp. Ginsenosidea',
108
- 'moelle épinière' => 'Moelle épinière',
109
- 'pimpinellae radix 15 % ad pulverem' => 'Pimpinellae Radix',
110
- 'retinoli 7900 U.I.' => 'Retinoli',
111
- 'retinoli palmitas 7900 U.I.' => 'Retinoli Palmitas',
112
- 'sennae folium 75 % corresp. hydroxyanthracenae 2.7 %' => 'Sennae Folium',
113
- 'silybum marianum D3 0.3 ml ad solutionem pro 2 ml' => "Silybum Marianum D3",
114
- 'silybum marianum D3 0.3 ml ad solutionem pro 3 ml corresp. ethanolum 30 % V/V' => "line #{__LINE__}",
115
- 'streptococcus pneumoniae 12 %' => 'Streptococcus Pneumoniae',
116
- 'virus NYMC X-179A' => 'Virus Nymc X-179a',
117
- 'virus poliomyelitis typus 1 inactivatum (D-Antigen) 2 mg' => "Virus Poliomyelitis Typus 1 Inactivatum (d-antigen)",
118
- 'virus poliomyelitis typus 1 inactivatum (D-Antigen)' => 'Virus Poliomyelitis Typus 1 Inactivatum (d-antigen)',
119
- 'virus poliomyelitis typus 1 inactivatum D-Antigen' => 'Virus Poliomyelitis Typus 1 Inactivatum D-antigen',
120
- 'virus poliomyelitis typus inactivatum (D-Antigen) 2 mg' => 'Virus Poliomyelitis Typus Inactivatum (d-antigen)',
121
- 'virus poliomyelitis typus inactivatum (D-Antigen)' => 'Virus Poliomyelitis Typus Inactivatum (d-antigen)',
122
- 'virus poliomyelitis typus inactivatum D-Antigen' => 'Virus Poliomyelitis Typus Inactivatum D-antigen',
123
- 'virus poliomyelitis' => 'Virus Poliomyelitis',
124
- 'virus' => 'Virus',
125
- 'xenonum(133-Xe) 74 -740 MBq' => 'Xenonum(133-xe)',
126
- 'yttrii(90-Y) chloridum zum Kalibrierungszeitpunkt 1850 MBq' => 'Yttrii(90-y) Chloridum Zum Kalibrierungszeitpunkt',
127
- 'yttrii(90-Y) chloridum zum Kalibrierungszeitpunkt' => 'Yttrii(90-y) Chloridum Zum Kalibrierungszeitpunkt',
128
- }
129
-
130
-
131
- composition_tests = [
132
- "E 160(a)",
133
- "E 160(a), adeps lanae",
134
- "achillea millefolium D3 2,2 mg",
135
- "achillea millefolium D3 2,2 mg, aconitum napellus D2 1,32 mg, arnica montana D2 2,2 mg",
136
- "achillea millefolium D3 2,2 mg, aconitum napellus D2 1,32 mg, arnica montana D2 2,2 mg, atropa belladonna D2 2,2 mg, bellis perennis D2 1,1 mg, calendula officinalis D2 2,2 mg, chamomilla recutita D3 2,2 mg, echinacea D2 0,55 mg, echinacea purpurea D2 0,55 mg, hamamelis virginiana D1 0,22 mg, hepar sulfuris D6 2,2 mg hypericum perforatum D2 0,66 mg, mercurius solubilis hahnemanni D8 1,1 mg, symphytum officinale D6 2,2 mg, aqua ad iniectabilia, natrii chloridum q.s. ad solutionem pro 2,2 ml.\n",
137
- "acida oligoinsaturata 8.15 mg",
138
- "acida oligoinsaturata 8.15 mg, alcoholes adipis lanae, adeps lanae, color.: E 160(a), excipiens ad emulsionem pro 1 g.\n",
139
- "acidum 9,11-linolicum 3.25 mg",
140
- "acidum 9,11-linolicum 3.25 mg, acidum 9,12-linolicum 1.3 mg, aromatica, conserv.: E 215, E 218, excipiens ad emulsionem pro 1 g.\n",
141
- "adeps lanae, E 160",
142
- "adeps lanae, E 160(a)",
143
- "adeps lanae, color.: E 160(a)",
144
- "adeps lanae, color.: E 160(a), excipiens ad emulsionem pro 1 g.\n",
145
- "adeps lanae, color.: E 160(a), excipiens ad emulsionem pro 1 g.\n",
146
- "alcoholes adipis lanae, adeps lanae, color.: E 160(a), excipiens ad emulsionem pro 1 g.\n",
147
- "atropa belladonna D2 2,2 mg, bellis perennis D2 1,1 mg, calendula officinalis D2 2,2 mg, chamomilla recutita D3 2,2 mg, echinacea D2 0,55 mg, echinacea purpurea D2 0,55 mg, hamamelis virginiana D1 0,22 mg, hepar sulfuris D6 2,2 mg hypericum perforatum D2 0,66 mg, mercurius solubilis hahnemanni D8 1,1 mg, symphytum officinale D6 2,2 mg, aqua ad iniectabilia, natrii chloridum q.s. ad solutionem pro 2,2 ml.\n",
148
- "berberidis corticis extractum ethanolicum liquidum 35 mg, DER: 6:1, combreti extractum aquosum liquidum 18 mg, DER: 1:4, cynarae extractum ethanolicum liquidum 36 mg, DER: 1:1, orthosiphonis folii extractum ethanolicum liquidum 18 mg, DER: 3.5:1, excipiens ad solutionem pro 1 ml, corresp. ethanolum 74 % V/V\n",
149
- "cholecalciferolum 250 U.I., acidum ascorbicum 20 mg, calcii gluconas 100 mg et calcii lactas pentahydricus 25 mg et calcii hydrogenophosphas anhydricus 300 mg corresp. calcium 100 mg, arom.: saccharinum natricum, natrii cyclamas, vanillinum et alia, excipiens pro compresso obducto.",
150
- "color.: E 160(a)",
151
- "color.: E 160(a)\n",
152
- "conserv.: E 217, E 219, natrii dehydroacetas",
153
- "conserv.: E 217, E 219, natrii dehydroacetas, excipiens ad solutionem pro 1 ml corresp. 50 µg pro dosi.",
154
- "extractum ethanolicum et glycerolicum liquidum ex absinthii herba 0.7 mg, cinnamomi cortex 3.8 mg, guaiaci lignum 14.3 mg, millefolii herba 7 mg, rhoeados flos 11 mg, tormentillae rhizoma 9.5 mg, balsamum tolutanum 0.3 mg, benzoe tonkinensis 4.8 mg, myrrha 2.4 mg, olibanum 0.9 mg, excipiens ad solutionem pro 1 ml, corresp. 40 guttae, corresp. ethanolum 37 % V/V",
155
- "hamamelis virginiana D1 0,22 mg, hepar sulfuris D6 2,2 mg hypericum perforatum D2 0,66 mg, mercurius solubilis hahnemanni D8 1,1 mg, symphytum officinale D6 2,2 mg, aqua ad iniectabilia, natrii chloridum q.s. ad solutionem pro 2,2 ml.\n",
156
- "hepar sulfuris D6 2,2 mg hypericum perforatum D2 0,66 mg",
157
- "hepar sulfuris D6 2,2 mg hypericum perforatum D2 0,66 mg, mercurius solubilis hahnemanni D8 1,1 mg, symphytum officinale D6 2,2 mg, aqua ad iniectabilia, natrii chloridum q.s. ad solutionem pro 2,2 ml.\n",
158
- "hyaluronas, conserv.: E 217, E 219",
159
- "hypericum perforatum D2 0,66 mg, mercurius solubilis hahnemanni D8 1,1 mg, symphytum officinale D6 2,2 mg, aqua ad iniectabilia, natrii chloridum q.s. ad solutionem pro 2,2 ml.\n",
160
- "mercurius solubilis hahnemanni D8 1,1 mg, symphytum officinale D6 2,2 mg, aqua ad iniectabilia, natrii chloridum q.s. ad solutionem pro 2,2 ml.\n",
161
- "mercurius solubilis hahnemanni D8 1,1 mg, symphytum officinale D6 2,2 mg, aqua ad iniectabilia, natrii chloridum q.s. ad solutionem pro 2,2 ml.\n",
162
- "natrii dehydroacetas, excipiens ad solutionem pro 1 ml corresp. 50 µg pro dosi.",
163
- "osseinum-hydroxyapatit 200 mg corresp. collagena 52 mg et calcium 43 mg",
164
- "rhei extractum ethanolicum siccum 50 mg corresp. glycosida anthrachinoni 5 mg, acidum salicylicum 10 mg, excipiens ad solutionem pro 1 ml corresp. ethanolum 59.5 % V/V",
165
- "sennae folium 75 % corresp. hydroxyanthracenae 2.7 %",
166
- "viperis antitoxinum equis F(ab')2 corresp. Vipera aspis > 1000 LD50 mus et Vipera berus > 500 LD50 mus et Vipera ammodytes > 1000 LD50 mus, natrii chloridum, polysorbatum 80, aqua ad iniectabilia q.s. ad solutionem pro 4 ml.",
167
- "xylometazolini hydrochloridum 0.5 mg, natrii hyaluronas, conserv.: E 217, E 219, natrii dehydroacetas, excipiens ad solutionem pro 1 ml corresp. 50 µg pro dosi.",
168
- 'gasum inhalationis, pro vitro',
169
- 'toxoidum pertussis 25 µg et haemagglutininum filamentosum 25 µg',
170
- 'xenonum 74 -740 MBq',
171
- ]
172
-
173
- nr_parsing_tests = excipiens_tests.size + substance_tests.size + composition_tests.size
174
- if RunAllParsingExamples
175
- puts "Testing includes #{nr_parsing_tests} lines to be parsed"
176
32
  else
177
- puts "Skip testing includes #{nr_parsing_tests} lines to be parsed"
178
- end
179
33
 
180
- # Here follow some low level test of the most important parts of the parser
181
- describe CompositionParser do
182
- let(:parser) { CompositionParser.new }
183
-
184
- context "should return correct dose for 2*10^9 CFU.'" do
185
- let(:dose_parse) { parser.dose }
34
+ excipiens_tests = {
35
+ "aqua ad iniectabilia ad solutionem pro 4 ml" => nil,
36
+ "aether q.s. ad solutionem pro 1 g" => "aether q.s. ad solutionem",
37
+ "saccharum ad globulos pro 1 g" => "saccarum",
38
+ "q.s. ad solutionem pro 5 ml" => "q.s. ad solutionem pro 5 ml",
39
+ "excipiens ad solutionem pro 1 g, corresp. ethanolum 31 % V/V." => "zzz",
40
+ "excipiens ad emulsionem pro 1 1" => "aether q.s. ad solutionem",
41
+ "aqua ad iniectabilia q.s. ad solutionem pro 1 ml" => "aqua ad iniectabilia q.s. ad solutionem",
42
+ "aqua q.s. ad suspensionem pro 0.5 ml" => "aqua q.s. ad suspensionem",
43
+ "excipiens ad pulverem corresp. suspensio reconstituta 1 ml" => "Excipiens",
44
+ "excipiens ad pulverem pro 1000 mg" => "Excipiens",
45
+ "excipiens ad emulsionem pro 1 ml" => "Excipiens",
46
+ "excipiens ad pulverem pro charta" => "Excipiens",
47
+ "excipiens ad pulverem" => "Excipiens ad pulverem",
48
+ "excipiens ad solutionem pro 1 ml corresp. ethanolum 59.5 % V/V" => "Excipiens",
49
+ "excipiens ad solutionem pro 2 ml" => "Excipiens",
50
+ "excipiens ad solutionem pro 3 ml corresp. 50 µg" => "Excipiens",
51
+ "excipiens ad solutionem pro 4 ml corresp. 50 µg pro dosi" => "Excipiens",
52
+ "excipiens pro compresso" => "Excipiens pro compresso"
53
+ }
54
+
55
+ substance_tests = {
56
+ "U = Histamin Equivalent Prick" => "U = Histamin Equivalent Prick", # 58566
57
+ "Vipera aspis > 1000 LD50 mus et Vipera berus > 500 LD50, natrii chloridum" => "Vipera Aspis > 1000 Ld50 Mus",
58
+ "Vipera aspis > 1000 LD50 mus et Vipera berus > 500 LD50, natrii chloridum, polysorbatum 80" => "Vipera Aspis > 1000 Ld50 Mus",
59
+ "Vipera aspis > 1000 LD50 mus et Vipera berus > 500 LD50, natrii chloridum, polysorbatum 80, aqua ad iniectabilia ad solutionem pro 4 ml" => "Vipera Aspis > 1000 Ld50 Mus",
60
+ "Vipera aspis > 1000 LD50 mus et Vipera berus > 500 LD50, natrii chloridum, polysorbatum 80, aqua ad iniectabilia q.s. ad solutionem pro 4 ml" => "Vipera Aspis > 1000 Ld50 Mus",
61
+ "antitoxinum equis Fab'" => "Antitoxinum Equis Fab'",
62
+ "antitoxinum equis Fab'x" => "Antitoxinum Equis Fab'x",
63
+ "calcii gluconas 100 mg corresp. calcium 100 mg" => "Calcii Gluconas",
64
+ "calcii gluconas 100 mg et calcii lactas pentahydricus 25 mg et calcii hydrogenophosphas anhydricus 300 mg corresp. calcium 100 mg" => "Calcii Gluconas",
65
+ "calcii gluconas 100 mg et calcii lactas pentahydricus 25 mg et calcii hydrogenophosphas anhydricus 300 mg" => "Calcii Gluconas",
66
+ "calcii gluconas corresp. calcium 100 mg" => "Calcii Gluconas Corresp. Calcium",
67
+ "calcii lactas pentahydricus 25 mg corresp. calcium 100 mg" => "Calcii Lactas Pentahydricus",
68
+ "calcii lactas pentahydricus 25 mg et calcii hydrogenophosphas anhydricus 300 mg corresp. calcium 100 mg" => "Calcii Lactas Pentahydricus",
69
+ "calcii lactas pentahydricus 25 mg et calcii hydrogenophosphas anhydricus 300 mg" => "Calcii Lactas Pentahydricus",
70
+ "calcii lactas pentahydricus 25 mg" => "Calcii Lactas Pentahydricus",
71
+ "conserv.: E 217, E 219" => "E 217",
72
+ "conserv.: E 217, E 219, natrii dehydroacetas" => "E 217",
73
+ "conserv.: E 217, E 219, natrii dehydroacetas, excipiens ad solutionem pro 1 ml corresp. 50 µg pro dosi" => "line #{__LINE__}",
74
+ "ethanolum 59.5 % V/V" => "Ethanolum",
75
+ "globulina equina (immunisé')" => "Globulina Equina (immunisé')",
76
+ "globulina equina (immunisé)" => "Globulina Equina (immunisé)",
77
+ "globulina equina'" => "Globulina Equina'",
78
+ "osseinum-hydroxyapatit 200 mg corresp. collagena 52 mg et calcium 43 mg" => "Osseinum-hydroxyapatit",
79
+ "viperis antitoxinum equis F(ab')" => "Viperis Antitoxinum Equis F(ab')",
80
+ "viperis antitoxinum equis F(ab')2" => "Viperis Antitoxinum Equis F(ab')2",
81
+ "viperis antitoxinum equis F(ab)" => "Viperis Antitoxinum Equis F(ab)",
82
+ "xylometazolini hydrochloridum 0.5 mg, natrii hyaluronas, conserv.: E 217, E 219, natrii dehydroacetas, excipiens ad solutionem pro 1 ml corresp. 50 µg pro dosi" => "line #{__LINE__}",
83
+ "1-Chloro-2,2,5,5-tetramethyl-4-oxoimidazolidine 75 mg" => "1-chloro-2,2,5,5-tetramethyl-4-oxoimidazolidine",
84
+ "9,11-linolicum acidum" => "9,11-linolicum Acidum",
85
+ "9,11-linolicum" => "9,11-linolicum",
86
+ "A/California/7/2009 virus NYMC X-179A" => "A/california/7/2009 Virus Nymc X-179a",
87
+ "DER: 1:4" => "Der: 1:4",
88
+ "DER: 3.5:1" => "Der: 3.5:1",
89
+ "DER: 6-8:1" => "Der: 6-8:1",
90
+ "DTPa-IPV-Komponente (Suspension)" => "Dtpa-ipv-komponente (suspension)",
91
+ "DTPa-IPV-Komponente" => "Dtpa-ipv-komponente",
92
+ "E 160(a)" => "E 160(a)",
93
+ "E 270" => "E 270",
94
+ "X-179A" => "X-179a",
95
+ "X179A" => "X179a",
96
+ "absinthii herba 1.2 g pro charta" => "Absinthii Herba",
97
+ "acidum 9,11-linolicum 3.25 mg" => "Acidum 9,11-linolicum",
98
+ "acidum 9,11-linolicum" => "Acidum 9,11-linolicum",
99
+ "antiox.: E 321" => "E 321",
100
+ "benzoe 40 guttae" => "Benzoe",
101
+ "benzoe 40 ml" => "Benzoe",
102
+ "color.: E 160(a)" => "E 160", # TODO: or E 160(a) ??
103
+ "ethanolum 70-78 % V/V" => "Ethanolum",
104
+ "ginseng extractum corresp. ginsenosidea 3.4 mg" => "Ginseng Extractum Corresp. Ginsenosidea",
105
+ "moelle épinière" => "Moelle épinière",
106
+ "pimpinellae radix 15 % ad pulverem" => "Pimpinellae Radix",
107
+ "retinoli 7900 U.I." => "Retinoli",
108
+ "retinoli palmitas 7900 U.I." => "Retinoli Palmitas",
109
+ "sennae folium 75 % corresp. hydroxyanthracenae 2.7 %" => "Sennae Folium",
110
+ "silybum marianum D3 0.3 ml ad solutionem pro 2 ml" => "Silybum Marianum D3",
111
+ "silybum marianum D3 0.3 ml ad solutionem pro 3 ml corresp. ethanolum 30 % V/V" => "line #{__LINE__}",
112
+ "streptococcus pneumoniae 12 %" => "Streptococcus Pneumoniae",
113
+ "virus NYMC X-179A" => "Virus Nymc X-179a",
114
+ "virus poliomyelitis typus 1 inactivatum (D-Antigen) 2 mg" => "Virus Poliomyelitis Typus 1 Inactivatum (d-antigen)",
115
+ "virus poliomyelitis typus 1 inactivatum (D-Antigen)" => "Virus Poliomyelitis Typus 1 Inactivatum (d-antigen)",
116
+ "virus poliomyelitis typus 1 inactivatum D-Antigen" => "Virus Poliomyelitis Typus 1 Inactivatum D-antigen",
117
+ "virus poliomyelitis typus inactivatum (D-Antigen) 2 mg" => "Virus Poliomyelitis Typus Inactivatum (d-antigen)",
118
+ "virus poliomyelitis typus inactivatum (D-Antigen)" => "Virus Poliomyelitis Typus Inactivatum (d-antigen)",
119
+ "virus poliomyelitis typus inactivatum D-Antigen" => "Virus Poliomyelitis Typus Inactivatum D-antigen",
120
+ "virus poliomyelitis" => "Virus Poliomyelitis",
121
+ "virus" => "Virus",
122
+ "xenonum(133-Xe) 74 -740 MBq" => "Xenonum(133-xe)",
123
+ "yttrii(90-Y) chloridum zum Kalibrierungszeitpunkt 1850 MBq" => "Yttrii(90-y) Chloridum Zum Kalibrierungszeitpunkt",
124
+ "yttrii(90-Y) chloridum zum Kalibrierungszeitpunkt" => "Yttrii(90-y) Chloridum Zum Kalibrierungszeitpunkt"
125
+ }
126
+
127
+ composition_tests = [
128
+ "E 160(a)",
129
+ "E 160(a), adeps lanae",
130
+ "achillea millefolium D3 2,2 mg",
131
+ "achillea millefolium D3 2,2 mg, aconitum napellus D2 1,32 mg, arnica montana D2 2,2 mg",
132
+ "achillea millefolium D3 2,2 mg, aconitum napellus D2 1,32 mg, arnica montana D2 2,2 mg, atropa belladonna D2 2,2 mg, bellis perennis D2 1,1 mg, calendula officinalis D2 2,2 mg, chamomilla recutita D3 2,2 mg, echinacea D2 0,55 mg, echinacea purpurea D2 0,55 mg, hamamelis virginiana D1 0,22 mg, hepar sulfuris D6 2,2 mg hypericum perforatum D2 0,66 mg, mercurius solubilis hahnemanni D8 1,1 mg, symphytum officinale D6 2,2 mg, aqua ad iniectabilia, natrii chloridum q.s. ad solutionem pro 2,2 ml.\n",
133
+ "acida oligoinsaturata 8.15 mg",
134
+ "acida oligoinsaturata 8.15 mg, alcoholes adipis lanae, adeps lanae, color.: E 160(a), excipiens ad emulsionem pro 1 g.\n",
135
+ "acidum 9,11-linolicum 3.25 mg",
136
+ "acidum 9,11-linolicum 3.25 mg, acidum 9,12-linolicum 1.3 mg, aromatica, conserv.: E 215, E 218, excipiens ad emulsionem pro 1 g.\n",
137
+ "adeps lanae, E 160",
138
+ "adeps lanae, E 160(a)",
139
+ "adeps lanae, color.: E 160(a)",
140
+ "adeps lanae, color.: E 160(a), excipiens ad emulsionem pro 1 g.\n",
141
+ "adeps lanae, color.: E 160(a), excipiens ad emulsionem pro 1 g.\n",
142
+ "alcoholes adipis lanae, adeps lanae, color.: E 160(a), excipiens ad emulsionem pro 1 g.\n",
143
+ "atropa belladonna D2 2,2 mg, bellis perennis D2 1,1 mg, calendula officinalis D2 2,2 mg, chamomilla recutita D3 2,2 mg, echinacea D2 0,55 mg, echinacea purpurea D2 0,55 mg, hamamelis virginiana D1 0,22 mg, hepar sulfuris D6 2,2 mg hypericum perforatum D2 0,66 mg, mercurius solubilis hahnemanni D8 1,1 mg, symphytum officinale D6 2,2 mg, aqua ad iniectabilia, natrii chloridum q.s. ad solutionem pro 2,2 ml.\n",
144
+ "berberidis corticis extractum ethanolicum liquidum 35 mg, DER: 6:1, combreti extractum aquosum liquidum 18 mg, DER: 1:4, cynarae extractum ethanolicum liquidum 36 mg, DER: 1:1, orthosiphonis folii extractum ethanolicum liquidum 18 mg, DER: 3.5:1, excipiens ad solutionem pro 1 ml, corresp. ethanolum 74 % V/V\n",
145
+ "cholecalciferolum 250 U.I., acidum ascorbicum 20 mg, calcii gluconas 100 mg et calcii lactas pentahydricus 25 mg et calcii hydrogenophosphas anhydricus 300 mg corresp. calcium 100 mg, arom.: saccharinum natricum, natrii cyclamas, vanillinum et alia, excipiens pro compresso obducto.",
146
+ "color.: E 160(a)",
147
+ "color.: E 160(a)\n",
148
+ "conserv.: E 217, E 219, natrii dehydroacetas",
149
+ "conserv.: E 217, E 219, natrii dehydroacetas, excipiens ad solutionem pro 1 ml corresp. 50 µg pro dosi.",
150
+ "extractum ethanolicum et glycerolicum liquidum ex absinthii herba 0.7 mg, cinnamomi cortex 3.8 mg, guaiaci lignum 14.3 mg, millefolii herba 7 mg, rhoeados flos 11 mg, tormentillae rhizoma 9.5 mg, balsamum tolutanum 0.3 mg, benzoe tonkinensis 4.8 mg, myrrha 2.4 mg, olibanum 0.9 mg, excipiens ad solutionem pro 1 ml, corresp. 40 guttae, corresp. ethanolum 37 % V/V",
151
+ "hamamelis virginiana D1 0,22 mg, hepar sulfuris D6 2,2 mg hypericum perforatum D2 0,66 mg, mercurius solubilis hahnemanni D8 1,1 mg, symphytum officinale D6 2,2 mg, aqua ad iniectabilia, natrii chloridum q.s. ad solutionem pro 2,2 ml.\n",
152
+ "hepar sulfuris D6 2,2 mg hypericum perforatum D2 0,66 mg",
153
+ "hepar sulfuris D6 2,2 mg hypericum perforatum D2 0,66 mg, mercurius solubilis hahnemanni D8 1,1 mg, symphytum officinale D6 2,2 mg, aqua ad iniectabilia, natrii chloridum q.s. ad solutionem pro 2,2 ml.\n",
154
+ "hyaluronas, conserv.: E 217, E 219",
155
+ "hypericum perforatum D2 0,66 mg, mercurius solubilis hahnemanni D8 1,1 mg, symphytum officinale D6 2,2 mg, aqua ad iniectabilia, natrii chloridum q.s. ad solutionem pro 2,2 ml.\n",
156
+ "mercurius solubilis hahnemanni D8 1,1 mg, symphytum officinale D6 2,2 mg, aqua ad iniectabilia, natrii chloridum q.s. ad solutionem pro 2,2 ml.\n",
157
+ "mercurius solubilis hahnemanni D8 1,1 mg, symphytum officinale D6 2,2 mg, aqua ad iniectabilia, natrii chloridum q.s. ad solutionem pro 2,2 ml.\n",
158
+ "natrii dehydroacetas, excipiens ad solutionem pro 1 ml corresp. 50 µg pro dosi.",
159
+ "osseinum-hydroxyapatit 200 mg corresp. collagena 52 mg et calcium 43 mg",
160
+ "rhei extractum ethanolicum siccum 50 mg corresp. glycosida anthrachinoni 5 mg, acidum salicylicum 10 mg, excipiens ad solutionem pro 1 ml corresp. ethanolum 59.5 % V/V",
161
+ "sennae folium 75 % corresp. hydroxyanthracenae 2.7 %",
162
+ "viperis antitoxinum equis F(ab')2 corresp. Vipera aspis > 1000 LD50 mus et Vipera berus > 500 LD50 mus et Vipera ammodytes > 1000 LD50 mus, natrii chloridum, polysorbatum 80, aqua ad iniectabilia q.s. ad solutionem pro 4 ml.",
163
+ "xylometazolini hydrochloridum 0.5 mg, natrii hyaluronas, conserv.: E 217, E 219, natrii dehydroacetas, excipiens ad solutionem pro 1 ml corresp. 50 µg pro dosi.",
164
+ "gasum inhalationis, pro vitro",
165
+ "toxoidum pertussis 25 µg et haemagglutininum filamentosum 25 µg",
166
+ "xenonum 74 -740 MBq"
167
+ ]
168
+
169
+ nr_parsing_tests = excipiens_tests.size + substance_tests.size + composition_tests.size
170
+ if RUN_ALL_PARSING_EXAMPLES
171
+ puts "Testing includes #{nr_parsing_tests} lines to be parsed"
172
+ else
173
+ puts "Skip testing includes #{nr_parsing_tests} lines to be parsed"
174
+ end
186
175
 
187
- should_pass = [
188
- "40 U.",
189
- "50'000 U.I.",
190
- "1 Mio. U.I.",
191
- '3 Mg',
192
- '2 mg',
193
- '0.3 ml',
194
- '0.01 mg/ml',
195
- '3 mg/ml',
196
- '2*10^9 CFU',
197
- '10^4.4 U.',
198
- '20 mg',
199
- '100 % m/m',
200
- '308.7 mg/g',
201
- '0.11 µg/g',
202
- '2.2 g',
203
- '2,2 g',
204
- '59.5 % V/V',
205
- '50 %',
206
- '80-120 g',
207
- ].each {
208
- |id|
176
+ # Here follow some low level test of the most important parts of the parser
177
+ describe CompositionParser do
178
+ let(:parser) { CompositionParser.new }
179
+
180
+ context "should return correct dose for 2*10^9 CFU.'" do
181
+ let(:dose_parse) { parser.dose }
182
+
183
+ [
184
+ "40 U.",
185
+ "50'000 U.I.",
186
+ "1 Mio. U.I.",
187
+ "3 Mg",
188
+ "2 mg",
189
+ "0.3 ml",
190
+ "0.01 mg/ml",
191
+ "3 mg/ml",
192
+ "2*10^9 CFU",
193
+ "10^4.4 U.",
194
+ "20 mg",
195
+ "100 % m/m",
196
+ "308.7 mg/g",
197
+ "0.11 µg/g",
198
+ "2.2 g",
199
+ "2,2 g",
200
+ "59.5 % V/V",
201
+ "50 %",
202
+ "80-120 g"
203
+ ].each { |id|
209
204
  it "parses dose #{id}" do
210
- expect(dose_parse).to parse(id)
205
+ expect(dose_parse).to parse(id)
211
206
  end
212
207
  }
213
- should_not_pass = [
214
- '10 2*10^9 CFU',
215
- '20 20 mg',
216
- '50%', # This can be part of a name like ferrum-quarz 50%
217
- ].each {
218
- |id|
208
+ [
209
+ "10 2*10^9 CFU",
210
+ "20 20 mg",
211
+ "50%" # This can be part of a name like ferrum-quarz 50%
212
+ ].each { |id|
219
213
  it "parses dose #{id}" do
220
- expect(dose_parse).to_not parse(id)
214
+ expect(dose_parse).to_not parse(id)
221
215
  end
222
216
  }
223
- end
224
-
225
- context "identifier parsing" do
226
- let(:identifier_parser) { parser.identifier }
217
+ end
227
218
 
228
- it "parses identifier" do
229
- expect(identifier_parser).to parse("calcium")
230
- expect(identifier_parser).to parse("D2")
231
- expect(identifier_parser).to parse("9,11-linolicum")
232
- expect(identifier_parser).to parse("xenonum(133-Xe)")
233
- expect(identifier_parser).to_not parse("10")
234
- expect(identifier_parser).to_not parse("pro asdf")
235
- expect(identifier_parser).to_not parse("calcium,")
219
+ context "identifier parsing" do
220
+ let(:identifier_parser) { parser.identifier }
221
+
222
+ it "parses identifier" do
223
+ expect(identifier_parser).to parse("calcium")
224
+ expect(identifier_parser).to parse("D2")
225
+ expect(identifier_parser).to parse("9,11-linolicum")
226
+ expect(identifier_parser).to parse("xenonum(133-Xe)")
227
+ expect(identifier_parser).to_not parse("10")
228
+ expect(identifier_parser).to_not parse("pro asdf")
229
+ expect(identifier_parser).to_not parse("calcium,")
230
+ end
236
231
  end
237
- end
238
232
 
239
- context "identifier_with_comma parsing" do
240
- let(:identifier_with_comma_parser) { parser.identifier_with_comma }
233
+ context "identifier_with_comma parsing" do
234
+ let(:identifier_with_comma_parser) { parser.identifier_with_comma }
241
235
 
242
- it "parses identifier_with_comma" do
243
- expect(identifier_with_comma_parser).to parse("calcium")
244
- end
245
- it "parses identifier_with_comma" do
246
- expect(identifier_with_comma_parser).to parse("9,11-linolicum")
247
- expect(identifier_with_comma_parser).to parse("a_bart_c")
248
- expect(identifier_with_comma_parser).to parse("éxcuäseé")
249
- end
250
- it "parses identifier_with_comma" do
251
- expect(identifier_with_comma_parser).to_not parse("10")
252
- expect(identifier_with_comma_parser).to_not parse("9,11-lino licum")
253
- end
254
- it "parses identifier_with_comma no comma at end allowed" do
255
- expect(identifier_with_comma_parser).to_not parse("calcium9,")
256
- end
257
- it "parses identifier_with_comma no comma at end allowed" do
258
- expect(identifier_with_comma_parser).to_not parse("calcium,")
259
- end
260
- it "parses identifier_with_comma no comma at end allowed" do
261
- expect(identifier_with_comma_parser).to_not parse("9,11-lino licum,")
262
- end
263
- it "parses identifier_with_comma" do
264
- expect(identifier_with_comma_parser).to_not parse("9,11-linolicum;")
236
+ it "parses identifier_with_comma" do
237
+ expect(identifier_with_comma_parser).to parse("calcium")
238
+ end
239
+ it "parses identifier_with_comma" do
240
+ expect(identifier_with_comma_parser).to parse("9,11-linolicum")
241
+ expect(identifier_with_comma_parser).to parse("a_bart_c")
242
+ expect(identifier_with_comma_parser).to parse("éxcuäseé")
243
+ end
244
+ it "parses identifier_with_comma" do
245
+ expect(identifier_with_comma_parser).to_not parse("10")
246
+ expect(identifier_with_comma_parser).to_not parse("9,11-lino licum")
247
+ end
248
+ it "parses identifier_with_comma no comma at end allowed" do
249
+ expect(identifier_with_comma_parser).to_not parse("calcium9,")
250
+ end
251
+ it "parses identifier_with_comma no comma at end allowed" do
252
+ expect(identifier_with_comma_parser).to_not parse("calcium,")
253
+ end
254
+ it "parses identifier_with_comma no comma at end allowed" do
255
+ expect(identifier_with_comma_parser).to_not parse("9,11-lino licum,")
256
+ end
257
+ it "parses identifier_with_comma" do
258
+ expect(identifier_with_comma_parser).to_not parse("9,11-linolicum;")
259
+ end
265
260
  end
266
- end
267
261
 
268
- context "label parsing" do
269
- let(:label_parser) { parser.label }
262
+ context "label parsing" do
263
+ let(:label_parser) { parser.label }
270
264
 
271
- should_pass = [
272
- 'A):',
273
- 'II)',
274
- 'V)',
275
- 'A): acari allergeni extractum 50 U.: ',
276
- ].each {
277
- |id|
265
+ [
266
+ "A):",
267
+ "II)",
268
+ "V)",
269
+ "A): acari allergeni extractum 50 U.: "
270
+ ].each { |id|
278
271
  it "parses label #{id}" do
279
- expect(label_parser).to parse(id)
272
+ expect(label_parser).to parse(id)
280
273
  end
281
274
  }
282
- should_not_pass = [
283
- 'I): albuminum humanum colloidale 0.5 mg,',
284
- ].each {
285
- |id|
275
+ [
276
+ "I): albuminum humanum colloidale 0.5 mg,"
277
+ ].each { |id|
286
278
  it "parses label #{id}" do
287
- expect(label_parser).to_not parse(id)
279
+ expect(label_parser).to_not parse(id)
288
280
  end
289
281
  }
290
- end
291
-
292
- context "substance parsing" do
293
- let(:substance_parser) { parser.substance }
282
+ end
294
283
 
295
- should_pass = [
296
- 'calcium',
297
- 'calcium 10 mg',
298
- 'ferrum-quarz 50% 20 mg',
299
- 'macrogolum 3350',
300
- 'pollinis allergeni extractum (Phleum pratense) 10 U.',
301
- 'phenoxymethylpenicillinum kalicum 1 U.I.',
302
- 'phenoxymethylpenicillinum kalicum 1 Mio. U.I.',
303
- 'DER: 1:4',
304
- 'DER: 3-5:1',
305
- 'DER: 6-8:1',
306
- 'DER: 4.0-9.0:1',
307
- 'retinoli palmitas 7900 U.I.',
308
- ].each {
309
- |id|
284
+ context "substance parsing" do
285
+ let(:substance_parser) { parser.substance }
286
+
287
+ [
288
+ "calcium",
289
+ "calcium 10 mg",
290
+ "ferrum-quarz 50% 20 mg",
291
+ "macrogolum 3350",
292
+ "pollinis allergeni extractum (Phleum pratense) 10 U.",
293
+ "phenoxymethylpenicillinum kalicum 1 U.I.",
294
+ "phenoxymethylpenicillinum kalicum 1 Mio. U.I.",
295
+ "DER: 1:4",
296
+ "DER: 3-5:1",
297
+ "DER: 6-8:1",
298
+ "DER: 4.0-9.0:1",
299
+ "retinoli palmitas 7900 U.I."
300
+ ].each do |id|
310
301
  it "parses substance #{id}" do
311
- expect(substance_parser).to parse(id)
302
+ expect(substance_parser).to parse(id)
312
303
  end
313
- }
314
- it "parses substance calcium, zwei" do expect(substance_parser).to_not parse("calcium, zwei") end
315
- end
316
-
317
- context "excipiens parsing" do
318
- let(:excipiens_parser) { parser.excipiens }
304
+ end
305
+ it "parses substance calcium, zwei" do
306
+ expect(substance_parser).to_not parse("calcium, zwei")
307
+ end
308
+ end
319
309
 
320
- puts "Testing whether #{excipiens_tests.size} excipiens can be parsed"
321
- let(:excipiens_parser) { parser.excipiens }
322
- excipiens_tests.each{
323
- |value, name|
324
- it "parses excipiens #{value}" do expect(excipiens_parser).to parse(value) end
325
- }
310
+ context "excipiens parsing" do
311
+ let(:excipiens_parser) { parser.excipiens }
326
312
 
327
- end
313
+ puts "Testing whether #{excipiens_tests.size} excipiens can be parsed"
314
+ let(:excipiens_parser) { parser.excipiens }
315
+ excipiens_tests.each do |value, name|
316
+ it "parses excipiens #{value}" do
317
+ expect(excipiens_parser).to parse(value)
318
+ end
319
+ end
320
+ end
328
321
 
329
- context "substance_name parsing" do
330
- let(:substance_name_parser) { parser.substance_name }
322
+ context "substance_name parsing" do
323
+ let(:substance_name_parser) { parser.substance_name }
331
324
 
332
- should_pass = [
333
- 'calcium',
334
- 'calendula officinalis D2',
335
- 'pollinis allergeni extractum (Phleum pratense)',
336
- 'retinoli palmitas',
337
- ].each {
338
- |id|
325
+ [
326
+ "calcium",
327
+ "calendula officinalis D2",
328
+ "pollinis allergeni extractum (Phleum pratense)",
329
+ "retinoli palmitas"
330
+ ].each { |id|
339
331
  it "parses substance_name #{id}" do
340
- expect(substance_name_parser).to parse(id)
332
+ expect(substance_name_parser).to parse(id)
341
333
  end
342
334
  }
343
335
 
344
- should_not_pass = [
345
- 'calcium 10 mg',
346
- 'ferrum-quarz 50% 20 mg',
347
- 'calendula officinalis D2 2.2 mg',
348
- 'macrogolum 3.2',
349
- 'macrogolum 3350 10 mg',
350
- 'pollinis allergeni extractum (Phleum pratense) 10 U.',
351
- 'retinoli palmitas 7900 U.I.',
352
- ].each {
353
- |id|
336
+ [
337
+ "calcium 10 mg",
338
+ "ferrum-quarz 50% 20 mg",
339
+ "calendula officinalis D2 2.2 mg",
340
+ "macrogolum 3.2",
341
+ "macrogolum 3350 10 mg",
342
+ "pollinis allergeni extractum (Phleum pratense) 10 U.",
343
+ "retinoli palmitas 7900 U.I."
344
+ ].each { |id|
354
345
  it "parses substance_name #{id}" do
355
- expect(substance_name_parser).not_to parse(id)
346
+ expect(substance_name_parser).not_to parse(id)
356
347
  end
357
348
  }
349
+ end
358
350
 
359
- end
360
-
361
- context "simple_substance parsing" do
362
- let(:simple_substance_parser) { parser.simple_substance }
363
- should_pass = [
364
- "2,2'-methylen-bis(6-tert.-butyl-4-methyl-phenolum)",
365
- "calcium part_b",
366
- "calcium 10",
367
- "calcium 10 mg",
368
- # 'macrogolum 3350 10 mg',
369
- "F(ab')2",
370
- ].each {
371
- |id|
351
+ context "simple_substance parsing" do
352
+ let(:simple_substance_parser) { parser.simple_substance }
353
+ [
354
+ "2,2'-methylen-bis(6-tert.-butyl-4-methyl-phenolum)",
355
+ "calcium part_b",
356
+ "calcium 10",
357
+ "calcium 10 mg",
358
+ # 'macrogolum 3350 10 mg',
359
+ "F(ab')2"
360
+ ].each { |id|
372
361
  it "parses simple_substance #{id}" do
373
- expect(simple_substance_parser).to parse(id)
362
+ expect(simple_substance_parser).to parse(id)
374
363
  end
375
364
  }
376
- should_not_pass = [
365
+ [
377
366
  "calcium corresp. 10 ml",
378
367
  "excipiens",
379
368
  "calcium ut magnesium",
380
- "calcium et magnesium",
381
- ].each {
382
- |id|
369
+ "calcium et magnesium"
370
+ ].each { |id|
383
371
  it "parses simple_substance #{id} should fail" do
384
- expect(simple_substance_parser).to_not parse(id)
372
+ expect(simple_substance_parser).to_not parse(id)
385
373
  end
386
374
  }
387
- end
375
+ end
388
376
 
389
- context "substance_name parsing" do
390
- should_pass = [
391
- 'calcium',
392
- 'calcium par_2 Part_C',
393
- 'semecarpus anacardium D12',
394
- 'virus poliomyelitis typus inactivatum',
395
- 'virus poliomyelitis typus inactivatum (D-Antigen)',
396
- 'virus poliomyelitis typus 1 inactivatum (D-Antigen)',
397
- 'stanni(II) chloridum dihydricum',
398
- 'ethanol.',
399
- 'calendula officinalis D2',
400
- # "Viperis Antitoxinum Equis F(ab')2", swissmedic patch, as only one occurrence
401
- "xenonum(133-Xe)",
402
- ].each {
403
- |id|
377
+ context "substance_name parsing" do
378
+ [
379
+ "calcium",
380
+ "calcium par_2 Part_C",
381
+ "semecarpus anacardium D12",
382
+ "virus poliomyelitis typus inactivatum",
383
+ "virus poliomyelitis typus inactivatum (D-Antigen)",
384
+ "virus poliomyelitis typus 1 inactivatum (D-Antigen)",
385
+ "stanni(II) chloridum dihydricum",
386
+ "ethanol.",
387
+ "calendula officinalis D2",
388
+ # "Viperis Antitoxinum Equis F(ab')2", swissmedic patch, as only one occurrence
389
+ "xenonum(133-Xe)"
390
+ ].each { |id|
404
391
  let(:substance_name_parser) { parser.substance_name }
405
392
  it "parses substance_name #{id}" do
406
- expect(substance_name_parser).to parse(id)
393
+ expect(substance_name_parser).to parse(id)
407
394
  end
408
395
  }
409
- should_not_pass = [
410
- 'calendula officinalis D2 2,2 mg',
411
- 'calcium corresp. xx',
412
- 'calcium residui: xx',
413
- 'calcium ut xx',
414
- 'calcium et xx',
415
- 'calcium,',
416
- 'calcium9,',
417
- 'excipiens pro',
418
- 'albuminum humanum colloidale, stanni(II) chloridum dihydricum',
419
- ].each {
420
- |id|
396
+ [
397
+ "calendula officinalis D2 2,2 mg",
398
+ "calcium corresp. xx",
399
+ "calcium residui: xx",
400
+ "calcium ut xx",
401
+ "calcium et xx",
402
+ "calcium,",
403
+ "calcium9,",
404
+ "excipiens pro",
405
+ "albuminum humanum colloidale, stanni(II) chloridum dihydricum"
406
+ ].each { |id|
421
407
  let(:substance_name_parser) { parser.substance_name }
422
408
  it "parses substance_name #{id} should fail" do
423
- expect(substance_name_parser).to_not parse(id)
409
+ expect(substance_name_parser).to_not parse(id)
424
410
  end
425
411
  }
426
- end
412
+ end
427
413
 
428
- context "composition parsing" do
429
- let(:composition_parser) { parser.composition }
430
- should_pass = [
431
- 'calcium',
432
- 'calcium par_2 Part_C',
433
- 'virus poliomyelitis typus inactivatum',
434
- 'virus poliomyelitis typus inactivatum (D-Antigen)',
435
- 'virus poliomyelitis typus 1 inactivatum (D-Antigen)',
436
- 'toxoidum pertussis 25 µg et haemagglutininum filamentosum 15 µg',
437
- ].each {
438
- |id|
414
+ context "composition parsing" do
415
+ let(:composition_parser) { parser.composition }
416
+ [
417
+ "calcium",
418
+ "calcium par_2 Part_C",
419
+ "virus poliomyelitis typus inactivatum",
420
+ "virus poliomyelitis typus inactivatum (D-Antigen)",
421
+ "virus poliomyelitis typus 1 inactivatum (D-Antigen)",
422
+ "toxoidum pertussis 25 µg et haemagglutininum filamentosum 15 µg"
423
+ ].each { |id|
439
424
  it "parses composition #{id}" do
440
- expect(composition_parser).to parse(id)
425
+ expect(composition_parser).to parse(id)
441
426
  end
442
427
  }
443
428
 
444
-
445
- puts "Testing whether #{composition_tests.size} compositions can be parsed"
446
- composition_tests.each{
447
- |value, name|
448
- let(:composition_parser) { parser.composition }
449
- it "parses composition #{value}" do
450
- expect(composition_parser).to parse(value)
451
- end
452
- }
453
- puts "Testing whether #{substance_tests.size} substances can be parsed as composition"
454
- substance_tests.each{
455
- |value, name|
456
- it "parses substance #{value}" do
457
- expect(composition_parser).to parse(value)
458
- end
459
- }
460
-
461
- if RunAllParsingExamples
462
- specify { expect( File.exists?(AllCompositionLines)).to eq true }
463
- composition_lines = IO.readlines(AllCompositionLines)
464
- puts "Testing whether all #{composition_lines.size} lines in #{File.basename(AllCompositionLines)} can be parsed"
465
- composition_lines.each{
466
- |value, name|
429
+ puts "Testing whether #{composition_tests.size} compositions can be parsed"
430
+ composition_tests.each { |value, name|
467
431
  let(:composition_parser) { parser.composition }
468
- it "parses composition #{value}" do expect(composition_parser).to parse(value) end
432
+ it "parses composition #{value}" do
433
+ expect(composition_parser).to parse(value)
434
+ end
435
+ }
436
+ puts "Testing whether #{substance_tests.size} substances can be parsed as composition"
437
+ substance_tests.each { |value, name|
438
+ it "parses substance #{value}" do
439
+ expect(composition_parser).to parse(value)
440
+ end
469
441
  }
470
- else
471
- puts "Skip testing whether #{composition_tests.size} compositions and #{substance_tests.size} substances can be parsed"
472
- end
473
442
 
443
+ if RUN_ALL_PARSING_EXAMPLES
444
+ specify { expect(File.exist?(AllCompositionLines)).to eq true }
445
+ composition_lines = IO.readlines(AllCompositionLines)
446
+ puts "Testing whether all #{composition_lines.size} lines in #{File.basename(AllCompositionLines)} can be parsed"
447
+ composition_lines.each do |value, name|
448
+ let(:composition_parser) { parser.composition }
449
+ it "parses composition #{value}" do
450
+ expect(composition_parser).to parse(value)
451
+ end
452
+ end
453
+ else
454
+ puts "Skip testing whether #{composition_tests.size} compositions and #{substance_tests.size} substances can be parsed"
455
+ end
456
+ end
474
457
  end
475
-
476
458
  end
477
- end