jp_local_gov 0.1.0
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/.github/dependabot.yml +14 -0
- data/.github/workflows/auto-update.yml +27 -0
- data/.github/workflows/lint.yml +21 -0
- data/.github/workflows/main.yml +16 -0
- data/.github/workflows/steep.yml +30 -0
- data/.github/workflows/test.yml +20 -0
- data/.gitignore +14 -0
- data/.rspec +3 -0
- data/.rubocop.yml +17 -0
- data/.ruby-version +1 -0
- data/Appraisals +5 -0
- data/CHANGELOG.md +5 -0
- data/CODE_OF_CONDUCT.md +84 -0
- data/Gemfile +24 -0
- data/LICENSE.txt +21 -0
- data/README.md +151 -0
- data/Rakefile +44 -0
- data/Steepfile +6 -0
- data/bin/console +15 -0
- data/bin/generate_rbs +13 -0
- data/bin/lint +3 -0
- data/bin/setup +7 -0
- data/bin/steep +4 -0
- data/bin/test +4 -0
- data/data/base.rb +77 -0
- data/data/exporter.rb +65 -0
- data/data/importer.rb +65 -0
- data/data/json/01.json +1757 -0
- data/data/json/02.json +362 -0
- data/data/json/03.json +299 -0
- data/data/json/04.json +362 -0
- data/data/json/05.json +227 -0
- data/data/json/06.json +317 -0
- data/data/json/07.json +533 -0
- data/data/json/08.json +398 -0
- data/data/json/09.json +227 -0
- data/data/json/10.json +317 -0
- data/data/json/11.json +659 -0
- data/data/json/12.json +542 -0
- data/data/json/13.json +560 -0
- data/data/json/14.json +551 -0
- data/data/json/15.json +344 -0
- data/data/json/16.json +137 -0
- data/data/json/17.json +173 -0
- data/data/json/18.json +155 -0
- data/data/json/19.json +245 -0
- data/data/json/20.json +695 -0
- data/data/json/21.json +380 -0
- data/data/json/22.json +407 -0
- data/data/json/23.json +632 -0
- data/data/json/24.json +263 -0
- data/data/json/25.json +173 -0
- data/data/json/26.json +335 -0
- data/data/json/27.json +668 -0
- data/data/json/28.json +452 -0
- data/data/json/29.json +353 -0
- data/data/json/30.json +272 -0
- data/data/json/31.json +173 -0
- data/data/json/32.json +173 -0
- data/data/json/33.json +281 -0
- data/data/json/34.json +281 -0
- data/data/json/35.json +173 -0
- data/data/json/36.json +218 -0
- data/data/json/37.json +155 -0
- data/data/json/38.json +182 -0
- data/data/json/39.json +308 -0
- data/data/json/40.json +668 -0
- data/data/json/41.json +182 -0
- data/data/json/42.json +191 -0
- data/data/json/43.json +452 -0
- data/data/json/44.json +164 -0
- data/data/json/45.json +236 -0
- data/data/json/46.json +389 -0
- data/data/json/47.json +371 -0
- data/data/prefecture_capital.json +190 -0
- data/gemfiles/rails61.gemfile +25 -0
- data/gemfiles/rails61.gemfile.lock +127 -0
- data/jp_local_gov.gemspec +31 -0
- data/lib/jp_local_gov/base.rb +13 -0
- data/lib/jp_local_gov/local_gov.rb +17 -0
- data/lib/jp_local_gov/version.rb +5 -0
- data/lib/jp_local_gov.rb +68 -0
- data/sig/jp_local_gov/base.rbs +7 -0
- data/sig/jp_local_gov/local_gov.rbs +19 -0
- data/sig/jp_local_gov/version.rbs +3 -0
- data/sig/jp_local_gov.rbs +19 -0
- metadata +130 -0
@@ -0,0 +1,31 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "lib/jp_local_gov/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |spec|
|
6
|
+
spec.name = "jp_local_gov"
|
7
|
+
spec.version = JpLocalGov::VERSION
|
8
|
+
spec.authors = ["ikuma-t"]
|
9
|
+
spec.email = ["tadokorodev@gmail.com"]
|
10
|
+
|
11
|
+
spec.summary = "Convert japan local government code into the local government name."
|
12
|
+
spec.description = "Convert japan local government code (JIS X 0402 based) into the local government name."
|
13
|
+
spec.homepage = "https://github.com/IkumaTadokoro/jp_local_gov"
|
14
|
+
spec.license = "MIT"
|
15
|
+
spec.required_ruby_version = ">= 3.0.0"
|
16
|
+
|
17
|
+
# Specify which files should be added to the gem when it is released.
|
18
|
+
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
19
|
+
spec.files = Dir.chdir(File.expand_path(__dir__)) do
|
20
|
+
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{\A(?:test|spec|features)/}) }
|
21
|
+
end
|
22
|
+
spec.bindir = "exe"
|
23
|
+
spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
|
24
|
+
spec.require_paths = ["lib"]
|
25
|
+
|
26
|
+
# Uncomment to register a new dependency of your gem
|
27
|
+
# spec.add_dependency "example-gem", "~> 1.0"
|
28
|
+
|
29
|
+
# For more information and examples about making a new gem, checkout our
|
30
|
+
# guide at: https://bundler.io/guides/creating_gem.html
|
31
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module JpLocalGov
|
4
|
+
class LocalGov
|
5
|
+
attr_reader :code, :prefecture_code, :prefecture, :prefecture_kana, :city, :city_kana, :prefecture_capital
|
6
|
+
|
7
|
+
def initialize(data)
|
8
|
+
@code = data[:code]
|
9
|
+
@prefecture_code = data[:prefecture_code]
|
10
|
+
@prefecture = data[:prefecture]
|
11
|
+
@prefecture_kana = data[:prefecture_kana]
|
12
|
+
@city = data[:city]
|
13
|
+
@city_kana = data[:city_kana]
|
14
|
+
@prefecture_capital = data[:prefecture_capital]
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
data/lib/jp_local_gov.rb
ADDED
@@ -0,0 +1,68 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "jp_local_gov/version"
|
4
|
+
require_relative "jp_local_gov/local_gov"
|
5
|
+
require_relative "jp_local_gov/base"
|
6
|
+
require "json"
|
7
|
+
|
8
|
+
module JpLocalGov
|
9
|
+
DATA_DIR = "#{File.dirname(__FILE__)}/../data/json/".freeze
|
10
|
+
CHECK_DIGITS_INDEX = 5
|
11
|
+
CHECK_BASE = 11
|
12
|
+
|
13
|
+
module_function
|
14
|
+
|
15
|
+
def included(model_class)
|
16
|
+
model_class.extend Base
|
17
|
+
end
|
18
|
+
|
19
|
+
def find(local_gov_code)
|
20
|
+
return nil unless local_gov_code.is_a?(String) && valid_code?(local_gov_code)
|
21
|
+
|
22
|
+
json_file = "#{DATA_DIR}#{local_gov_code[0..1]}.json"
|
23
|
+
data = JSON.parse(File.open(json_file).read, { symbolize_names: true })
|
24
|
+
local_gov_data = data[local_gov_code.to_sym]
|
25
|
+
return nil if local_gov_data.nil?
|
26
|
+
|
27
|
+
JpLocalGov::LocalGov.new(local_gov_data)
|
28
|
+
end
|
29
|
+
|
30
|
+
def where(conditions)
|
31
|
+
return nil unless conditions.is_a?(Hash)
|
32
|
+
|
33
|
+
json_files = [*1..47].map { format("%02<number>d", number: _1) }.map { "#{DATA_DIR}#{_1}.json" }
|
34
|
+
results = json_files.map do |json_file|
|
35
|
+
data = JSON.parse(File.open(json_file).read, { symbolize_names: true })
|
36
|
+
build_local_gov(data, conditions)
|
37
|
+
end.flatten.compact
|
38
|
+
return nil if results.empty?
|
39
|
+
|
40
|
+
results
|
41
|
+
end
|
42
|
+
|
43
|
+
def build_local_gov(data, conditions)
|
44
|
+
data.values
|
45
|
+
.select { |target| filter(target, conditions) }
|
46
|
+
.tap { |result| return nil if result.empty? }
|
47
|
+
.map { |result| JpLocalGov::LocalGov.new(result) }
|
48
|
+
end
|
49
|
+
|
50
|
+
def filter(target, conditions)
|
51
|
+
conditions.map { |condition| target[condition[0]] == condition[1] }.all?
|
52
|
+
end
|
53
|
+
|
54
|
+
# Inspect code by check digits defined in JISX0402
|
55
|
+
# https://www.soumu.go.jp/main_content/000137948.pdf
|
56
|
+
def valid_code?(code)
|
57
|
+
sub_total = code.chars
|
58
|
+
.take(CHECK_DIGITS_INDEX)
|
59
|
+
.map.with_index { |digit, index| digit.to_i * (CHECK_DIGITS_INDEX - index + 1) }
|
60
|
+
.sum
|
61
|
+
candidate = (CHECK_BASE - sub_total % CHECK_BASE) % 10
|
62
|
+
check_digits = sub_total > CHECK_BASE ? candidate : CHECK_BASE - sub_total
|
63
|
+
code[CHECK_DIGITS_INDEX] == check_digits.to_s
|
64
|
+
end
|
65
|
+
|
66
|
+
private_class_method :valid_code?, :build_local_gov, :filter
|
67
|
+
private_constant :CHECK_DIGITS_INDEX, :CHECK_BASE
|
68
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module JpLocalGov
|
2
|
+
class LocalGov
|
3
|
+
attr_reader code: String
|
4
|
+
|
5
|
+
attr_reader prefecture_code: String
|
6
|
+
|
7
|
+
attr_reader prefecture: String
|
8
|
+
|
9
|
+
attr_reader prefecture_kana: String
|
10
|
+
|
11
|
+
attr_reader city: String
|
12
|
+
|
13
|
+
attr_reader city_kana: String
|
14
|
+
|
15
|
+
attr_reader prefecture_capital: bool
|
16
|
+
|
17
|
+
def initialize: (Hash[Symbol, untyped] data) -> void
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module JpLocalGov
|
2
|
+
DATA_DIR: String
|
3
|
+
|
4
|
+
CHECK_DIGITS_INDEX: Integer
|
5
|
+
|
6
|
+
CHECK_BASE: Integer
|
7
|
+
|
8
|
+
def self?.included: (Class | Module model_class) -> (Class | Module)
|
9
|
+
|
10
|
+
def self?.find: (String local_gov_code) -> (nil | JpLocalGov::LocalGov)
|
11
|
+
|
12
|
+
def self?.where: (Hash[Symbol, untyped] conditions) -> (nil | Array[JpLocalGov::LocalGov])
|
13
|
+
|
14
|
+
def self?.build_local_gov: (Hash[Symbol, untyped] data, Hash[Symbol, String] conditions) -> (nil | Array[JpLocalGov::LocalGov])
|
15
|
+
|
16
|
+
def self?.filter: (Hash[Symbol, untyped] target, Hash[Symbol, String] conditions) -> bool
|
17
|
+
|
18
|
+
def self?.valid_code?: (String code) -> bool
|
19
|
+
end
|
metadata
ADDED
@@ -0,0 +1,130 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: jp_local_gov
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- ikuma-t
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2021-12-22 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: Convert japan local government code (JIS X 0402 based) into the local
|
14
|
+
government name.
|
15
|
+
email:
|
16
|
+
- tadokorodev@gmail.com
|
17
|
+
executables: []
|
18
|
+
extensions: []
|
19
|
+
extra_rdoc_files: []
|
20
|
+
files:
|
21
|
+
- ".github/dependabot.yml"
|
22
|
+
- ".github/workflows/auto-update.yml"
|
23
|
+
- ".github/workflows/lint.yml"
|
24
|
+
- ".github/workflows/main.yml"
|
25
|
+
- ".github/workflows/steep.yml"
|
26
|
+
- ".github/workflows/test.yml"
|
27
|
+
- ".gitignore"
|
28
|
+
- ".rspec"
|
29
|
+
- ".rubocop.yml"
|
30
|
+
- ".ruby-version"
|
31
|
+
- Appraisals
|
32
|
+
- CHANGELOG.md
|
33
|
+
- CODE_OF_CONDUCT.md
|
34
|
+
- Gemfile
|
35
|
+
- LICENSE.txt
|
36
|
+
- README.md
|
37
|
+
- Rakefile
|
38
|
+
- Steepfile
|
39
|
+
- bin/console
|
40
|
+
- bin/generate_rbs
|
41
|
+
- bin/lint
|
42
|
+
- bin/setup
|
43
|
+
- bin/steep
|
44
|
+
- bin/test
|
45
|
+
- data/base.rb
|
46
|
+
- data/exporter.rb
|
47
|
+
- data/importer.rb
|
48
|
+
- data/json/01.json
|
49
|
+
- data/json/02.json
|
50
|
+
- data/json/03.json
|
51
|
+
- data/json/04.json
|
52
|
+
- data/json/05.json
|
53
|
+
- data/json/06.json
|
54
|
+
- data/json/07.json
|
55
|
+
- data/json/08.json
|
56
|
+
- data/json/09.json
|
57
|
+
- data/json/10.json
|
58
|
+
- data/json/11.json
|
59
|
+
- data/json/12.json
|
60
|
+
- data/json/13.json
|
61
|
+
- data/json/14.json
|
62
|
+
- data/json/15.json
|
63
|
+
- data/json/16.json
|
64
|
+
- data/json/17.json
|
65
|
+
- data/json/18.json
|
66
|
+
- data/json/19.json
|
67
|
+
- data/json/20.json
|
68
|
+
- data/json/21.json
|
69
|
+
- data/json/22.json
|
70
|
+
- data/json/23.json
|
71
|
+
- data/json/24.json
|
72
|
+
- data/json/25.json
|
73
|
+
- data/json/26.json
|
74
|
+
- data/json/27.json
|
75
|
+
- data/json/28.json
|
76
|
+
- data/json/29.json
|
77
|
+
- data/json/30.json
|
78
|
+
- data/json/31.json
|
79
|
+
- data/json/32.json
|
80
|
+
- data/json/33.json
|
81
|
+
- data/json/34.json
|
82
|
+
- data/json/35.json
|
83
|
+
- data/json/36.json
|
84
|
+
- data/json/37.json
|
85
|
+
- data/json/38.json
|
86
|
+
- data/json/39.json
|
87
|
+
- data/json/40.json
|
88
|
+
- data/json/41.json
|
89
|
+
- data/json/42.json
|
90
|
+
- data/json/43.json
|
91
|
+
- data/json/44.json
|
92
|
+
- data/json/45.json
|
93
|
+
- data/json/46.json
|
94
|
+
- data/json/47.json
|
95
|
+
- data/prefecture_capital.json
|
96
|
+
- gemfiles/rails61.gemfile
|
97
|
+
- gemfiles/rails61.gemfile.lock
|
98
|
+
- jp_local_gov.gemspec
|
99
|
+
- lib/jp_local_gov.rb
|
100
|
+
- lib/jp_local_gov/base.rb
|
101
|
+
- lib/jp_local_gov/local_gov.rb
|
102
|
+
- lib/jp_local_gov/version.rb
|
103
|
+
- sig/jp_local_gov.rbs
|
104
|
+
- sig/jp_local_gov/base.rbs
|
105
|
+
- sig/jp_local_gov/local_gov.rbs
|
106
|
+
- sig/jp_local_gov/version.rbs
|
107
|
+
homepage: https://github.com/IkumaTadokoro/jp_local_gov
|
108
|
+
licenses:
|
109
|
+
- MIT
|
110
|
+
metadata: {}
|
111
|
+
post_install_message:
|
112
|
+
rdoc_options: []
|
113
|
+
require_paths:
|
114
|
+
- lib
|
115
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
116
|
+
requirements:
|
117
|
+
- - ">="
|
118
|
+
- !ruby/object:Gem::Version
|
119
|
+
version: 3.0.0
|
120
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
requirements: []
|
126
|
+
rubygems_version: 3.2.32
|
127
|
+
signing_key:
|
128
|
+
specification_version: 4
|
129
|
+
summary: Convert japan local government code into the local government name.
|
130
|
+
test_files: []
|