swissmedic-diff 0.2.9 → 0.3.1
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 +4 -4
- data/Gemfile +0 -9
- data/Gemfile.lock +82 -32
- data/{History.txt → History.md} +33 -16
- data/Packungen-2025.12.15.xlsx +0 -0
- data/Packungen-2026.01.08.xlsx +0 -0
- data/{README.txt → README.md} +8 -8
- data/Rakefile +9 -3
- data/lib/swissmedic-diff.rb +169 -255
- data/lib/version.rb +1 -1
- data/test/test_swissmedic-diff-bin.rb +28 -0
- data/test/test_swissmedic-diff.rb +65 -162
- metadata +32 -15
- data/lib/compatibility.rb +0 -57
|
@@ -1,186 +1,89 @@
|
|
|
1
1
|
#!/usr/bin/env ruby
|
|
2
|
-
|
|
2
|
+
|
|
3
3
|
# SwissmedicPluginTest -- oddb.org -- 18.03.2008 -- hwyss@ywesee.com
|
|
4
4
|
|
|
5
5
|
$: << File.expand_path("../lib", File.dirname(__FILE__))
|
|
6
6
|
|
|
7
|
-
require
|
|
8
|
-
require
|
|
9
|
-
require
|
|
7
|
+
require "minitest/autorun"
|
|
8
|
+
require "swissmedic-diff"
|
|
9
|
+
require "pp"
|
|
10
10
|
|
|
11
11
|
module ODDB
|
|
12
12
|
class SwissmedicPluginTest < Minitest::Test
|
|
13
13
|
def setup
|
|
14
14
|
@diff = SwissmedicDiff.new
|
|
15
|
-
@january_2014 = File.expand_path 'data/Packungen-2014.01.01.xlsx', File.dirname(__FILE__)
|
|
16
|
-
@february_2014 = File.expand_path 'data/Packungen-2014.02.01.xlsx', File.dirname(__FILE__)
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
def test_diff_new_format_july_2015
|
|
20
|
-
@diff = SwissmedicDiff.new
|
|
21
|
-
last_month = File.expand_path 'data/Packungen-2015.06.04.xlsx', File.dirname(__FILE__)
|
|
22
|
-
this_month = File.expand_path 'data/Packungen-2015.07.02.xlsx', File.dirname(__FILE__)
|
|
23
|
-
result = @diff.diff this_month, last_month, [:atc_class, :sequence_date]
|
|
24
|
-
assert(result.changes.flatten.index('Zulassungs-Nummer') == nil, "Should not find Zulassungs-Nummer in changes")
|
|
25
|
-
assert_equal(2, result.news.size)
|
|
26
|
-
assert_equal(4, result.changes.size)
|
|
27
|
-
assert_equal(4, result.updates.size)
|
|
28
|
-
assert_equal(['65838', nil], result.news.collect{|x| x[0] if x[0] == '65838'})
|
|
29
|
-
assert_equal({"00277"=>[:name_base, :expiry_date], "00279"=>[:expiry_date], "65838"=>[:new], "15219"=>[:new]}, result.changes)
|
|
30
15
|
end
|
|
31
16
|
|
|
32
|
-
def
|
|
33
|
-
|
|
34
|
-
last_month = File.expand_path 'data/Packungen-2015.06.04.xlsx', File.dirname(__FILE__)
|
|
35
|
-
this_month = File.expand_path 'data/Packungen-2015.07.02.xlsx', File.dirname(__FILE__)
|
|
36
|
-
expected = {
|
|
37
|
-
"00277"=>[:name_base, :expiry_date],
|
|
38
|
-
"00279"=>[:expiry_date],
|
|
39
|
-
"65838"=>[:new],
|
|
40
|
-
"15219"=>[:new]
|
|
41
|
-
}
|
|
42
|
-
result = @diff.diff this_month, last_month
|
|
43
|
-
assert_equal(expected, result.changes)
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
def test_diff_changes_february_2019
|
|
17
|
+
def test_diff_changes_january_2026
|
|
18
|
+
start_time = Time.now
|
|
48
19
|
@diff = SwissmedicDiff.new
|
|
49
|
-
last_month = File.expand_path
|
|
50
|
-
this_month = File.expand_path
|
|
51
|
-
expected = {"00277"=>[:name_base, :expiry_date, :production_science],
|
|
52
|
-
"15219"=>[:expiry_date, :indication_registration, :indication_sequence, :sequence],
|
|
53
|
-
"16105"=>[:new],
|
|
54
|
-
"16598"=>[:new],
|
|
55
|
-
"28486"=>[:new],
|
|
56
|
-
"30015"=>[:new],
|
|
57
|
-
"31644"=>[:new],
|
|
58
|
-
"32475"=>[:new],
|
|
59
|
-
"35366"=>[:new],
|
|
60
|
-
"43454"=>[:new],
|
|
61
|
-
"44625"=>[:new],
|
|
62
|
-
"45882"=>[:new],
|
|
63
|
-
"53290"=>[:new],
|
|
64
|
-
"53662"=>[:new],
|
|
65
|
-
"54015"=>[:new],
|
|
66
|
-
"54534"=>[:new],
|
|
67
|
-
"55558"=>[:new],
|
|
68
|
-
"66297"=>[:new],
|
|
69
|
-
"55594"=>[:new],
|
|
70
|
-
"55674"=>[:new],
|
|
71
|
-
"56352"=>[:new],
|
|
72
|
-
"58943"=>[:new],
|
|
73
|
-
"59267"=>[:new],
|
|
74
|
-
"61186"=>[:new],
|
|
75
|
-
"62069"=>[:new],
|
|
76
|
-
"62132"=>[:new],
|
|
77
|
-
"65856"=>[:new],
|
|
78
|
-
"65857"=>[:new],
|
|
79
|
-
"58734"=>[:new],
|
|
80
|
-
"55561"=>[:new],
|
|
81
|
-
"65160"=>[:new],
|
|
82
|
-
"58158"=>[:new],
|
|
83
|
-
"44447"=>[:new],
|
|
84
|
-
"39252"=>[:new],
|
|
85
|
-
"00278"=>[:delete],
|
|
86
|
-
"00279"=>[:delete],
|
|
87
|
-
"65837"=>[:delete],
|
|
88
|
-
"65838"=>[:delete]
|
|
89
|
-
}
|
|
20
|
+
last_month = File.expand_path "data/Packungen-2025.12.15.xlsx", File.dirname(__FILE__)
|
|
21
|
+
this_month = File.expand_path "data/Packungen-2026.01.08.xlsx", File.dirname(__FILE__)
|
|
90
22
|
result = @diff.diff this_month, last_month
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
assert_raises(RuntimeError) { @diff.diff this_month, last_month, [:atc_class, :sequence_date]}
|
|
99
|
-
end
|
|
23
|
+
duration = (Time.now - start_time).to_i
|
|
24
|
+
puts "Took #{duration} seconds"
|
|
25
|
+
assert_equal(487, result.updates.size)
|
|
26
|
+
assert_equal(336, result.changes.size)
|
|
27
|
+
assert_equal(148, result.news.size)
|
|
28
|
+
assert_equal(7, result.replacements.size)
|
|
29
|
+
assert_equal(107, result.package_deletions.size)
|
|
100
30
|
|
|
31
|
+
assert_equal(["16105", "01", "Hirudoid, Creme", "Medinova AG", "Synthetika", "02.08.2.", "C05BA01", Date.new(1951, 9, 1), Date.new(1951, 9, 1), "unbegrenzt", "001", "14", "g", "D", "D", "D", "heparinoidum (chondroitini polysulfas)", "heparinoidum (chondroitini polysulfas) 3 mg, corresp. 250 U., glycerolum (85 per centum), acidum stearicum, alcoholes adipis lanae, alcohol cetylicus et stearylicus 31.375 mg, vaselinum album, alcohol myristylicus, alcohol isopropylicus, kalii hydroxidum, E 218 1.6 mg, thymolum, propylis parahydroxybenzoas 0.4 mg, aqua purificata, ad unguentum pro 1 g.", "X", "Venenmittel für den äusserlichen Gebrauch", nil, nil, nil, nil, 0], result.news.first)
|
|
101
32
|
|
|
102
|
-
|
|
103
|
-
result = @diff.diff @february_2014, @january_2014, [:atc_class, :sequence_date]
|
|
104
|
-
assert_equal 4, result.news.size
|
|
105
|
-
expected = {
|
|
106
|
-
"00277"=>[:name_base, :expiry_date],
|
|
107
|
-
"65040"=>[:sequence, :replaced_package],
|
|
108
|
-
"60125"=>[:new],
|
|
109
|
-
"61367"=>[:new],
|
|
110
|
-
"00274"=>[:delete]
|
|
111
|
-
}
|
|
112
|
-
assert_equal(expected, result.changes)
|
|
113
|
-
assert_equal 1, result.updates.size
|
|
114
|
-
assert_equal 5, result.changes.size
|
|
115
|
-
assert_equal 3, result.package_deletions.size
|
|
116
|
-
assert_equal 4, result.package_deletions.first.size
|
|
117
|
-
iksnrs = result.package_deletions.collect { |row| row.at(0) }.sort
|
|
118
|
-
ikscds = result.package_deletions.collect { |row| row.at(2) }.sort
|
|
119
|
-
assert_equal ["00274", "00274", "65040"], iksnrs
|
|
120
|
-
assert_equal ["001", "001", "002"], ikscds
|
|
121
|
-
assert_equal 1, result.sequence_deletions.size
|
|
122
|
-
assert_equal ["00274", "01"], result.sequence_deletions.at(0)
|
|
123
|
-
assert_equal 1, result.registration_deletions.size
|
|
124
|
-
assert_equal ["00274"], result.registration_deletions.at(0)
|
|
125
|
-
assert_equal 1, result.replacements.size
|
|
126
|
-
assert_equal '001', result.replacements.values.first
|
|
33
|
+
assert_equal([["55249", "01", "Bronchosan Husten, Tropfen zum Einnehmen", "A.Vogel AG", "Phytoarzneimittel", "03.02.0.", "R05CA10", Date.new(2000, 10, 18), Date.new(2000, 10, 18), "unbegrenzt", "001", "50", "ml", "D", "D", "D", "hederae helicis herbae recentis tinctura (Hedera helix L., herba), thymi herbae recentis tinctura (Thymus vulgaris L., herba), liquiritiae radicis tinctura (Glycyrrhiza glabra L., radix)", "hederae helicis herbae recentis tinctura (Hedera helix L., herba) 376.1 mg, ratio: 1:5.6, Auszugsmittel ethanolum 50.6% (V/V), thymi herbae recentis tinctura (Thymus vulgaris L., herba) 329.1 mg, ratio: 1:7.9, Auszugsmittel ethanolum 50.6% (V/V), liquiritiae radicis tinctura (Glycyrrhiza glabra L., radix) 233.9 mg, ratio: 1:10, Auszugsmittel ethanolum 50.6% (V/V), anisi stellati aetheroleum, eucalypti aetheroleum, ad solutionem pro 1 ml, corresp. ethanolum 51 % V/V.", "X", "Bei Erkältungshusten", nil, nil, nil, nil, 0], "052"], result.replacements.first)
|
|
127
34
|
|
|
128
|
-
assert_equal
|
|
129
|
-
assert_equal
|
|
35
|
+
assert_equal(["00613", [:expiry_date]], result.changes.first)
|
|
36
|
+
assert_equal({target: "Packungen-2026.01.08.xlsx 3198082 bytes", latest: "Packungen-2025.12.15.xlsx 3218271 bytes", news: 148, updates: 487, changes: 336, newest_rows: 6305, replacements: 147, package_deletions: 107, sequence_deletions: 60, registration_deletions: 47}, SwissmedicDiff.stat)
|
|
130
37
|
end
|
|
131
38
|
|
|
132
|
-
def
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
39
|
+
def test_diff_changes_february_2019
|
|
40
|
+
@diff = SwissmedicDiff.new
|
|
41
|
+
last_month = File.expand_path "data/Packungen-2019.03.06.xlsx", File.dirname(__FILE__)
|
|
42
|
+
this_month = File.expand_path "data/Packungen-2025.07.01.xlsx", File.dirname(__FILE__)
|
|
43
|
+
expected = {"00450" => [:new],
|
|
44
|
+
"00278" => [:new],
|
|
45
|
+
"00279" => [:new],
|
|
46
|
+
"44447" => [:name_base, :production_science, :expiry_date, :substances, :composition],
|
|
47
|
+
"65837" => [:new],
|
|
48
|
+
"65838" => [:new],
|
|
49
|
+
"15219" => [:expiry_date],
|
|
50
|
+
"00000" => [:new],
|
|
51
|
+
"00277" => [:delete],
|
|
52
|
+
"16105" => [:delete],
|
|
53
|
+
"16598" => [:delete],
|
|
54
|
+
"28486" => [:delete],
|
|
55
|
+
"30015" => [:delete],
|
|
56
|
+
"31644" => [:delete],
|
|
57
|
+
"32475" => [:delete],
|
|
58
|
+
"35366" => [:delete],
|
|
59
|
+
"43454" => [:delete],
|
|
60
|
+
"44625" => [:delete],
|
|
61
|
+
"45882" => [:delete],
|
|
62
|
+
"53290" => [:delete],
|
|
63
|
+
"53662" => [:delete],
|
|
64
|
+
"54015" => [:delete],
|
|
65
|
+
"54534" => [:delete],
|
|
66
|
+
"55558" => [:delete],
|
|
67
|
+
"66297" => [:delete],
|
|
68
|
+
"55594" => [:delete],
|
|
69
|
+
"55674" => [:delete],
|
|
70
|
+
"56352" => [:delete],
|
|
71
|
+
"58943" => [:delete],
|
|
72
|
+
"59267" => [:delete],
|
|
73
|
+
"61186" => [:delete],
|
|
74
|
+
"62069" => [:delete],
|
|
75
|
+
"62132" => [:delete],
|
|
76
|
+
"65856" => [:delete],
|
|
77
|
+
"65857" => [:delete],
|
|
78
|
+
"58734" => [:delete],
|
|
79
|
+
"55561" => [:delete],
|
|
80
|
+
"65160" => [:delete],
|
|
81
|
+
"58158" => [:delete],
|
|
82
|
+
"39252" => [:delete]}
|
|
136
83
|
|
|
137
|
-
|
|
138
|
-
ignore = [:company, :name_base, :expiry_date, :indication_sequence]
|
|
139
|
-
result = @diff.diff(@february_2014, @january_2014, ignore)
|
|
140
|
-
expected = {
|
|
141
|
-
"00278"=>[:atc_class],
|
|
142
|
-
"00279"=>[:atc_class],
|
|
143
|
-
"65040"=>[:sequence, :replaced_package],
|
|
144
|
-
"60125"=>[:new],
|
|
145
|
-
"61367"=>[:new],
|
|
146
|
-
"00274"=>[:delete]
|
|
147
|
-
}
|
|
84
|
+
result = @diff.diff this_month, last_month
|
|
148
85
|
assert_equal(expected, result.changes)
|
|
149
|
-
assert_equal
|
|
150
|
-
assert_equal 3, result.updates.size
|
|
151
|
-
assert_equal 6, result.changes.size
|
|
152
|
-
assert_equal 3, result.package_deletions.size
|
|
153
|
-
end
|
|
154
|
-
def test_to_s
|
|
155
|
-
@diff.to_s
|
|
156
|
-
@diff.diff(@february_2014, @january_2014)
|
|
157
|
-
assert_equal <<-EOS.strip, @diff.to_s
|
|
158
|
-
+ 60125: Otriduo Schnupfen, Dosierspray
|
|
159
|
-
+ 61367: Hypericum-Mepha 250, Lactab
|
|
160
|
-
- 00274: Cardio-Pulmo-Rénal Sérocytol, suppositoire
|
|
161
|
-
> 00277: Coeur-Vaisseaux Sérocytol, Namensänderung; Namensänderung (Coeur-Vaisseaux Sérocytol, Namensänderung), Ablaufdatum der Zulassung (25.04.2020)
|
|
162
|
-
> 00278: Colon Sérocytol, suppositoire; ATC-Code (J06AA)
|
|
163
|
-
> 00279: Conjonctif Sérocytol, suppositoire; ATC-Code (D03AX04)
|
|
164
|
-
> 65040: Panthoben, Salbe; Packungs-Nummer (001 -> 003)
|
|
165
|
-
EOS
|
|
166
|
-
assert_equal <<-EOS.strip, @diff.to_s(:name)
|
|
167
|
-
- 00274: Cardio-Pulmo-Rénal Sérocytol, suppositoire
|
|
168
|
-
> 00277: Coeur-Vaisseaux Sérocytol, Namensänderung; Namensänderung (Coeur-Vaisseaux Sérocytol, Namensänderung), Ablaufdatum der Zulassung (25.04.2020)
|
|
169
|
-
> 00278: Colon Sérocytol, suppositoire; ATC-Code (J06AA)
|
|
170
|
-
> 00279: Conjonctif Sérocytol, suppositoire; ATC-Code (D03AX04)
|
|
171
|
-
+ 61367: Hypericum-Mepha 250, Lactab
|
|
172
|
-
+ 60125: Otriduo Schnupfen, Dosierspray
|
|
173
|
-
> 65040: Panthoben, Salbe; Packungs-Nummer (001 -> 003)
|
|
174
|
-
EOS
|
|
175
|
-
assert_equal <<-EOS.strip, @diff.to_s(:registration)
|
|
176
|
-
- 00274: Cardio-Pulmo-Rénal Sérocytol, suppositoire
|
|
177
|
-
> 00277: Coeur-Vaisseaux Sérocytol, Namensänderung; Namensänderung (Coeur-Vaisseaux Sérocytol, Namensänderung), Ablaufdatum der Zulassung (25.04.2020)
|
|
178
|
-
> 00278: Colon Sérocytol, suppositoire; ATC-Code (J06AA)
|
|
179
|
-
> 00279: Conjonctif Sérocytol, suppositoire; ATC-Code (D03AX04)
|
|
180
|
-
+ 60125: Otriduo Schnupfen, Dosierspray
|
|
181
|
-
+ 61367: Hypericum-Mepha 250, Lactab
|
|
182
|
-
> 65040: Panthoben, Salbe; Packungs-Nummer (001 -> 003)
|
|
183
|
-
EOS
|
|
86
|
+
assert_equal({target: "Packungen-2025.07.01.xlsx 245310 bytes", latest: "Packungen-2019.03.06.xlsx 347989 bytes", news: 41, updates: 2, changes: 40, newest_rows: 40, replacements: 9, package_deletions: 39, sequence_deletions: 34, registration_deletions: 32}, SwissmedicDiff.stat)
|
|
184
87
|
end
|
|
185
88
|
end
|
|
186
89
|
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: swissmedic-diff
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.3.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Hannes Wyss, Masaomi Hatakeyama
|
|
@@ -10,19 +10,19 @@ cert_chain: []
|
|
|
10
10
|
date: 1980-01-01 00:00:00.000000000 Z
|
|
11
11
|
dependencies:
|
|
12
12
|
- !ruby/object:Gem::Dependency
|
|
13
|
-
name:
|
|
13
|
+
name: simple_xlsx_reader
|
|
14
14
|
requirement: !ruby/object:Gem::Requirement
|
|
15
15
|
requirements:
|
|
16
16
|
- - ">="
|
|
17
17
|
- !ruby/object:Gem::Version
|
|
18
|
-
version:
|
|
18
|
+
version: '0'
|
|
19
19
|
type: :runtime
|
|
20
20
|
prerelease: false
|
|
21
21
|
version_requirements: !ruby/object:Gem::Requirement
|
|
22
22
|
requirements:
|
|
23
23
|
- - ">="
|
|
24
24
|
- !ruby/object:Gem::Version
|
|
25
|
-
version:
|
|
25
|
+
version: '0'
|
|
26
26
|
- !ruby/object:Gem::Dependency
|
|
27
27
|
name: nokogiri
|
|
28
28
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -52,7 +52,7 @@ dependencies:
|
|
|
52
52
|
- !ruby/object:Gem::Version
|
|
53
53
|
version: '0'
|
|
54
54
|
- !ruby/object:Gem::Dependency
|
|
55
|
-
name:
|
|
55
|
+
name: logger
|
|
56
56
|
requirement: !ruby/object:Gem::Requirement
|
|
57
57
|
requirements:
|
|
58
58
|
- - ">="
|
|
@@ -66,7 +66,7 @@ dependencies:
|
|
|
66
66
|
- !ruby/object:Gem::Version
|
|
67
67
|
version: '0'
|
|
68
68
|
- !ruby/object:Gem::Dependency
|
|
69
|
-
name:
|
|
69
|
+
name: ostruct
|
|
70
70
|
requirement: !ruby/object:Gem::Requirement
|
|
71
71
|
requirements:
|
|
72
72
|
- - ">="
|
|
@@ -80,13 +80,13 @@ dependencies:
|
|
|
80
80
|
- !ruby/object:Gem::Version
|
|
81
81
|
version: '0'
|
|
82
82
|
- !ruby/object:Gem::Dependency
|
|
83
|
-
name:
|
|
83
|
+
name: rake
|
|
84
84
|
requirement: !ruby/object:Gem::Requirement
|
|
85
85
|
requirements:
|
|
86
86
|
- - ">="
|
|
87
87
|
- !ruby/object:Gem::Version
|
|
88
88
|
version: '0'
|
|
89
|
-
type: :
|
|
89
|
+
type: :development
|
|
90
90
|
prerelease: false
|
|
91
91
|
version_requirements: !ruby/object:Gem::Requirement
|
|
92
92
|
requirements:
|
|
@@ -94,7 +94,21 @@ dependencies:
|
|
|
94
94
|
- !ruby/object:Gem::Version
|
|
95
95
|
version: '0'
|
|
96
96
|
- !ruby/object:Gem::Dependency
|
|
97
|
-
name:
|
|
97
|
+
name: standard
|
|
98
|
+
requirement: !ruby/object:Gem::Requirement
|
|
99
|
+
requirements:
|
|
100
|
+
- - ">="
|
|
101
|
+
- !ruby/object:Gem::Version
|
|
102
|
+
version: '0'
|
|
103
|
+
type: :development
|
|
104
|
+
prerelease: false
|
|
105
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
106
|
+
requirements:
|
|
107
|
+
- - ">="
|
|
108
|
+
- !ruby/object:Gem::Version
|
|
109
|
+
version: '0'
|
|
110
|
+
- !ruby/object:Gem::Dependency
|
|
111
|
+
name: debug
|
|
98
112
|
requirement: !ruby/object:Gem::Requirement
|
|
99
113
|
requirements:
|
|
100
114
|
- - ">="
|
|
@@ -145,20 +159,23 @@ extra_rdoc_files: []
|
|
|
145
159
|
files:
|
|
146
160
|
- Gemfile
|
|
147
161
|
- Gemfile.lock
|
|
148
|
-
- History.
|
|
162
|
+
- History.md
|
|
149
163
|
- LICENSE
|
|
150
164
|
- Manifest.txt
|
|
151
165
|
- Packungen-2023.08.08.xlsx
|
|
152
166
|
- Packungen-2023.09.08.xlsx
|
|
153
|
-
-
|
|
167
|
+
- Packungen-2025.12.15.xlsx
|
|
168
|
+
- Packungen-2026.01.08.xlsx
|
|
169
|
+
- README.md
|
|
154
170
|
- Rakefile
|
|
155
171
|
- bin/swissmedic-diff
|
|
156
|
-
- lib/compatibility.rb
|
|
157
172
|
- lib/swissmedic-diff.rb
|
|
158
173
|
- lib/version.rb
|
|
174
|
+
- test/test_swissmedic-diff-bin.rb
|
|
159
175
|
- test/test_swissmedic-diff.rb
|
|
160
176
|
homepage: https://github.com/zdavatz/swissmedic-diff
|
|
161
|
-
licenses:
|
|
177
|
+
licenses:
|
|
178
|
+
- GNU GPL version 2
|
|
162
179
|
metadata:
|
|
163
180
|
changelog_uri: https://github.com/zdavatz/swissmedic-diff/blob/master/History.md
|
|
164
181
|
rdoc_options: []
|
|
@@ -168,14 +185,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
168
185
|
requirements:
|
|
169
186
|
- - ">="
|
|
170
187
|
- !ruby/object:Gem::Version
|
|
171
|
-
version: '
|
|
188
|
+
version: '2.6'
|
|
172
189
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
173
190
|
requirements:
|
|
174
191
|
- - ">="
|
|
175
192
|
- !ruby/object:Gem::Version
|
|
176
193
|
version: '0'
|
|
177
194
|
requirements: []
|
|
178
|
-
rubygems_version:
|
|
195
|
+
rubygems_version: 4.0.3
|
|
179
196
|
specification_version: 4
|
|
180
197
|
summary: Find out what Products have changed on the swiss healthcare market
|
|
181
198
|
test_files:
|
data/lib/compatibility.rb
DELETED
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env ruby
|
|
2
|
-
# encoding: utf-8
|
|
3
|
-
require 'spreadsheet'
|
|
4
|
-
require 'rubyXL'
|
|
5
|
-
|
|
6
|
-
module Spreadsheet
|
|
7
|
-
class << self
|
|
8
|
-
def open io_or_path, mode="rb+"
|
|
9
|
-
if File.extname(io_or_path).downcase == '.xlsx'
|
|
10
|
-
RubyXL::Parser.parse(io_or_path)
|
|
11
|
-
else
|
|
12
|
-
if io_or_path.respond_to? :seek
|
|
13
|
-
Excel::Workbook.open(io_or_path)
|
|
14
|
-
elsif block_given?
|
|
15
|
-
File.open(io_or_path, mode) do |fh|
|
|
16
|
-
yield open(fh)
|
|
17
|
-
end
|
|
18
|
-
else
|
|
19
|
-
open File.open(io_or_path, mode)
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
end
|
|
23
|
-
end
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
module RubyXL
|
|
27
|
-
class Worksheet
|
|
28
|
-
def row(row_index)
|
|
29
|
-
x = @sheet_data[row_index]
|
|
30
|
-
def x.date(column_index)
|
|
31
|
-
data = self[column_index]
|
|
32
|
-
return data.value.respond_to?(:to_i) ? data.value.to_i : data.value
|
|
33
|
-
# return Date.new(1899,12,30)+data.value.to_i if data.is_a?(RubyXL::Cell)
|
|
34
|
-
end unless defined?(x.date)
|
|
35
|
-
x
|
|
36
|
-
end
|
|
37
|
-
end
|
|
38
|
-
class Workbook
|
|
39
|
-
def worksheet(idx)
|
|
40
|
-
self[idx]
|
|
41
|
-
end
|
|
42
|
-
end
|
|
43
|
-
class Row < OOXMLObject
|
|
44
|
-
def []=(ind, value)
|
|
45
|
-
cells[ind] = value
|
|
46
|
-
end
|
|
47
|
-
end
|
|
48
|
-
class Cell
|
|
49
|
-
def to_i
|
|
50
|
-
self.value.respond_to?(:to_i) ? self.value.to_i : self.value
|
|
51
|
-
end
|
|
52
|
-
def to_s
|
|
53
|
-
self.value.to_s
|
|
54
|
-
end
|
|
55
|
-
end
|
|
56
|
-
end
|
|
57
|
-
|