medreg 0.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.
- data/.gitignore +7 -0
- data/.travis.yml +22 -0
- data/Gemfile +11 -0
- data/History.txt +3 -0
- data/LICENSE +675 -0
- data/README.textile +22 -0
- data/Rakefile +30 -0
- data/bin/medreg +44 -0
- data/lib/medreg.rb +3 -0
- data/lib/medreg/address.rb +67 -0
- data/lib/medreg/ba_type.rb +38 -0
- data/lib/medreg/company.rb +33 -0
- data/lib/medreg/company_importer.rb +262 -0
- data/lib/medreg/medreg.rb +37 -0
- data/lib/medreg/person.rb +45 -0
- data/lib/medreg/person_importer.rb +417 -0
- data/lib/medreg/resilient_loop.rb +94 -0
- data/lib/medreg/version.rb +5 -0
- data/medreg.gemspec +28 -0
- data/test/suite.rb +11 -0
- data/test/test_company.rb +112 -0
- data/test/test_person.rb +154 -0
- data/test/test_run.rb +20 -0
- metadata +182 -0
@@ -0,0 +1,94 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# encoding: utf-8
|
3
|
+
|
4
|
+
require 'timeout'
|
5
|
+
require 'medreg'
|
6
|
+
|
7
|
+
module Medreg
|
8
|
+
#
|
9
|
+
# ResilientLoop is a helper class for running long lasting jobs like imports
|
10
|
+
# It has the following characterstics
|
11
|
+
# * Possible to restart a failed job at the failing id
|
12
|
+
# * Retry an import after a timeout (e.g. of 10 seconds)
|
13
|
+
#
|
14
|
+
# -------------
|
15
|
+
# requirements:
|
16
|
+
# -------------
|
17
|
+
# Needed is state-id (e.g. an EAN13 code) which allows to distingish whether
|
18
|
+
# a loop item was already processed or not
|
19
|
+
#
|
20
|
+
# ---------------
|
21
|
+
# implementation:
|
22
|
+
# ---------------
|
23
|
+
# the state is saved in a text file
|
24
|
+
#
|
25
|
+
ExampleUsage = %(
|
26
|
+
r_loop = ResilientLoop.new(LoopName)
|
27
|
+
loop_entries.each{
|
28
|
+
|entry|
|
29
|
+
next if r_loop.must_skip?(entry)
|
30
|
+
r_loop.try_run(entry, TimeoutValue) { /* do your work */ }
|
31
|
+
}
|
32
|
+
r_loop.finished
|
33
|
+
)
|
34
|
+
class ResilientLoop
|
35
|
+
attr_reader :state_file, :nr_skipped, :state_id
|
36
|
+
attr_writer :nr_retries
|
37
|
+
|
38
|
+
def initialize(loopname, state_id = nil)
|
39
|
+
@loopname = loopname
|
40
|
+
@state_id = state_id
|
41
|
+
@nr_skipped = 0
|
42
|
+
@nr_retries = 3
|
43
|
+
get_state
|
44
|
+
end
|
45
|
+
|
46
|
+
def must_skip?(id)
|
47
|
+
return false unless @state_id
|
48
|
+
if id
|
49
|
+
clear_state if id.to_s.eql?(@state_id.to_s)
|
50
|
+
@nr_skipped += 1
|
51
|
+
return true
|
52
|
+
else
|
53
|
+
return false
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def try_run(state, timeout_in_secs = 10, &block)
|
58
|
+
idx = 0
|
59
|
+
while idx < @nr_retries
|
60
|
+
idx += 1
|
61
|
+
begin
|
62
|
+
status = timeout(timeout_in_secs) do
|
63
|
+
block.call
|
64
|
+
save_state(state)
|
65
|
+
return
|
66
|
+
end
|
67
|
+
rescue Timeout::Error
|
68
|
+
raise Timeout::Error if @nr_retries == idx
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
def finished
|
74
|
+
clear_state
|
75
|
+
end
|
76
|
+
private
|
77
|
+
def get_state
|
78
|
+
@state_file = File.join(LOG_PATH, @loopname + '.state')
|
79
|
+
if File.exists?(@state_file)
|
80
|
+
content = IO.read(@state_file)
|
81
|
+
eval("@state_id = #{content}")
|
82
|
+
else
|
83
|
+
@state_id = nil
|
84
|
+
end
|
85
|
+
end
|
86
|
+
def save_state(state)
|
87
|
+
File.open(@state_file, 'w+') { |f| f.write(state)}
|
88
|
+
end
|
89
|
+
def clear_state
|
90
|
+
@state_id = nil
|
91
|
+
FileUtils.rm_f(@state_file)
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
data/medreg.gemspec
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'medreg/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "medreg"
|
8
|
+
spec.version = Medreg::VERSION
|
9
|
+
spec.author = "Niklaus Giger, Zeno R.R. Davatz"
|
10
|
+
spec.email = "ngiger@ywesee.com, zdavatz@ywesee.com"
|
11
|
+
spec.description = "Personen und Betriebe Adressen für die Schweiz."
|
12
|
+
spec.summary = "Helper module for ch.oddb.org"
|
13
|
+
spec.homepage = "https://github.com/zdavatz/medreg"
|
14
|
+
spec.license = "GPL-v2"
|
15
|
+
spec.files = `git ls-files -z`.split("\x0")
|
16
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
17
|
+
spec.require_paths = ["lib"]
|
18
|
+
|
19
|
+
spec.add_dependency 'mechanize'
|
20
|
+
spec.add_dependency 'rubyXL', '3.3.1'
|
21
|
+
|
22
|
+
spec.add_development_dependency "bundler"
|
23
|
+
spec.add_development_dependency "rake"
|
24
|
+
spec.add_development_dependency "flexmock"
|
25
|
+
spec.add_development_dependency "simplecov"
|
26
|
+
spec.add_development_dependency "minitest" if /^1\./.match(RUBY_VERSION)
|
27
|
+
end
|
28
|
+
|
data/test/suite.rb
ADDED
@@ -0,0 +1,112 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# encoding: utf-8
|
3
|
+
# TestCompanyPlugin -- oddb.org -- 11.05.2012 -- yasaka@ywesee.com
|
4
|
+
# TestCompanyPlugin -- oddb.org -- 23.03.2011 -- mhatakeyama@ywesee.com
|
5
|
+
|
6
|
+
$: << File.expand_path('..', File.dirname(__FILE__))
|
7
|
+
$: << File.expand_path("../../src", File.dirname(__FILE__))
|
8
|
+
|
9
|
+
gem 'minitest'
|
10
|
+
require 'minitest/autorun'
|
11
|
+
require 'flexmock'
|
12
|
+
require 'medreg/company'
|
13
|
+
require 'tempfile'
|
14
|
+
|
15
|
+
module Medreg
|
16
|
+
class TestCompanyPlugin <Minitest::Test
|
17
|
+
include FlexMock::TestCase
|
18
|
+
Test_Companies_XLSX = File.expand_path(File.join(__FILE__, '../data/companies_20141014.xlsx'))
|
19
|
+
def setup
|
20
|
+
@config = flexmock('config',
|
21
|
+
:empty_ids => nil,
|
22
|
+
:pointer => 'pointer'
|
23
|
+
)
|
24
|
+
@config = flexmock('config')
|
25
|
+
@company = flexmock('company', :pointer => 'pointer',
|
26
|
+
:ean13= => 'ean13',
|
27
|
+
:name= => 'name',
|
28
|
+
:addresses= => 'addresses',
|
29
|
+
:business_area= => 'business_area',
|
30
|
+
:odba_isolated_store => 'odba_isolated_store',
|
31
|
+
:oid => 'oid',
|
32
|
+
:narcotics= => 'narcotics',
|
33
|
+
:odba_store => 'odba_store',
|
34
|
+
)
|
35
|
+
@app = flexmock('appX',
|
36
|
+
:config => @config,
|
37
|
+
:create_company => @company,
|
38
|
+
:companies => [@company],
|
39
|
+
:company_by_gln => nil,
|
40
|
+
:company_by_origin => @company,
|
41
|
+
:update => 'update',
|
42
|
+
)
|
43
|
+
@plugin = Medreg::Company.new(@app)
|
44
|
+
flexmock(@plugin, :get_latest_file => [true, Test_Companies_XLSX])
|
45
|
+
$stderr.puts "Test_Companies_XLSX #{Test_Companies_XLSX}"
|
46
|
+
end
|
47
|
+
|
48
|
+
def test_update_7601002026444
|
49
|
+
@plugin = Medreg::Company.new(@app, [7601001396371])
|
50
|
+
flexmock(@plugin, :get_latest_file => [true, Test_Companies_XLSX])
|
51
|
+
flexmock(@plugin, :get_company_data => {})
|
52
|
+
flexmock(@plugin, :puts => nil)
|
53
|
+
startTime = Time.now
|
54
|
+
csv_file = Medreg::Companies_YAML
|
55
|
+
FileUtils.rm_f(csv_file) if File.exists?(csv_file)
|
56
|
+
created, updated, deleted, skipped = @plugin.update
|
57
|
+
diffTime = (Time.now - startTime).to_i
|
58
|
+
# $stdout.puts "result: created #{created} deleted #{deleted} skipped #{skipped} in #{diffTime} seconds"
|
59
|
+
assert_equal(1, created)
|
60
|
+
assert_equal(0, updated)
|
61
|
+
assert_equal(0, deleted)
|
62
|
+
assert_equal(0, skipped)
|
63
|
+
assert_equal(1, Medreg::Company.all_companies.size)
|
64
|
+
assert(File.exists?(csv_file), "file #{csv_file} must be created")
|
65
|
+
linden = Medreg::Company.all_companies.first
|
66
|
+
addresses = linden[:addresses]
|
67
|
+
assert_equal(1, addresses.size)
|
68
|
+
first_address = addresses.first
|
69
|
+
assert_equal(ODDB::Address2, first_address.class)
|
70
|
+
assert_equal(nil, first_address.fon)
|
71
|
+
assert_equal('5102 Rupperswil', first_address.location)
|
72
|
+
assert_equal('öffentliche Apotheke', linden[:ba_type])
|
73
|
+
assert_equal('5102', first_address.plz)
|
74
|
+
assert_equal('Rupperswil', first_address.city)
|
75
|
+
assert_equal('4', first_address.number)
|
76
|
+
assert_equal('Mitteldorf', first_address.street)
|
77
|
+
assert_equal(nil, first_address.additional_lines)
|
78
|
+
assert_equal('AB Lindenapotheke AG', first_address.name)
|
79
|
+
inhalt = IO.read(csv_file)
|
80
|
+
assert(inhalt.index('6011 Verzeichnis a/b/c BetmVV-EDI') > 0, 'must find btm')
|
81
|
+
# 7601001396371 AB Lindenapotheke AG Mitteldorf 4 5102 Rupperswil Aargau Schweiz öffentliche Apotheke 6011 Verzeichnis a/b/c BetmVV-EDI
|
82
|
+
end
|
83
|
+
def test_update_all
|
84
|
+
@plugin = Medreg::Company.new(@app)
|
85
|
+
flexmock(@plugin, :get_latest_file => [true, Test_Companies_XLSX])
|
86
|
+
flexmock(@plugin, :get_company_data => {})
|
87
|
+
flexmock(@plugin, :puts => nil)
|
88
|
+
startTime = Time.now
|
89
|
+
csv_file = Medreg::Companies_YAML
|
90
|
+
FileUtils.rm_f(csv_file) if File.exists?(csv_file)
|
91
|
+
created, updated, deleted, skipped = @plugin.update
|
92
|
+
diffTime = (Time.now - startTime).to_i
|
93
|
+
# $stdout.puts "result: created #{created} deleted #{deleted} skipped #{skipped} in #{diffTime} seconds"
|
94
|
+
assert_equal(3, created)
|
95
|
+
assert_equal(0, updated)
|
96
|
+
assert_equal(0, deleted)
|
97
|
+
assert_equal(1, skipped)
|
98
|
+
assert(File.exists?(csv_file), "file #{csv_file} must be created")
|
99
|
+
end
|
100
|
+
|
101
|
+
def test_get_latest_file
|
102
|
+
current = File.expand_path(File.join(__FILE__, "../../../data/xls/companies_#{Time.now.strftime('%Y.%m.%d')}.xlsx"))
|
103
|
+
FileUtils.rm_f(current) if File.exists?(current)
|
104
|
+
@plugin = Medreg::Company.new(@app)
|
105
|
+
res = @plugin.get_latest_file
|
106
|
+
assert(res[0], 'needs_update must be true')
|
107
|
+
assert(res[1].match(/latest/), 'filename must match latest')
|
108
|
+
assert(File.exists?(res[1]), 'companies_latest.xls must exist')
|
109
|
+
assert(File.size(Test_Companies_XLSX) <File.size(res[1]))
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
data/test/test_person.rb
ADDED
@@ -0,0 +1,154 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# encoding: utf-8
|
3
|
+
|
4
|
+
$: << File.expand_path('..', File.dirname(__FILE__))
|
5
|
+
$: << File.expand_path("../../src", File.dirname(__FILE__))
|
6
|
+
|
7
|
+
gem 'minitest'
|
8
|
+
require 'minitest/autorun'
|
9
|
+
require 'flexmock'
|
10
|
+
require 'medreg/person'
|
11
|
+
require 'tempfile'
|
12
|
+
require 'ostruct'
|
13
|
+
|
14
|
+
Minitest::Test.i_suck_and_my_tests_are_order_dependent!()
|
15
|
+
|
16
|
+
class TestPerson <Minitest::Test
|
17
|
+
include FlexMock::TestCase
|
18
|
+
RunTestTakingLong = false
|
19
|
+
Test_Personen_XLSX = File.expand_path(File.join(__FILE__, '../../data/xlsx/Personen_20141014.xlsx'))
|
20
|
+
def setup
|
21
|
+
@config = flexmock('config')
|
22
|
+
@doctor = flexmock('doctor', :pointer => 'pointer', :oid => 'oid')
|
23
|
+
@app = flexmock('app',
|
24
|
+
:config => @config,
|
25
|
+
:doctors => [@doctor],
|
26
|
+
:create_doctor => @doctor,
|
27
|
+
:doctor_by_gln => nil,
|
28
|
+
:doctor_by_origin => @doctor,
|
29
|
+
:update => 'update'
|
30
|
+
)
|
31
|
+
@plugin = Medreg::Person.new(@app)
|
32
|
+
flexmock(@plugin, :get_latest=> Test_Personen_XLSX)
|
33
|
+
end
|
34
|
+
|
35
|
+
SomeTestCases = {
|
36
|
+
7601000010735 => OpenStruct.new(:family_name => 'Cevey', :first_name => 'Philippe Marc', :authority => 'Waadt'),
|
37
|
+
7601000813282 => OpenStruct.new(:family_name => 'ABANTO PAYER', :first_name => 'Dora Carmela', :authority => 'Waadt'),
|
38
|
+
}
|
39
|
+
|
40
|
+
# Anita Hensel 7601000972620
|
41
|
+
def test_aaa_zuest # name starts with aaa we want this test to be run as first
|
42
|
+
{ 7601000254207 => OpenStruct.new(:family_name => 'Züst', :first_name => 'Peter', :authority => 'Glarus')}.each do
|
43
|
+
|gln, info|
|
44
|
+
@plugin = Medreg::Person.new(@app, [gln])
|
45
|
+
flexmock(@plugin, :get_latest_file => [ true, Test_Personen_XLSX ] )
|
46
|
+
flexmock(@plugin, :get_doctor_data => {})
|
47
|
+
assert(File.exists?(Test_Personen_XLSX))
|
48
|
+
startTime = Time.now
|
49
|
+
csv_file = ODDB::Doctors::Personen_YAML
|
50
|
+
FileUtils.rm_f(csv_file) if File.exists?(csv_file)
|
51
|
+
created, updated, deleted, skipped = @plugin.update
|
52
|
+
diffTime = (Time.now - startTime).to_i
|
53
|
+
assert_equal(0, deleted)
|
54
|
+
assert_equal(0, skipped)
|
55
|
+
assert_equal(1, created)
|
56
|
+
assert_equal(0, updated)
|
57
|
+
assert_equal(1, Medreg::Person.all_doctors.size)
|
58
|
+
zuest = Medreg::Person.all_doctors.first[1] # a hash
|
59
|
+
assert_equal(true, zuest[:may_dispense_narcotics])
|
60
|
+
assert_equal(true, zuest[:may_sell_drugs])
|
61
|
+
assert_equal(nil, zuest[:remark_sell_drugs])
|
62
|
+
assert_equal(nil, zuest[:exam])
|
63
|
+
assert_equal('Züst', zuest[:name])
|
64
|
+
assert_equal('Peter', zuest[:firstname])
|
65
|
+
assert_equal(["Allgemeine Innere Medizin, 2003, Schweiz"], zuest[:specialities])
|
66
|
+
assert_equal(3, zuest[:capabilities].size)
|
67
|
+
[ "Sportmedizin, 2004, Schweiz",
|
68
|
+
"Praxislabor, 2002, Schweiz",
|
69
|
+
"Sachkunde für dosisintensives Röntgen, 2004, Schweiz",
|
70
|
+
].each {
|
71
|
+
|cap|
|
72
|
+
assert(zuest[:capabilities].index(cap), "Muss Erfahrung #{cap} fuer Züst finden")
|
73
|
+
}
|
74
|
+
addresses = zuest[:addresses]
|
75
|
+
assert_equal(1, addresses.size)
|
76
|
+
first_address = addresses.first
|
77
|
+
assert_equal(ODDB::Address2, first_address.class)
|
78
|
+
assert_equal(1, first_address.fon.size)
|
79
|
+
assert_equal(['Bahnhofstr. 3'], first_address.additional_lines)
|
80
|
+
assert_equal('8753 Mollis', first_address.location)
|
81
|
+
assert_equal('at_praxis', first_address.type)
|
82
|
+
assert_equal('055 6122353', first_address.fon.first)
|
83
|
+
assert_equal('Praxis Dr. med. Peter Züst', first_address.name)
|
84
|
+
assert_equal('8753', first_address.plz)
|
85
|
+
assert_equal('Mollis', first_address.city)
|
86
|
+
assert_equal('Bahnhofstr.', first_address.street)
|
87
|
+
assert_equal('3', first_address.number)
|
88
|
+
end
|
89
|
+
end
|
90
|
+
def test_parse
|
91
|
+
SomeTestCases.each{
|
92
|
+
|gln, info|
|
93
|
+
info.gln = gln
|
94
|
+
root = File.expand_path(File.join(__FILE__, "../.."))
|
95
|
+
@plugin = Medreg::Person.new(@app, [gln])
|
96
|
+
html_file = "#{root}/data/html/medreg/#{gln}.html"
|
97
|
+
assert(File.exist?(html_file), "File \#{html_file} must exist")
|
98
|
+
doc_hash = @plugin.parse_details(Nokogiri::HTML(File.read(html_file)),
|
99
|
+
gln,
|
100
|
+
info,
|
101
|
+
)
|
102
|
+
assert(doc_hash.is_a?(Hash), 'doc_hash must be a Hash')
|
103
|
+
assert(doc_hash[:addresses], 'doc_hash must have addresses')
|
104
|
+
assert(doc_hash[:addresses].size > 0, 'doc_hash must have at least one address')
|
105
|
+
}
|
106
|
+
end
|
107
|
+
|
108
|
+
def test_update_single
|
109
|
+
SomeTestCases.each{
|
110
|
+
|gln, info|
|
111
|
+
@plugin = Medreg::Person.new(@app, [gln])
|
112
|
+
flexmock(@plugin, :get_latest_file => [ true, Test_Personen_XLSX ] )
|
113
|
+
flexmock(@plugin, :get_doctor_data => {})
|
114
|
+
assert(File.exists?(Test_Personen_XLSX))
|
115
|
+
startTime = Time.now
|
116
|
+
csv_file = ODDB::Doctors::Personen_YAML
|
117
|
+
FileUtils.rm_f(csv_file) if File.exists?(csv_file)
|
118
|
+
created, updated, deleted, skipped = @plugin.update
|
119
|
+
diffTime = (Time.now - startTime).to_i
|
120
|
+
assert_equal(0, deleted)
|
121
|
+
assert_equal(0, skipped)
|
122
|
+
assert_equal(1, created)
|
123
|
+
assert_equal(0, updated)
|
124
|
+
assert(File.exists?(csv_file), "file #{csv_file} must be created")
|
125
|
+
expected = "Doctors update \n\nNumber of doctors: 1\nSkipped doctors: 0\nNew doctors: 1\nUpdated doctors: 0\nDeleted doctors: 0\n"
|
126
|
+
assert_equal(expected, @plugin.report)
|
127
|
+
}
|
128
|
+
end
|
129
|
+
|
130
|
+
def test_update_some_glns
|
131
|
+
glns_ids_to_search = [7601000078261, 7601000813282, 7601000254207, 7601000186874, 7601000201522, 7601000295958,
|
132
|
+
7601000010735, 7601000268969, 7601000019080, 7601000239730 ]
|
133
|
+
@plugin = Medreg::Person.new(@app, glns_ids_to_search)
|
134
|
+
|
135
|
+
flexmock(@plugin, :get_latest_file => [ true, Test_Personen_XLSX ] )
|
136
|
+
flexmock(@plugin, :get_doctor_data => {})
|
137
|
+
assert(File.exists?(Test_Personen_XLSX))
|
138
|
+
startTime = Time.now
|
139
|
+
csv_file = ODDB::Doctors::Personen_YAML
|
140
|
+
FileUtils.rm_f(csv_file) if File.exists?(csv_file)
|
141
|
+
created, updated, deleted, skipped = @plugin.update
|
142
|
+
diffTime = (Time.now - startTime).to_i
|
143
|
+
assert_equal(0, deleted)
|
144
|
+
assert_equal(0, skipped)
|
145
|
+
assert_equal(0, updated)
|
146
|
+
assert_equal(glns_ids_to_search.size - 1 , created) # we have one gln_id mentioned twice
|
147
|
+
assert(File.exists?(csv_file), "file #{csv_file} must be created")
|
148
|
+
end if RunTestTakingLong
|
149
|
+
|
150
|
+
def test_zzz_get_latest_file # name starts with zzz we want this test to be run as last one (takes longest)
|
151
|
+
@plugin = Medreg::Person.new(@app, [7601000813282])
|
152
|
+
needs_update, latest = @plugin.get_latest_file
|
153
|
+
end if RunTestTakingLong
|
154
|
+
end
|
data/test/test_run.rb
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# TestArray -- odba -- 30.01.2007 -- hwyss@ywesee.com
|
3
|
+
|
4
|
+
$: << File.dirname(__FILE__)
|
5
|
+
$: << File.expand_path('../lib', File.dirname(__FILE__))
|
6
|
+
|
7
|
+
require 'minitest/autorun'
|
8
|
+
require 'flexmock'
|
9
|
+
require 'medreg/medreg'
|
10
|
+
|
11
|
+
module ODBA
|
12
|
+
class TestArray < Minitest::Test
|
13
|
+
include FlexMock::TestCase
|
14
|
+
def setup
|
15
|
+
end
|
16
|
+
def test_company_importer
|
17
|
+
assert Medreg.run('company')
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
metadata
ADDED
@@ -0,0 +1,182 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: medreg
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: '0.1'
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Niklaus Giger, Zeno R.R. Davatz
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2014-12-10 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: mechanize
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: rubyXL
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - '='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: 3.3.1
|
38
|
+
type: :runtime
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - '='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: 3.3.1
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: bundler
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
type: :development
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: rake
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
70
|
+
type: :development
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: flexmock
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
82
|
+
requirements:
|
83
|
+
- - ! '>='
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: '0'
|
86
|
+
type: :development
|
87
|
+
prerelease: false
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '0'
|
94
|
+
- !ruby/object:Gem::Dependency
|
95
|
+
name: simplecov
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
98
|
+
requirements:
|
99
|
+
- - ! '>='
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: '0'
|
102
|
+
type: :development
|
103
|
+
prerelease: false
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
110
|
+
- !ruby/object:Gem::Dependency
|
111
|
+
name: minitest
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
113
|
+
none: false
|
114
|
+
requirements:
|
115
|
+
- - ! '>='
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
none: false
|
122
|
+
requirements:
|
123
|
+
- - ! '>='
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '0'
|
126
|
+
description: Personen und Betriebe Adressen für die Schweiz.
|
127
|
+
email: ngiger@ywesee.com, zdavatz@ywesee.com
|
128
|
+
executables:
|
129
|
+
- medreg
|
130
|
+
extensions: []
|
131
|
+
extra_rdoc_files: []
|
132
|
+
files:
|
133
|
+
- .gitignore
|
134
|
+
- .travis.yml
|
135
|
+
- Gemfile
|
136
|
+
- History.txt
|
137
|
+
- LICENSE
|
138
|
+
- README.textile
|
139
|
+
- Rakefile
|
140
|
+
- bin/medreg
|
141
|
+
- lib/medreg.rb
|
142
|
+
- lib/medreg/address.rb
|
143
|
+
- lib/medreg/ba_type.rb
|
144
|
+
- lib/medreg/company.rb
|
145
|
+
- lib/medreg/company_importer.rb
|
146
|
+
- lib/medreg/medreg.rb
|
147
|
+
- lib/medreg/person.rb
|
148
|
+
- lib/medreg/person_importer.rb
|
149
|
+
- lib/medreg/resilient_loop.rb
|
150
|
+
- lib/medreg/version.rb
|
151
|
+
- medreg.gemspec
|
152
|
+
- test/data/companies_20141014.xlsx
|
153
|
+
- test/suite.rb
|
154
|
+
- test/test_company.rb
|
155
|
+
- test/test_person.rb
|
156
|
+
- test/test_run.rb
|
157
|
+
homepage: https://github.com/zdavatz/medreg
|
158
|
+
licenses:
|
159
|
+
- GPL-v2
|
160
|
+
post_install_message:
|
161
|
+
rdoc_options: []
|
162
|
+
require_paths:
|
163
|
+
- lib
|
164
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
165
|
+
none: false
|
166
|
+
requirements:
|
167
|
+
- - ! '>='
|
168
|
+
- !ruby/object:Gem::Version
|
169
|
+
version: '0'
|
170
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
171
|
+
none: false
|
172
|
+
requirements:
|
173
|
+
- - ! '>='
|
174
|
+
- !ruby/object:Gem::Version
|
175
|
+
version: '0'
|
176
|
+
requirements: []
|
177
|
+
rubyforge_project:
|
178
|
+
rubygems_version: 1.8.25
|
179
|
+
signing_key:
|
180
|
+
specification_version: 3
|
181
|
+
summary: Helper module for ch.oddb.org
|
182
|
+
test_files: []
|