geo_master_jp 0.1.25

Sign up to get free protection for your applications and to get access to all the features.
Files changed (38) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +52 -0
  4. data/Rakefile +27 -0
  5. data/lib/generators/geo_master_jp/data/company20180424.csv.zip +0 -0
  6. data/lib/generators/geo_master_jp/data/join20190405.csv.zip +0 -0
  7. data/lib/generators/geo_master_jp/data/line20190405free.csv.zip +0 -0
  8. data/lib/generators/geo_master_jp/data/prefectures.yml +329 -0
  9. data/lib/generators/geo_master_jp/data/station20190405free.csv.zip +0 -0
  10. data/lib/generators/geo_master_jp/install_area_data_generator.rb +128 -0
  11. data/lib/generators/geo_master_jp/install_generator.rb +18 -0
  12. data/lib/generators/geo_master_jp/install_migration_generator.rb +51 -0
  13. data/lib/generators/geo_master_jp/install_railway_data_generator.rb +201 -0
  14. data/lib/generators/geo_master_jp/templates/create_cities.rb.erb +16 -0
  15. data/lib/generators/geo_master_jp/templates/create_lines.rb.erb +23 -0
  16. data/lib/generators/geo_master_jp/templates/create_prefectures.rb.erb +13 -0
  17. data/lib/generators/geo_master_jp/templates/create_railway_companies.rb.erb +18 -0
  18. data/lib/generators/geo_master_jp/templates/create_station_connections.rb.erb +14 -0
  19. data/lib/generators/geo_master_jp/templates/create_stations.rb.erb +27 -0
  20. data/lib/generators/geo_master_jp/templates/create_towns.rb.erb +19 -0
  21. data/lib/generators/geo_master_jp/templates/create_versions.rb.erb +10 -0
  22. data/lib/generators/geo_master_jp/templates/geo_master_jp.rb +15 -0
  23. data/lib/geo_master_jp/association_helper.rb +13 -0
  24. data/lib/geo_master_jp/config.rb +15 -0
  25. data/lib/geo_master_jp/engine.rb +27 -0
  26. data/lib/geo_master_jp/models/city.rb +21 -0
  27. data/lib/geo_master_jp/models/line.rb +21 -0
  28. data/lib/geo_master_jp/models/prefecture.rb +21 -0
  29. data/lib/geo_master_jp/models/railway_company.rb +19 -0
  30. data/lib/geo_master_jp/models/station.rb +22 -0
  31. data/lib/geo_master_jp/models/station_connection.rb +17 -0
  32. data/lib/geo_master_jp/models/town.rb +21 -0
  33. data/lib/geo_master_jp/models/version.rb +16 -0
  34. data/lib/geo_master_jp/railtie.rb +4 -0
  35. data/lib/geo_master_jp/version.rb +3 -0
  36. data/lib/geo_master_jp.rb +9 -0
  37. data/lib/tasks/geo_master_jp_tasks.rake +4 -0
  38. metadata +149 -0
@@ -0,0 +1,201 @@
1
+ require 'zip'
2
+ require 'open-uri'
3
+ require 'yaml'
4
+
5
+ module GeoMasterJp
6
+ module Generators
7
+ class InstallRailwayDataGenerator < Rails::Generators::Base
8
+ RAILWAY_COMPANY_VERSION = '20180424'
9
+ LINE_VERSION = '20190405'
10
+ STATION_VERSION = '20190405'
11
+ STATION_CONNECTION_VERSION = '20190405'
12
+
13
+ source_root File.expand_path('templates', __dir__)
14
+
15
+ desc "Download and insert railway data to your application databases."
16
+
17
+ def set_railway_companies
18
+ if GeoMasterJp::Version.last_version(GeoMasterJp::RailwayCompany).present? && GeoMasterJp::Version.last_version(GeoMasterJp::RailwayCompany) >= Date.parse(RAILWAY_COMPANY_VERSION)
19
+ puts "RailwayCompany is already latest version and skip."
20
+ return
21
+ end
22
+
23
+ csv_data = get_railway_data("company#{RAILWAY_COMPANY_VERSION}.csv")
24
+ csv_data.each do |row|
25
+ railway_company = GeoMasterJp::RailwayCompany.find_by(code: format('%03d', row[0].to_i)) || GeoMasterJp::RailwayCompany.new
26
+ railway_company = set_railway_company(railway_company, row)
27
+ railway_company.save
28
+ end
29
+
30
+ GeoMasterJp::Version.create!(model_name_string: GeoMasterJp::RailwayCompany.to_s, version: Date.parse(RAILWAY_COMPANY_VERSION))
31
+
32
+ print "\n"
33
+ puts "Set RailwayCompany is complete."
34
+ end
35
+
36
+ def set_lines
37
+ if GeoMasterJp::Version.last_version(GeoMasterJp::Line).present? && GeoMasterJp::Version.last_version(GeoMasterJp::Line) >= Date.parse(LINE_VERSION)
38
+ puts "Line is already latest version and skip."
39
+ return
40
+ end
41
+
42
+ csv_data = get_railway_data("line#{LINE_VERSION}free.csv")
43
+ csv_data_each_railway_company_code = csv_data.group_by{|row| format('%03d', row[1].to_i)}
44
+ csv_data_each_railway_company_code.each_with_index do |(railway_company_code, rows), idx|
45
+ print "Setting Line ...#{idx+1}/#{csv_data_each_railway_company_code.count}\r"
46
+
47
+ railway_company = GeoMasterJp::RailwayCompany.find_by(code: railway_company_code)
48
+ rows.each do |row|
49
+ line = GeoMasterJp::Line.find_by(code: format('%05d', row[0].to_i)) || railway_company.lines.build
50
+ line = set_line(line, row)
51
+ line.save
52
+ end
53
+ end
54
+
55
+ GeoMasterJp::Version.create!(model_name_string: GeoMasterJp::Line.to_s, version: Date.parse(LINE_VERSION))
56
+
57
+ print "\n"
58
+ puts "Set Line is complete."
59
+ end
60
+
61
+ def set_stations
62
+ if GeoMasterJp::Version.last_version(GeoMasterJp::Station).present? && GeoMasterJp::Version.last_version(GeoMasterJp::Station) >= Date.parse(STATION_VERSION)
63
+ puts "Station is already latest version and skip."
64
+ return
65
+ end
66
+
67
+ csv_data = get_railway_data("station#{STATION_VERSION}free.csv")
68
+ csv_data_each_line_code = csv_data.group_by{|row| format('%05d', row[5].to_i)}
69
+ csv_data_each_line_code.each_with_index do |(line_code, rows), idx|
70
+ print "Setting Station ...#{idx+1}/#{csv_data_each_line_code.count}\r"
71
+
72
+ line = GeoMasterJp::Line.find_by(code: line_code)
73
+ rows.each do |row|
74
+ station = GeoMasterJp::Station.find_by(code: format('%07d', row[0].to_i)) || line.stations.build
75
+ station = set_station(station, row)
76
+ station.save
77
+ end
78
+ end
79
+
80
+ GeoMasterJp::Version.create!(model_name_string: GeoMasterJp::Station.to_s, version: Date.parse(STATION_VERSION))
81
+
82
+ print "\n"
83
+ puts "Set Station is complete."
84
+ end
85
+
86
+ def set_station_connections
87
+ if GeoMasterJp::Version.last_version(GeoMasterJp::StationConnection).present? && GeoMasterJp::Version.last_version(GeoMasterJp::StationConnection) >= Date.parse(STATION_CONNECTION_VERSION)
88
+ puts "StationConnection is already latest version and skip."
89
+ return
90
+ end
91
+
92
+ csv_data = get_railway_data("join#{STATION_CONNECTION_VERSION}.csv")
93
+
94
+ csv_data_each_line_code = csv_data.group_by{|row| format('%05d', row[0].to_i)}
95
+ csv_data_each_line_code.each_with_index do |(line_code, rows), idx|
96
+ print "Setting StationConnection ...#{idx+1}/#{csv_data_each_line_code.count}\r"
97
+
98
+ line = GeoMasterJp::Line.find_by(code: line_code)
99
+ rows.each do |row|
100
+ station_1 = GeoMasterJp::Station.find_by(code: format('%07d', row[1].to_i))
101
+ station_2 = GeoMasterJp::Station.find_by(code: format('%07d', row[2].to_i))
102
+
103
+ next if station_1.blank? || station_2.blank?
104
+
105
+ station_connection = GeoMasterJp::StationConnection.new
106
+ station_connection.line = line
107
+ station_connection.station_1 = station_1
108
+ station_connection.station_2 = station_2
109
+
110
+ station_connection.save
111
+ end
112
+ end
113
+
114
+ GeoMasterJp::Version.create!(model_name_string: GeoMasterJp::StationConnection.to_s, version: Date.parse(STATION_CONNECTION_VERSION))
115
+
116
+ print "\n"
117
+ puts "Set StationConnection is complete."
118
+ end
119
+
120
+ private
121
+
122
+ def set_railway_company(railway_company, row)
123
+ company_types = {
124
+ '0' => 'その他',
125
+ '1' => 'JR',
126
+ '2' => '大手私鉄',
127
+ '3' => '準大手私鉄'
128
+ }
129
+
130
+ railway_company.status = row[8].to_i
131
+ railway_company.company_type = company_types[row[7]]
132
+ railway_company.code = format('%03d', row[0].to_i)
133
+ railway_company.group_code = row[1]
134
+ railway_company.name = row[2]
135
+ railway_company.name_kana = row[3]
136
+ railway_company.name_full = row[4]
137
+ railway_company.name_short = row[5]
138
+ railway_company.url = row[6]
139
+ railway_company.sort_order = row[9].to_i
140
+
141
+ railway_company
142
+ end
143
+
144
+ def set_line(line, row)
145
+ line.status = row[11].to_i
146
+ line.code = format('%05d', row[0].to_i)
147
+ line.name = row[2]
148
+ line.name_kana = row[3]
149
+ line.name_full = row[4]
150
+ line.longitude = row[8]
151
+ line.latitude = row[9]
152
+ line.sort_order = row[12].to_i
153
+
154
+ line
155
+ end
156
+
157
+ def set_station(station, row)
158
+ station.geo_master_jp_prefecture_code = format('%02d', row[6].to_i)
159
+
160
+ station.status = row[13].to_i
161
+ station.code = format('%07d', row[0].to_i)
162
+ station.group_code = format('%07d', row[1].to_i)
163
+ station.name = row[2]
164
+ station.zip_code = row[7].gsub('-', '')
165
+ station.address = row[8].gsub('-', '')
166
+ station.longitude = row[9]
167
+ station.latitude = row[10]
168
+ station.open_date = Date.parse(row[11]) if row[11].present?
169
+ station.close_date = Date.parse(row[12]) if row[12].present?
170
+ station.sort_order = row[14].to_i
171
+
172
+ station
173
+ end
174
+
175
+ def get_railway_companies_csv_data
176
+ file_path = "#{__dir__}/data/company20180424.csv.zip"
177
+ csv_data = nil
178
+ open(file_path) do |file|
179
+ Zip::File.open_buffer(file.read) do |zip|
180
+ entry = zip.glob('company20180424.csv').first
181
+ csv_data = entry.get_input_stream.read
182
+ end
183
+ end
184
+ csv_data.force_encoding('UTF-8').split(/\n/).map{|row| row.split(',')}[1..-1]
185
+ end
186
+
187
+ def get_railway_data(file_name)
188
+ file_path = "#{__dir__}/data/#{file_name}.zip"
189
+ csv_data = nil
190
+ open(file_path) do |file|
191
+ Zip::File.open_buffer(file.read) do |zip|
192
+ entry = zip.glob(file_name).first
193
+ csv_data = entry.get_input_stream.read
194
+ end
195
+ end
196
+ csv_data.force_encoding('UTF-8').split(/\n/).map{|row| row.split(',')}[1..-1]
197
+ end
198
+
199
+ end
200
+ end
201
+ end
@@ -0,0 +1,16 @@
1
+ class CreateCities < ActiveRecord::Migration<%= migration_version %>
2
+ def change
3
+ create_table :geo_master_jp_cities do |t|
4
+ t.string :geo_master_jp_prefecture_code, null: false, index: true, foreign_key: true
5
+
6
+ t.datetime :deleted_at, index: true
7
+ t.string :code, null: false, index: true
8
+ t.string :name, null: false, index: true
9
+ t.string :name_kana, null: false, index: true
10
+ t.string :name_alphabet, null: false, index: true
11
+
12
+ t.timestamps index: true
13
+ end
14
+ add_foreign_key :geo_master_jp_cities, :geo_master_jp_prefectures, column: :geo_master_jp_prefecture_code, primary_key: :code
15
+ end
16
+ end
@@ -0,0 +1,23 @@
1
+ class CreateLines < ActiveRecord::Migration<%= migration_version %>
2
+ def change
3
+ create_table :geo_master_jp_lines do |t|
4
+ t.string :geo_master_jp_railway_company_code, null: false, index: true, foreign_key: true
5
+
6
+ t.string :status, null: false, index: true
7
+ # t.integer :type, null: false, index: true
8
+ t.string :code, null: false, index: true
9
+ t.string :name, null: false, index: true
10
+ t.string :name_kana, null: false, index: true
11
+ t.string :name_full, null: false, index: true
12
+ # t.string :color_code, null: false, index: true
13
+ # t.string :color_name, null: false, index: true
14
+ t.float :longitude, null: false, index: true
15
+ t.float :latitude, null: false, index: true
16
+
17
+ t.integer :sort_order, null: false, index: true
18
+
19
+ t.timestamps index: true
20
+ end
21
+ add_foreign_key :geo_master_jp_lines, :geo_master_jp_railway_companies, column: :geo_master_jp_railway_company_code, primary_key: :code
22
+ end
23
+ end
@@ -0,0 +1,13 @@
1
+ class CreatePrefectures < ActiveRecord::Migration<%= migration_version %>
2
+ def change
3
+ create_table :geo_master_jp_prefectures do |t|
4
+ t.string :code, index: true, null: false
5
+ t.string :name, index: true, null: false
6
+ t.string :name_kana, index: true, null: false
7
+ t.string :name_alphabet, index: true, null: false
8
+ t.string :short_name, index: true, null: false
9
+
10
+ t.timestamps index: true
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,18 @@
1
+ class CreateRailwayCompanies < ActiveRecord::Migration<%= migration_version %>
2
+ def change
3
+ create_table :geo_master_jp_railway_companies do |t|
4
+ t.integer :status, null: false, index: true
5
+ t.string :company_type, null: false, index: true
6
+ t.string :code, null: false, index: true
7
+ t.string :group_code, null: false, index: true
8
+ t.string :name, null: false, index: true
9
+ t.string :name_kana, null: false, index: true
10
+ t.string :name_full, null: false, index: true
11
+ t.string :name_short, null: false, index: true
12
+ t.string :url, index: true
13
+ t.integer :sort_order, null: false, index: true
14
+
15
+ t.timestamps index: true
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,14 @@
1
+ class CreateStationConnections < ActiveRecord::Migration<%= migration_version %>
2
+ def change
3
+ create_table :geo_master_jp_station_connections do |t|
4
+ t.string :geo_master_jp_line_code, null: false, index: {name: :index_geo_master_jp_station_connections_on_line_code}, foreign_key: true
5
+ t.string :geo_master_jp_station_1_code, null: false, index: {name: :index_geo_master_jp_station_connections_on_station_1_code}, foreign_key: {to_table: :geo_master_jp_stations}
6
+ t.string :geo_master_jp_station_2_code, null: false, index: {name: :index_geo_master_jp_station_connections_on_station_2_code}, foreign_key: {to_table: :geo_master_jp_stations}
7
+
8
+ t.timestamps index: true
9
+ end
10
+ add_foreign_key :geo_master_jp_station_connections, :geo_master_jp_lines, column: :geo_master_jp_line_code, primary_key: :code
11
+ add_foreign_key :geo_master_jp_station_connections, :geo_master_jp_stations, column: :geo_master_jp_station_1_code, primary_key: :code
12
+ add_foreign_key :geo_master_jp_station_connections, :geo_master_jp_stations, column: :geo_master_jp_station_2_code, primary_key: :code
13
+ end
14
+ end
@@ -0,0 +1,27 @@
1
+ class CreateStations < ActiveRecord::Migration<%= migration_version %>
2
+ def change
3
+ create_table :geo_master_jp_stations do |t|
4
+ t.string :geo_master_jp_line_code, null: false, index: true, foreign_key: true
5
+ t.string :geo_master_jp_prefecture_code, null: false, index: true, foreign_key: true
6
+
7
+ t.string :status, null: false, index: true
8
+ t.string :code, null: false, index: true
9
+ t.string :group_code, null: false, index: true
10
+ t.string :name, null: false, index: true
11
+ # t.string :name_kana, null: false, index: true
12
+ # t.string :name_full, null: false, index: true
13
+ t.string :zip_code, null: false, index: true
14
+ t.string :address, null: false, index: true
15
+ t.float :longitude, null: false, index: true
16
+ t.float :latitude, null: false, index: true
17
+ t.date :open_date, index: true
18
+ t.date :close_date, index: true
19
+
20
+ t.integer :sort_order, null: false, index: true
21
+
22
+ t.timestamps index: true
23
+ end
24
+ add_foreign_key :geo_master_jp_stations, :geo_master_jp_lines, column: :geo_master_jp_line_code, primary_key: :code
25
+ add_foreign_key :geo_master_jp_stations, :geo_master_jp_prefectures, column: :geo_master_jp_prefecture_code, primary_key: :code
26
+ end
27
+ end
@@ -0,0 +1,19 @@
1
+ class CreateTowns < ActiveRecord::Migration<%= migration_version %>
2
+ def change
3
+ create_table :geo_master_jp_towns do |t|
4
+ t.string :geo_master_jp_prefecture_code, null: false, index: true, foreign_key: true
5
+ t.string :geo_master_jp_city_code, null: false, index: true, foreign_key: true
6
+
7
+ t.datetime :deleted_at, index: true
8
+ t.string :zip_code, null: false, index: true
9
+ t.string :code, null: false, index: true
10
+ t.string :name, null: false, index: true
11
+ t.string :name_kana, null: false, index: true
12
+ t.string :name_alphabet, null: false, index: true
13
+
14
+ t.timestamps index: true
15
+ end
16
+ add_foreign_key :geo_master_jp_towns, :geo_master_jp_prefectures, column: :geo_master_jp_prefecture_code, primary_key: :code
17
+ add_foreign_key :geo_master_jp_towns, :geo_master_jp_cities, column: :geo_master_jp_city_code, primary_key: :code
18
+ end
19
+ end
@@ -0,0 +1,10 @@
1
+ class CreateVersions < ActiveRecord::Migration<%= migration_version %>
2
+ def change
3
+ create_table :geo_master_jp_versions do |t|
4
+ t.string :model_name_string, null: false, index: true
5
+ t.date :version, null: false, index: true
6
+
7
+ t.timestamps index: true
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,15 @@
1
+ GeoMasterJp.configure do |config|
2
+ # Alternative Class Names
3
+ # config.alternative_class_names = {
4
+ # prefecture: 'Prefecture',
5
+ # city: 'City',
6
+ # town: 'Town',
7
+ # railway_company: 'RailwayCompany',
8
+ # line: 'line',
9
+ # station: 'Station',
10
+ # station_connection: 'StationConnection'
11
+ # }
12
+
13
+ # Use Models
14
+ # config.use_models = [:area, :railway]
15
+ end
@@ -0,0 +1,13 @@
1
+ module GeoMasterJp
2
+ module AssociationHelper
3
+ extend ActiveSupport::Concern
4
+
5
+ class_methods do
6
+ def has_one_geo_master(key)
7
+ klass_name = GeoMasterJp.config.alternative_class_name(key)
8
+ belongs_to key, class_name: klass_name, foreign_key: :"geo_master_jp_#{key}_code", primary_key: :code
9
+ end
10
+ alias_method :belongs_to_geo_master, :has_one_geo_master
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,15 @@
1
+ module GeoMasterJp
2
+ class Config
3
+ # Variables detail is writen in lib/generators/templates/geo_master_jp.rb.
4
+ attr_accessor :alternative_class_names, :use_models
5
+
6
+ def initialize
7
+ @alternative_class_names = {}
8
+ @use_models = [:area, :railway]
9
+ end
10
+
11
+ def alternative_class_name(key)
12
+ @alternative_class_names[key] || "GeoMasterJp::#{key.to_s.camelize}"
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,27 @@
1
+ require 'geo_master_jp/config'
2
+ module GeoMasterJp
3
+ def self.config
4
+ @config ||= GeoMasterJp::Config.new
5
+ end
6
+
7
+ def self.configure(&block)
8
+ yield(config) if block_given?
9
+ end
10
+ end
11
+
12
+ if GeoMasterJp.config.use_models.include?(:area)
13
+ require 'geo_master_jp/models/prefecture'
14
+ require 'geo_master_jp/models/city'
15
+ require 'geo_master_jp/models/town'
16
+ end
17
+ if GeoMasterJp.config.use_models.include?(:railway)
18
+ require 'geo_master_jp/models/railway_company'
19
+ require 'geo_master_jp/models/line'
20
+ require 'geo_master_jp/models/station'
21
+ require 'geo_master_jp/models/station_connection'
22
+ end
23
+ require 'geo_master_jp/models/version'
24
+
25
+ require 'active_record'
26
+ require 'activerecord-import'
27
+
@@ -0,0 +1,21 @@
1
+ module GeoMasterJp
2
+ class City < ActiveRecord::Base
3
+ self.table_name = 'geo_master_jp_cities'
4
+
5
+ belongs_to :prefecture, class_name: 'GeoMasterJp::Prefecture', foreign_key: :geo_master_jp_prefecture_code, primary_key: :code
6
+ has_many :towns, class_name: 'GeoMasterJp::Town', foreign_key: :geo_master_jp_city_code, primary_key: :code
7
+
8
+ def head_kana
9
+ return '' if self.name_kana.blank?
10
+ head_kanas = ['ア', 'カ', 'サ', 'タ', 'ナ', 'ハ', 'マ', 'ヤ', 'ラ', 'ワ']
11
+ head_kanas[head_kanas.index{|i| i > self.name_kana[0] }.to_i - 1]
12
+ end
13
+
14
+ def self.inherited(child)
15
+ child.belongs_to :prefecture, class_name: GeoMasterJp.config.alternative_class_name(:prefecture), foreign_key: :geo_master_jp_prefecture_code, primary_key: :code
16
+ child.has_many :towns, class_name: GeoMasterJp.config.alternative_class_name(:town), foreign_key: :geo_master_jp_city_code, primary_key: :code
17
+
18
+ super
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,21 @@
1
+ module GeoMasterJp
2
+ class Line < ActiveRecord::Base
3
+ self.table_name = 'geo_master_jp_lines'
4
+
5
+ belongs_to :railway_company, class_name: 'GeoMasterJp::RailwayCompany', foreign_key: :geo_master_jp_railway_company_code, primary_key: :code
6
+ has_many :stations, class_name: 'GeoMasterJp::Station', foreign_key: :geo_master_jp_line_code, primary_key: :code
7
+
8
+ enum status: {
9
+ running: 0,
10
+ will_run: 1,
11
+ deleted: 2
12
+ }
13
+
14
+ def self.inherited(child)
15
+ child.belongs_to :railway_company, class_name: GeoMasterJp.config.alternative_class_name(:railway_company), foreign_key: :geo_master_jp_railway_company_code, primary_key: :code
16
+ child.has_many :stations, class_name: GeoMasterJp.config.alternative_class_name(:station), foreign_key: :geo_master_jp_line_code, primary_key: :code
17
+
18
+ super
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,21 @@
1
+ module GeoMasterJp
2
+ class Prefecture < ActiveRecord::Base
3
+ self.table_name = 'geo_master_jp_prefectures'
4
+
5
+ has_many :cities, class_name: 'GeoMasterJp::City', foreign_key: :geo_master_jp_prefecture_code, primary_key: :code
6
+ has_many :towns, class_name: 'GeoMasterJp::Town', foreign_key: :geo_master_jp_prefecture_code, primary_key: :code
7
+
8
+ def head_kana
9
+ return '' if self.name_kana.blank?
10
+ head_kanas = ['ア', 'カ', 'サ', 'タ', 'ナ', 'ハ', 'マ', 'ヤ', 'ラ', 'ワ']
11
+ head_kanas[head_kanas.index{|i| i > self.name_kana[0] }.to_i - 1]
12
+ end
13
+
14
+ def self.inherited(child)
15
+ child.has_many :cities, class_name: GeoMasterJp.config.alternative_class_name(:city), foreign_key: :geo_master_jp_prefecture_code, primary_key: :code
16
+ child.has_many :towns, class_name: GeoMasterJp.config.alternative_class_name(:town), foreign_key: :geo_master_jp_prefecture_code, primary_key: :code
17
+
18
+ super
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,19 @@
1
+ module GeoMasterJp
2
+ class RailwayCompany < ActiveRecord::Base
3
+ self.table_name = 'geo_master_jp_railway_companies'
4
+
5
+ has_many :lines, class_name: 'GeoMasterJp::Line', foreign_key: :geo_master_jp_railway_company_code, primary_key: :code
6
+
7
+ enum status: {
8
+ running: 0,
9
+ will_run: 1,
10
+ deleted: 2
11
+ }
12
+
13
+ def self.inherited(child)
14
+ child.has_many :lines, class_name: GeoMasterJp.config.alternative_class_name(:line), foreign_key: :geo_master_jp_railway_company_code, primary_key: :code
15
+
16
+ super
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,22 @@
1
+ module GeoMasterJp
2
+ class Station < ActiveRecord::Base
3
+ self.table_name = 'geo_master_jp_stations'
4
+
5
+ belongs_to :line, class_name: 'GeoMasterJp::Line', foreign_key: :geo_master_jp_line_code, primary_key: :code
6
+ has_many :same_stations, class_name: 'GeoMasterJp::Station', foreign_key: :group_code, primary_key: :group_code
7
+ # has_many :connections, class_name: GeoMasterJp.config.alternative_class_name(:station_connection), foreign_key: :geo_master_jp_line_id
8
+
9
+ enum status: {
10
+ running: 0,
11
+ will_run: 1,
12
+ deleted: 2
13
+ }
14
+
15
+ def self.inherited(child)
16
+ child.belongs_to :line, class_name: GeoMasterJp.config.alternative_class_name(:line), foreign_key: :geo_master_jp_line_code, primary_key: :code
17
+ child.has_many :same_stations, class_name: GeoMasterJp.config.alternative_class_name(:station), foreign_key: :group_code, primary_key: :group_code
18
+
19
+ super
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,17 @@
1
+ module GeoMasterJp
2
+ class StationConnection < ActiveRecord::Base
3
+ self.table_name = 'geo_master_jp_station_connections'
4
+
5
+ belongs_to :line, class_name: 'GeoMasterJp::Line', foreign_key: :geo_master_jp_line_code, primary_key: :code
6
+ belongs_to :station_1, class_name: 'GeoMasterJp::Station', foreign_key: :geo_master_jp_station_1_code, primary_key: :code
7
+ belongs_to :station_2, class_name: 'GeoMasterJp::Station', foreign_key: :geo_master_jp_station_2_code, primary_key: :code
8
+
9
+ def self.inherited(child)
10
+ child.belongs_to :line, class_name: GeoMasterJp.config.alternative_class_name(:line), foreign_key: :geo_master_jp_line_code, primary_key: :code
11
+ child.belongs_to :station_1, class_name: GeoMasterJp.config.alternative_class_name(:station), foreign_key: :geo_master_jp_station_1_code, primary_key: :code
12
+ child.belongs_to :station_2, class_name: GeoMasterJp.config.alternative_class_name(:station), foreign_key: :geo_master_jp_station_2_code, primary_key: :code
13
+
14
+ super
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,21 @@
1
+ module GeoMasterJp
2
+ class Town < ActiveRecord::Base
3
+ self.table_name = 'geo_master_jp_towns'
4
+
5
+ belongs_to :prefecture, class_name: 'GeoMasterJp::Prefecture', foreign_key: :geo_master_jp_prefecture_code, primary_key: :code
6
+ belongs_to :city, class_name: 'GeoMasterJp::City', foreign_key: :geo_master_jp_city_code, primary_key: :code
7
+
8
+ def head_kana
9
+ return '' if self.name_kana.blank?
10
+ head_kanas = ['ア', 'カ', 'サ', 'タ', 'ナ', 'ハ', 'マ', 'ヤ', 'ラ', 'ワ']
11
+ head_kanas[head_kanas.index{|i| i > self.name_kana[0] }.to_i - 1]
12
+ end
13
+
14
+ def self.inherited(child)
15
+ child.belongs_to :prefecture, class_name: GeoMasterJp.config.alternative_class_name(:prefecture), foreign_key: :geo_master_jp_prefecture_code, primary_key: :code
16
+ child.belongs_to :city, class_name: GeoMasterJp.config.alternative_class_name(:city), foreign_key: :geo_master_jp_city_code, primary_key: :code
17
+
18
+ super
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,16 @@
1
+ module GeoMasterJp
2
+ class Version < ActiveRecord::Base
3
+ self.table_name = 'geo_master_jp_versions'
4
+
5
+ def model
6
+ self.model_name_string.constantize
7
+ end
8
+
9
+ class << self
10
+ def last_version(klass)
11
+ last_data = where(model_name_string: klass.to_s).order('version ASC').last
12
+ last_data ? last_data.version : nil
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,4 @@
1
+ module GeoMasterJp
2
+ class Railtie < ::Rails::Railtie
3
+ end
4
+ end
@@ -0,0 +1,3 @@
1
+ module GeoMasterJp
2
+ VERSION = '0.1.25'
3
+ end
@@ -0,0 +1,9 @@
1
+ require "geo_master_jp/railtie"
2
+ require "geo_master_jp/engine"
3
+ require "geo_master_jp/association_helper"
4
+
5
+ module GeoMasterJp
6
+ # Your code goes here...
7
+ end
8
+
9
+ ActiveRecord::Base.send :include, GeoMasterJp::AssociationHelper
@@ -0,0 +1,4 @@
1
+ # desc "Explaining what the task does"
2
+ # task :geo_master_jp do
3
+ # # Task goes here
4
+ # end