ruian 0.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.
- checksums.yaml +7 -0
- data/.gitignore +25 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +29 -0
- data/Rakefile +2 -0
- data/example/.gitignore +15 -0
- data/example/Gemfile +28 -0
- data/example/README.md +23 -0
- data/example/Rakefile +7 -0
- data/example/app/assets/images/rails.png +0 -0
- data/example/app/assets/javascripts/application.js +13 -0
- data/example/app/assets/stylesheets/application.css +13 -0
- data/example/app/controllers/application_controller.rb +3 -0
- data/example/app/helpers/application_helper.rb +2 -0
- data/example/app/mailers/.gitkeep +0 -0
- data/example/app/models/.gitkeep +0 -0
- data/example/app/models/address.rb +5 -0
- data/example/app/models/address/city.rb +7 -0
- data/example/app/models/address/city_part.rb +7 -0
- data/example/app/models/address/county.rb +3 -0
- data/example/app/models/address/county_name_count.rb +7 -0
- data/example/app/models/address/momc_name.rb +5 -0
- data/example/app/models/address/mop_name.rb +5 -0
- data/example/app/models/address/name.rb +18 -0
- data/example/app/models/address/name_type.rb +6 -0
- data/example/app/models/address/place.rb +13 -0
- data/example/app/models/address/region.rb +3 -0
- data/example/app/models/address/region_name_count.rb +7 -0
- data/example/app/models/address/street_name.rb +5 -0
- data/example/app/views/layouts/application.html.erb +14 -0
- data/example/config.ru +4 -0
- data/example/config/application.rb +63 -0
- data/example/config/boot.rb +6 -0
- data/example/config/database.yml +25 -0
- data/example/config/environment.rb +5 -0
- data/example/config/environments/development.rb +32 -0
- data/example/config/environments/production.rb +54 -0
- data/example/config/environments/test.rb +37 -0
- data/example/config/initializers/backtrace_silencers.rb +7 -0
- data/example/config/initializers/inflections.rb +15 -0
- data/example/config/initializers/mime_types.rb +5 -0
- data/example/config/initializers/secret_token.rb +7 -0
- data/example/config/initializers/session_store.rb +8 -0
- data/example/config/initializers/wrap_parameters.rb +14 -0
- data/example/config/locales/en.yml +5 -0
- data/example/config/routes.rb +58 -0
- data/example/db/migrate/20140418190407_create_tables.rb +170 -0
- data/example/db/schema.rb +182 -0
- data/example/db/seeds.rb +7 -0
- data/example/lib/assets/.gitkeep +0 -0
- data/example/lib/importer.rb +163 -0
- data/example/lib/tasks/.gitkeep +0 -0
- data/example/lib/tasks/ruian.rake +4 -0
- data/example/log/.gitkeep +0 -0
- data/example/public/404.html +26 -0
- data/example/public/422.html +26 -0
- data/example/public/500.html +25 -0
- data/example/public/favicon.ico +0 -0
- data/example/public/index.html +241 -0
- data/example/public/robots.txt +5 -0
- data/example/script/rails +6 -0
- data/example/vendor/assets/javascripts/.gitkeep +0 -0
- data/example/vendor/assets/stylesheets/.gitkeep +0 -0
- data/example/vendor/plugins/.gitkeep +0 -0
- data/fixtures/counties.csv +92 -0
- data/fixtures/vazby-cr.csv +15072 -0
- data/fixtures/vazby-okresy-cr.csv +15072 -0
- data/lib/ruian.rb +86 -0
- data/lib/ruian/enum_updater.rb +59 -0
- data/lib/ruian/fetcher.rb +71 -0
- data/lib/ruian/files_updater.rb +54 -0
- data/lib/ruian/importer.rb +21 -0
- data/lib/ruian/model.rb +10 -0
- data/lib/ruian/model/county.rb +6 -0
- data/lib/ruian/model/county_integration.rb +6 -0
- data/lib/ruian/model/region.rb +6 -0
- data/lib/ruian/model/region_integration.rb +6 -0
- data/lib/ruian/model/row.rb +9 -0
- data/lib/ruian/parser.rb +12 -0
- data/lib/ruian/queue.rb +24 -0
- data/lib/ruian/railtie.rb +9 -0
- data/lib/ruian/tasks/ruian.rake +18 -0
- data/lib/ruian/version.rb +3 -0
- data/ruian.gemspec +26 -0
- metadata +198 -0
data/lib/ruian.rb
ADDED
@@ -0,0 +1,86 @@
|
|
1
|
+
require "ruian/version"
|
2
|
+
require 'ruby-progressbar'
|
3
|
+
require 'ruian/parser'
|
4
|
+
require 'ruian/model'
|
5
|
+
require 'ruian/queue'
|
6
|
+
require 'ruian/fetcher'
|
7
|
+
require 'ruian/files_updater'
|
8
|
+
require 'ruian/enum_updater'
|
9
|
+
require 'ruian/importer'
|
10
|
+
require 'ruian/railtie' if defined?(Rails)
|
11
|
+
require 'logger'
|
12
|
+
|
13
|
+
class Ruian
|
14
|
+
attr_accessor :queue, :fetcher, :importer
|
15
|
+
|
16
|
+
class << self
|
17
|
+
attr_accessor :logger
|
18
|
+
end
|
19
|
+
|
20
|
+
self.logger = Logger.new($stdout)
|
21
|
+
|
22
|
+
def self.load_tasks
|
23
|
+
Dir[File.join(File.dirname(__FILE__),'tasks/*.rake')].each { |f| load f }
|
24
|
+
end
|
25
|
+
|
26
|
+
def self.root
|
27
|
+
Pathname.new(File.expand_path('../', File.dirname(__FILE__)))
|
28
|
+
end
|
29
|
+
|
30
|
+
def initialize(importer = Ruian::Importer.new)
|
31
|
+
self.fetcher = Ruian::Fetcher.new
|
32
|
+
self.importer = importer
|
33
|
+
self.queue = Ruian::Queue.new(importer)
|
34
|
+
end
|
35
|
+
|
36
|
+
def fetch_rows
|
37
|
+
count = fetcher.row_files.count
|
38
|
+
bar = ProgressBar.create(total: count,
|
39
|
+
title: "Importing #{count} row files.",
|
40
|
+
format: "%a |%b>>%i| %c/%C %p%% %t")
|
41
|
+
|
42
|
+
self.fetcher.parse_rows(self.queue) { bar.increment }
|
43
|
+
end
|
44
|
+
|
45
|
+
def fetch_regions
|
46
|
+
bar = ProgressBar.create(total: 1,
|
47
|
+
title: 'Importing 1 region file.',
|
48
|
+
format: "%a |%b>>%i| %c/%C %p%% %t")
|
49
|
+
|
50
|
+
self.fetcher.parse_regions(self.queue) { bar.increment }
|
51
|
+
end
|
52
|
+
|
53
|
+
def fetch_counties
|
54
|
+
bar = ProgressBar.create(total: 1,
|
55
|
+
title: 'Importing 1 county file.',
|
56
|
+
format: "%a |%b>>%i| %c/%C %p%% %t")
|
57
|
+
|
58
|
+
self.fetcher.parse_counties(self.queue) { bar.increment }
|
59
|
+
end
|
60
|
+
|
61
|
+
def fetch_integrate_counties
|
62
|
+
bar = ProgressBar.create(total: 1,
|
63
|
+
title: 'Importing 1 county integration file.',
|
64
|
+
format: "%a |%b>>%i| %c/%C %p%% %t")
|
65
|
+
|
66
|
+
self.fetcher.parse_counties_integration(self.queue) { bar.increment }
|
67
|
+
end
|
68
|
+
|
69
|
+
def fetch_integrate_regions
|
70
|
+
bar = ProgressBar.create(total: 1,
|
71
|
+
title: 'Importing 1 region integration file.',
|
72
|
+
format: "%a |%b>>%i| %c/%C %p%% %t")
|
73
|
+
|
74
|
+
self.fetcher.parse_regions_integration(self.queue) { bar.increment }
|
75
|
+
end
|
76
|
+
|
77
|
+
def all
|
78
|
+
fetch_rows
|
79
|
+
fetch_regions
|
80
|
+
fetch_counties
|
81
|
+
fetch_integrate_counties
|
82
|
+
fetch_integrate_regions
|
83
|
+
self.importer.finalize!
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
@@ -0,0 +1,59 @@
|
|
1
|
+
require 'open-uri'
|
2
|
+
require 'fileutils'
|
3
|
+
require 'zip'
|
4
|
+
|
5
|
+
class Ruian
|
6
|
+
class EnumUpdater
|
7
|
+
URL = "http://vdp.cuzk.cz/vymenny_format/csv/20140331_strukt_ADR.csv.zip"
|
8
|
+
|
9
|
+
def update!
|
10
|
+
download
|
11
|
+
remove_old
|
12
|
+
unpack
|
13
|
+
remove_temp
|
14
|
+
end
|
15
|
+
|
16
|
+
def download
|
17
|
+
File.open(filepath, "wb") do |file|
|
18
|
+
open(URL) do |url|
|
19
|
+
file.write(url.read)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def unpack
|
25
|
+
Zip::File.open(filepath) do |zip_file|
|
26
|
+
zip_file.each do |entry|
|
27
|
+
name = File.basename(entry.name)
|
28
|
+
if needed.include?(name)
|
29
|
+
fullpath = fixtures_directory.join(name)
|
30
|
+
entry.extract(fullpath)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def remove_old
|
37
|
+
first = fixtures_directory.join(needed.first)
|
38
|
+
last = fixtures_directory.join(needed.last)
|
39
|
+
FileUtils.rm(first) if File.exists?(first)
|
40
|
+
FileUtils.rm(last) if File.exists?(last)
|
41
|
+
end
|
42
|
+
|
43
|
+
def remove_temp
|
44
|
+
FileUtils.rm(filepath)
|
45
|
+
end
|
46
|
+
|
47
|
+
def fixtures_directory
|
48
|
+
Ruian.root.join('fixtures')
|
49
|
+
end
|
50
|
+
|
51
|
+
def filepath
|
52
|
+
Ruian.root.join('fixtures', 'enum.zip')
|
53
|
+
end
|
54
|
+
|
55
|
+
def needed
|
56
|
+
['vazby-cr.csv', 'vazby-okresy-cr.csv']
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
class Ruian
|
2
|
+
class Fetcher
|
3
|
+
|
4
|
+
def parse_rows(queue, &block)
|
5
|
+
row_files.each do |file|
|
6
|
+
Ruian::Parser.foreach(file) do |attributes|
|
7
|
+
attributes = attributes.collect(&:last)
|
8
|
+
model = Ruian::Model::Row.new(*attributes)
|
9
|
+
queue.push(model)
|
10
|
+
end
|
11
|
+
yield
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def parse_regions(queue, &block)
|
16
|
+
Ruian::Parser.foreach(region_file, encoding: 'utf-8') do |attributes|
|
17
|
+
attributes = attributes.collect(&:last)
|
18
|
+
model = Ruian::Model::Region.new(*attributes)
|
19
|
+
queue.push(model)
|
20
|
+
end
|
21
|
+
yield
|
22
|
+
end
|
23
|
+
|
24
|
+
def parse_counties(queue, &block)
|
25
|
+
Ruian::Parser.foreach(county_file, encoding: 'utf-8') do |attributes|
|
26
|
+
attributes = attributes.collect(&:last)
|
27
|
+
model = Ruian::Model::County.new(*attributes)
|
28
|
+
queue.push(model)
|
29
|
+
end
|
30
|
+
yield
|
31
|
+
end
|
32
|
+
|
33
|
+
def parse_counties_integration(queue, &block)
|
34
|
+
Ruian::Parser.foreach(county_integration_file) do |attributes|
|
35
|
+
attributes = attributes.collect(&:last)
|
36
|
+
model = Ruian::Model::CountyIntegration.new(*attributes)
|
37
|
+
queue.push(model)
|
38
|
+
end
|
39
|
+
yield
|
40
|
+
end
|
41
|
+
|
42
|
+
def parse_regions_integration(queue, &block)
|
43
|
+
Ruian::Parser.foreach(region_integration_file) do |attributes|
|
44
|
+
attributes = attributes.collect(&:last)
|
45
|
+
model = Ruian::Model::RegionIntegration.new(*attributes)
|
46
|
+
queue.push(model)
|
47
|
+
end
|
48
|
+
yield
|
49
|
+
end
|
50
|
+
|
51
|
+
def row_files
|
52
|
+
@files ||= Dir.glob(Ruian.root.join('fixtures/CSV', '*.csv'))
|
53
|
+
end
|
54
|
+
|
55
|
+
def region_file
|
56
|
+
@region_file = Ruian.root.join('fixtures', 'regions.csv')
|
57
|
+
end
|
58
|
+
|
59
|
+
def county_file
|
60
|
+
@county_file = Ruian.root.join('fixtures', 'counties.csv')
|
61
|
+
end
|
62
|
+
|
63
|
+
def county_integration_file
|
64
|
+
@count_integration_file = Ruian.root.join('fixtures', 'vazby-okresy-cr.csv')
|
65
|
+
end
|
66
|
+
|
67
|
+
def region_integration_file
|
68
|
+
@city_integration_file = Ruian.root.join('fixtures', 'vazby-cr.csv')
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
require 'open-uri'
|
2
|
+
require 'fileutils'
|
3
|
+
require 'zip'
|
4
|
+
|
5
|
+
class Ruian
|
6
|
+
class FilesUpdater
|
7
|
+
URL = "http://vdp.cuzk.cz/vymenny_format/csv/20140331_OB_ADR_csv.zip"
|
8
|
+
|
9
|
+
def update!
|
10
|
+
download
|
11
|
+
remove_old
|
12
|
+
unpack
|
13
|
+
remove_temp
|
14
|
+
end
|
15
|
+
|
16
|
+
def download
|
17
|
+
File.open(filepath, "wb") do |file|
|
18
|
+
open(URL) do |url|
|
19
|
+
file.write(url.read)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def unpack
|
25
|
+
Zip::File.open(filepath) do |zip_file|
|
26
|
+
zip_file.each do |entry|
|
27
|
+
fullpath = fixtures_directory.join(entry.name)
|
28
|
+
FileUtils.mkdir_p(File.dirname(fullpath))
|
29
|
+
entry.extract(fullpath)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def remove_temp
|
35
|
+
FileUtils.rm(filepath)
|
36
|
+
end
|
37
|
+
|
38
|
+
def remove_old
|
39
|
+
FileUtils.rm_rf(csv_directory)
|
40
|
+
end
|
41
|
+
|
42
|
+
def fixtures_directory
|
43
|
+
Ruian.root.join('fixtures')
|
44
|
+
end
|
45
|
+
|
46
|
+
def csv_directory
|
47
|
+
Ruian.root.join('fixtures', 'CSV')
|
48
|
+
end
|
49
|
+
|
50
|
+
def filepath
|
51
|
+
Ruian.root.join('fixtures', 'csv.zip')
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
class Ruian
|
2
|
+
class Importer
|
3
|
+
def import_row(row)
|
4
|
+
end
|
5
|
+
|
6
|
+
def import_region(region)
|
7
|
+
end
|
8
|
+
|
9
|
+
def import_county(county)
|
10
|
+
end
|
11
|
+
|
12
|
+
def import_countyintegration(county_integration)
|
13
|
+
end
|
14
|
+
|
15
|
+
def import_regionintegration(region_integration)
|
16
|
+
end
|
17
|
+
|
18
|
+
def finalize!
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
data/lib/ruian/model.rb
ADDED
data/lib/ruian/parser.rb
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
require 'csv'
|
2
|
+
|
3
|
+
class Ruian
|
4
|
+
class Parser < CSV
|
5
|
+
CSV_OPTIONS = { :encoding => 'windows-1250', :col_sep => ';', :quote_char => '"', :headers => true }
|
6
|
+
|
7
|
+
def self.foreach(path, options = Hash.new, &block)
|
8
|
+
options = Ruian::Parser::CSV_OPTIONS.merge(options)
|
9
|
+
super
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
data/lib/ruian/queue.rb
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
# not a really queue
|
2
|
+
|
3
|
+
class Ruian
|
4
|
+
class Queue
|
5
|
+
attr_accessor :importer
|
6
|
+
|
7
|
+
def initialize(importer)
|
8
|
+
self.importer = importer
|
9
|
+
end
|
10
|
+
|
11
|
+
def push(obj)
|
12
|
+
key = obj.class.to_s.split('::').last.downcase
|
13
|
+
callback(key, obj)
|
14
|
+
end
|
15
|
+
|
16
|
+
def callback(key, obj)
|
17
|
+
self.importer.send(callback_key(key), obj)
|
18
|
+
end
|
19
|
+
|
20
|
+
def callback_key(key)
|
21
|
+
"import_#{key}"
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'ruian'
|
2
|
+
|
3
|
+
namespace :ruian do
|
4
|
+
desc "Update address files"
|
5
|
+
task :update_files do
|
6
|
+
updater = Ruian::FilesUpdater.new
|
7
|
+
updater.update!
|
8
|
+
end
|
9
|
+
|
10
|
+
desc "Update counties and regions files"
|
11
|
+
task :update_enums do
|
12
|
+
updater = Ruian::EnumUpdater.new
|
13
|
+
updater.update!
|
14
|
+
end
|
15
|
+
|
16
|
+
desc "Update all files"
|
17
|
+
task :update_all => [:update_files, :update_enums]
|
18
|
+
end
|
data/ruian.gemspec
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'ruian/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "ruian"
|
8
|
+
spec.version = Ruian::VERSION
|
9
|
+
spec.authors = ["Josef Šimánek"]
|
10
|
+
spec.email = ["josef.simanek@gmail.com"]
|
11
|
+
spec.summary = %q{RUIAN}
|
12
|
+
spec.homepage = ""
|
13
|
+
spec.license = "MIT"
|
14
|
+
|
15
|
+
spec.files = `git ls-files -z`.split("\x0")
|
16
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
17
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
18
|
+
spec.require_paths = ["lib"]
|
19
|
+
|
20
|
+
spec.add_dependency 'ruby-progressbar'
|
21
|
+
spec.add_dependency 'rubyzip'
|
22
|
+
|
23
|
+
spec.add_development_dependency "bundler", "~> 1.6"
|
24
|
+
spec.add_development_dependency "rake"
|
25
|
+
spec.add_development_dependency "rspec"
|
26
|
+
end
|