swissmedic-diff 0.1.5 → 0.1.6
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.
- data/Gemfile.lock +12 -4
- data/History.txt +8 -1
- data/Manifest.txt +2 -0
- data/lib/swissmedic-diff.rb +26 -8
- data/lib/version.rb +3 -0
- data/swissmedic-diff.gemspec +6 -1
- data/test/data/Packungen-2014.xlsx +0 -0
- data/test/test_swissmedic-diff.rb +18 -13
- metadata +4 -2
data/Gemfile.lock
CHANGED
@@ -1,7 +1,10 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
swissmedic-diff (0.1.
|
4
|
+
swissmedic-diff (0.1.5)
|
5
|
+
nokogiri
|
6
|
+
rubyXL
|
7
|
+
rubyzip
|
5
8
|
spreadsheet
|
6
9
|
|
7
10
|
GEM
|
@@ -10,19 +13,24 @@ GEM
|
|
10
13
|
ansi (1.4.3)
|
11
14
|
builder (3.2.2)
|
12
15
|
hashie (2.0.5)
|
13
|
-
hoe (3.7.
|
16
|
+
hoe (3.7.4)
|
14
17
|
rake (>= 0.8, < 11.0)
|
15
|
-
|
18
|
+
mini_portile (0.5.2)
|
19
|
+
minitest (5.2.1)
|
16
20
|
minitest-reporters (1.0.0)
|
17
21
|
ansi
|
18
22
|
builder
|
19
23
|
minitest (>= 5.0)
|
20
24
|
powerbar
|
25
|
+
nokogiri (1.6.0)
|
26
|
+
mini_portile (~> 0.5.0)
|
21
27
|
powerbar (1.0.11)
|
22
28
|
ansi (~> 1.4.0)
|
23
29
|
hashie (>= 1.1.0)
|
24
|
-
rake (10.1.
|
30
|
+
rake (10.1.1)
|
25
31
|
ruby-ole (1.2.11.7)
|
32
|
+
rubyXL (1.2.10)
|
33
|
+
rubyzip (0.9.9)
|
26
34
|
spreadsheet (0.9.6)
|
27
35
|
ruby-ole (>= 1.0)
|
28
36
|
|
data/History.txt
CHANGED
@@ -1,4 +1,11 @@
|
|
1
|
-
=== 0.1.
|
1
|
+
=== 0.1.6 / 14.01.2014
|
2
|
+
|
3
|
+
* Added test/data/Packungen-2014.xlsx
|
4
|
+
* Added missing dependencies for rubyXL
|
5
|
+
* Moved VERSION to separate file
|
6
|
+
* Use rubyXL for xslx files
|
7
|
+
|
8
|
+
=== 0.1.5 / 11.12.2013
|
2
9
|
|
3
10
|
* Updated tests as we no longer raise an error
|
4
11
|
* Update to spreadsheet 0.9.6
|
data/Manifest.txt
CHANGED
@@ -9,9 +9,11 @@ README.txt
|
|
9
9
|
Rakefile
|
10
10
|
bin/swissmedic-diff
|
11
11
|
lib/swissmedic-diff.rb
|
12
|
+
lib/version.rb
|
12
13
|
setup.rb
|
13
14
|
swissmedic-diff.gemspec
|
14
15
|
test/data/Packungen-2013.10.14.xls
|
16
|
+
test/data/Packungen-2014.xlsx
|
15
17
|
test/data/Packungen.older.xls
|
16
18
|
test/data/Packungen.xls
|
17
19
|
test/data/Packungen_error_column.xls
|
data/lib/swissmedic-diff.rb
CHANGED
@@ -4,6 +4,7 @@
|
|
4
4
|
|
5
5
|
require 'ostruct'
|
6
6
|
require 'spreadsheet'
|
7
|
+
require 'rubyXL'
|
7
8
|
|
8
9
|
#= diff command (compare two xls fles) for swissmedic xls file.
|
9
10
|
#
|
@@ -17,8 +18,6 @@ require 'spreadsheet'
|
|
17
18
|
#License:: GPLv2.0 Compliance
|
18
19
|
#Source:: http://scm.ywesee.com/?p=swissmedic-diff/.git;a=summary
|
19
20
|
class SwissmedicDiff
|
20
|
-
VERSION = '0.1.5'
|
21
|
-
|
22
21
|
module Diff
|
23
22
|
COLUMNS = [ :iksnr, :seqnr, :name_base, :company,
|
24
23
|
:index_therapeuticus, :atc_class, :production_science,
|
@@ -97,7 +96,11 @@ class SwissmedicDiff
|
|
97
96
|
@diff.changes = changes = {}
|
98
97
|
@diff.newest_rows = newest_rows
|
99
98
|
Spreadsheet.client_encoding = 'UTF-8'
|
100
|
-
|
99
|
+
if File.extname(target).eql?('.xlsx')
|
100
|
+
tbook = RubyXL::Parser.parse(File.expand_path(target))
|
101
|
+
else
|
102
|
+
tbook = Spreadsheet.open(target)
|
103
|
+
end
|
101
104
|
sheet = tbook.worksheet(0)
|
102
105
|
if new_column = cell(sheet.row(2), COLUMNS.size)
|
103
106
|
raise "New column #{COLUMNS.size} (#{new_column})"
|
@@ -178,7 +181,11 @@ class SwissmedicDiff
|
|
178
181
|
[known_regs, known_seqs, known_pacs, newest_rows]
|
179
182
|
end
|
180
183
|
def _known_data(latest, known_regs, known_seqs, known_pacs, newest_rows)
|
181
|
-
|
184
|
+
if File.extname(latest).eql?('.xlsx')
|
185
|
+
lbook = RubyXL::Parser.parse(File.expand_path(latest)).worksheets[0]
|
186
|
+
else
|
187
|
+
lbook = Spreadsheet.open(latest)
|
188
|
+
end
|
182
189
|
idx, prr, prp = nil
|
183
190
|
multiples = {}
|
184
191
|
each_valid_row(lbook) { |row|
|
@@ -290,11 +297,18 @@ class SwissmedicDiff
|
|
290
297
|
#return ::
|
291
298
|
def each_valid_row(spreadsheet)
|
292
299
|
skipRows = rows_to_skip(spreadsheet)
|
293
|
-
|
294
|
-
|
300
|
+
if spreadsheet.class.eql?(RubyXL::Worksheet)
|
301
|
+
worksheet = spreadsheet
|
302
|
+
else
|
303
|
+
worksheet = spreadsheet.worksheet(0)
|
304
|
+
end
|
305
|
+
row_nr = 0
|
306
|
+
worksheet.each() {
|
295
307
|
|row|
|
308
|
+
row_nr += 1
|
309
|
+
next if row_nr <= skipRows
|
296
310
|
if row.size < COLUMNS.size/2 || row.select{|val| val==nil}.size > COLUMNS.size/2
|
297
|
-
$stdout.puts "Data missing in \n(line " + (
|
311
|
+
$stdout.puts "Data missing in \n(line " + (row_nr).to_s + "): " + row.join(", ").to_s + "\n"
|
298
312
|
next
|
299
313
|
end
|
300
314
|
next if (cell(row, column(:production_science)) == 'Tierarzneimittel')
|
@@ -309,7 +323,11 @@ class SwissmedicDiff
|
|
309
323
|
# Packungen.xls of swissmedic before October 2013 had 3 leading rows
|
310
324
|
# Packungen.xls of swissmedic after October 2013 have 4 leading rows
|
311
325
|
j = 0
|
312
|
-
|
326
|
+
if spreadsheet.class.eql?(RubyXL::Worksheet)
|
327
|
+
j += 1 while spreadsheet[j][0] and spreadsheet[j][0].value.to_i == 0
|
328
|
+
else
|
329
|
+
j += 1 while spreadsheet.worksheet(0).row(j)[0].to_i == 0
|
330
|
+
end
|
313
331
|
j
|
314
332
|
end
|
315
333
|
|
data/lib/version.rb
ADDED
data/swissmedic-diff.gemspec
CHANGED
@@ -1,6 +1,8 @@
|
|
1
|
+
require File.expand_path('../lib/version', __FILE__)
|
2
|
+
|
1
3
|
spec = Gem::Specification.new do |s|
|
2
4
|
s.name = "swissmedic-diff"
|
3
|
-
s.version =
|
5
|
+
s.version = SwissmedicDiff::VERSION
|
4
6
|
s.summary = "Find out what Products have changed on the swiss healthcare market"
|
5
7
|
s.description = "Compares two Excel Documents provided by Swissmedic and displays the salient differences"
|
6
8
|
s.author = "Hannes Wyss, Masaomi Hatakeyama"
|
@@ -13,6 +15,9 @@ spec = Gem::Specification.new do |s|
|
|
13
15
|
Dir.glob('test/data/*.xls')
|
14
16
|
s.test_file = "test/test_swissmedic-diff.rb"
|
15
17
|
s.executables << 'swissmedic-diff'
|
18
|
+
s.add_dependency('rubyXL')
|
19
|
+
s.add_dependency('nokogiri')
|
20
|
+
s.add_dependency('rubyzip')
|
16
21
|
s.add_dependency('spreadsheet')
|
17
22
|
s.add_development_dependency "hoe"
|
18
23
|
s.add_development_dependency "minitest"
|
Binary file
|
@@ -6,6 +6,7 @@ $: << File.expand_path("../lib", File.dirname(__FILE__))
|
|
6
6
|
|
7
7
|
require 'minitest/autorun'
|
8
8
|
require 'swissmedic-diff'
|
9
|
+
require 'pp'
|
9
10
|
|
10
11
|
module ODDB
|
11
12
|
class SwissmedicPluginTest < Minitest::Test
|
@@ -25,27 +26,31 @@ module ODDB
|
|
25
26
|
File.dirname(__FILE__)
|
26
27
|
@workbook = Spreadsheet.open(@data)
|
27
28
|
end
|
28
|
-
|
29
|
+
# This is not a unit test as it takes way too long (> 1 minute)
|
30
|
+
# Instead it might just tell you how to test with real data
|
31
|
+
def test_diff_xls_and_xlsx
|
32
|
+
@diff = SwissmedicDiff.new
|
33
|
+
last_month = File.expand_path 'data/Packungen.xls', File.dirname(__FILE__)
|
34
|
+
this_month = File.expand_path 'data/Packungen-2014.xlsx', File.dirname(__FILE__)
|
35
|
+
result = @diff.diff last_month, this_month, [:atc_class, :sequence_date]
|
36
|
+
assert(result.changes.flatten.index('Zulassungs-Nummer') == nil, "Should not find Zulassungs-Nummer in changes")
|
37
|
+
assert(result.news.first.index('00275'), "Should find 00275 in news")
|
38
|
+
assert(result.news.first.index('00277') == nil, "Should not find 00277 in news")
|
39
|
+
assert(result.news.flatten.index('Zulassungs-Nummer') == nil, "Should not find Zulassungs-Nummer in changes")
|
40
|
+
end
|
41
|
+
|
29
42
|
# This is not a unit test as it takes way too long (> 1 minute)
|
30
43
|
# Instead it might just tell you how to test with real data
|
31
44
|
def test_real_diff
|
32
|
-
require 'pp'
|
33
45
|
@diff = SwissmedicDiff.new
|
34
46
|
last_month = File.expand_path 'data/Packungen-2013.08.16.xls', File.dirname(__FILE__)
|
35
47
|
this_month = File.expand_path 'data/Packungen-2013.11.04.xls', File.dirname(__FILE__)
|
36
48
|
result = @diff.diff last_month, this_month, [:atc_class, :sequence_date]
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
pp result.replacements.first
|
41
|
-
# assert(result.changes.flatten.index('Zulassungs-Nummer') == nil, "Should not find Zulassungs-Nummer in changes")
|
42
|
-
# assert(result.news.flatten.index('Zulassungs-Nummer') == nil, "Should not find Zulassungs-Nummer in changes")
|
43
|
-
# assert(result.news.flatten.index('00277') == nil, "Should not find 00277 in news")
|
44
|
-
pp result.news.size
|
45
|
-
pp result.updates.size
|
46
|
-
pp result.replacements.size
|
49
|
+
assert(result.changes.flatten.index('Zulassungs-Nummer') == nil, "Should not find Zulassungs-Nummer in changes")
|
50
|
+
assert(result.news.flatten.index('Zulassungs-Nummer') == nil, "Should not find Zulassungs-Nummer in changes")
|
51
|
+
assert(result.news.flatten.index('00277') == nil, "Should not find 00277 in news")
|
47
52
|
end if false
|
48
|
-
|
53
|
+
|
49
54
|
def test_iterate
|
50
55
|
diff = SwissmedicDiff.new
|
51
56
|
strings = []
|
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.1.
|
4
|
+
version: 0.1.6
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2014-01-14 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rdoc
|
@@ -76,9 +76,11 @@ files:
|
|
76
76
|
- Rakefile
|
77
77
|
- bin/swissmedic-diff
|
78
78
|
- lib/swissmedic-diff.rb
|
79
|
+
- lib/version.rb
|
79
80
|
- setup.rb
|
80
81
|
- swissmedic-diff.gemspec
|
81
82
|
- test/data/Packungen-2013.10.14.xls
|
83
|
+
- test/data/Packungen-2014.xlsx
|
82
84
|
- test/data/Packungen.older.xls
|
83
85
|
- test/data/Packungen.xls
|
84
86
|
- test/data/Packungen_error_column.xls
|