jp_local_gov 0.1.0 → 0.3.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/ISSUE_TEMPLATE/bug-report.yml +50 -0
- data/.github/ISSUE_TEMPLATE/feature-suggestion.yml +22 -0
- data/.github/codespell-problem-matcher.json +15 -0
- data/.github/misspell-problem-matcher.json +15 -0
- data/.github/workflows/auto-update.yml +1 -0
- data/.github/workflows/lint.yml +4 -1
- data/.github/workflows/spell-checking.yml +44 -0
- data/.github/workflows/steep.yml +8 -0
- data/.github/workflows/test.yml +5 -2
- data/.gitignore +0 -1
- data/.rubocop.yml +9 -1
- data/CHANGELOG.md +61 -2
- data/Gemfile +2 -0
- data/README.md +137 -6
- data/bin/spec_runner.rb +19 -0
- data/codespell.txt +0 -0
- data/data/importer.rb +1 -1
- data/jp_local_gov.gemspec +1 -1
- data/lib/jp_local_gov/random.rb +28 -0
- data/lib/jp_local_gov/version.rb +1 -1
- data/lib/jp_local_gov.rb +39 -16
- data/sig/jp_local_gov/random.rbs +9 -0
- data/sig/jp_local_gov.rbs +11 -1
- data/tmp/.gitignore +2 -0
- metadata +13 -4
- data/.ruby-version +0 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4f627a940405e1c5f1339526132b70637a1e4243546d550bd6710f7c71339d19
|
4
|
+
data.tar.gz: e40ce4f88624c7abe41bf365feb0d64567b96d63449737618c7acbc4c6b563d4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 468b26d385a1cc82a35c993b29cea69e9991e3d0ca28a2d4cac02ab15dd9a1ea195b732a717a320e15f8eee365bab779a4691212614cbb166b672d0406431e3c
|
7
|
+
data.tar.gz: 9d1850d5b14e67260e4a83ec7da3ca2a3c9041f6bebfdae2abc34be71030c63eec171321c84766f56e51c95f863f24a5cdcdf3c4670d320130537097e1797587
|
@@ -0,0 +1,50 @@
|
|
1
|
+
name: BugReport
|
2
|
+
description: File a bug report
|
3
|
+
title: "[Bug]: "
|
4
|
+
assignees: IkumaTadokoro
|
5
|
+
labels: ["bug"]
|
6
|
+
body:
|
7
|
+
- type: markdown
|
8
|
+
attributes:
|
9
|
+
value: "Thanks for taking the time to fill out this bug report!"
|
10
|
+
- type: textarea
|
11
|
+
id: description
|
12
|
+
attributes:
|
13
|
+
label: Summary
|
14
|
+
validations:
|
15
|
+
required: false
|
16
|
+
- type: textarea
|
17
|
+
id: reproduction
|
18
|
+
attributes:
|
19
|
+
label: Steps to reproduce the bug
|
20
|
+
placeholder: |
|
21
|
+
1. ...
|
22
|
+
2. ...
|
23
|
+
3. ...
|
24
|
+
validations:
|
25
|
+
required: false
|
26
|
+
- type: textarea
|
27
|
+
id: expected
|
28
|
+
attributes:
|
29
|
+
label: Expected
|
30
|
+
validations:
|
31
|
+
required: false
|
32
|
+
- type: textarea
|
33
|
+
id: log
|
34
|
+
attributes:
|
35
|
+
label: Relevant log output
|
36
|
+
description: Please copy and paste any relevant log output. This will be automatically formatted into code, so no need for backticks.
|
37
|
+
render: shell
|
38
|
+
validations:
|
39
|
+
required: false
|
40
|
+
- type: textarea
|
41
|
+
id: environment
|
42
|
+
attributes:
|
43
|
+
label: Environment
|
44
|
+
validations:
|
45
|
+
required: false
|
46
|
+
- type: textarea
|
47
|
+
id: related_issues
|
48
|
+
attributes:
|
49
|
+
label: Related Issue
|
50
|
+
placeholder: "Ref: #3899"
|
@@ -0,0 +1,22 @@
|
|
1
|
+
name: Feature Suggestion
|
2
|
+
description: Suggestions for new feature
|
3
|
+
assignees: IkumaTadokoro
|
4
|
+
title: "[Feature]: "
|
5
|
+
labels: ["enhancement"]
|
6
|
+
body:
|
7
|
+
- type: markdown
|
8
|
+
attributes:
|
9
|
+
value: "Thanks for taking the time to fill out this feature proposal!"
|
10
|
+
- type: textarea
|
11
|
+
id: description
|
12
|
+
attributes:
|
13
|
+
label: Description of new feature
|
14
|
+
validations:
|
15
|
+
required: false
|
16
|
+
- type: textarea
|
17
|
+
id: reason
|
18
|
+
attributes:
|
19
|
+
label: Reason
|
20
|
+
description: Please fill out the reason why your idea should be adopted.
|
21
|
+
validations:
|
22
|
+
required: false
|
data/.github/workflows/lint.yml
CHANGED
@@ -9,12 +9,15 @@ on:
|
|
9
9
|
jobs:
|
10
10
|
lint:
|
11
11
|
runs-on: ubuntu-latest
|
12
|
-
|
12
|
+
strategy:
|
13
|
+
matrix:
|
14
|
+
ruby: [2.7, '3.0', 3.1]
|
13
15
|
steps:
|
14
16
|
- uses: actions/checkout@v2
|
15
17
|
- name: Set up Ruby
|
16
18
|
uses: ruby/setup-ruby@v1
|
17
19
|
with:
|
20
|
+
ruby-version: ${{ matrix.ruby }}
|
18
21
|
bundler-cache: true
|
19
22
|
|
20
23
|
- name: Rubocop
|
@@ -0,0 +1,44 @@
|
|
1
|
+
name: Spell Checking
|
2
|
+
|
3
|
+
on:
|
4
|
+
push:
|
5
|
+
branches: ["main"]
|
6
|
+
tags: ["**"]
|
7
|
+
pull_request:
|
8
|
+
branches: ["main"]
|
9
|
+
|
10
|
+
jobs:
|
11
|
+
codespell:
|
12
|
+
name: Check spelling all files with codespell
|
13
|
+
runs-on: ubuntu-latest
|
14
|
+
strategy:
|
15
|
+
matrix:
|
16
|
+
python-version: [3.8]
|
17
|
+
steps:
|
18
|
+
- uses: actions/checkout@v2
|
19
|
+
- name: Set up Python ${{ matrix.python-version }}
|
20
|
+
uses: actions/setup-python@v2
|
21
|
+
with:
|
22
|
+
python-version: ${{ matrix.python-version }}
|
23
|
+
- name: Install dependencies
|
24
|
+
run: |
|
25
|
+
python -m pip install --upgrade pip
|
26
|
+
pip install codespell
|
27
|
+
if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
|
28
|
+
- name: enable problem matcher
|
29
|
+
run: |
|
30
|
+
echo "::add-matcher::.github/codespell-problem-matcher.json"
|
31
|
+
- name: Check spelling with codespell
|
32
|
+
run: codespell --ignore-words=codespell.txt || exit 1
|
33
|
+
misspell:
|
34
|
+
name: Check spelling all files in commit with misspell
|
35
|
+
runs-on: ubuntu-latest
|
36
|
+
steps:
|
37
|
+
- uses: actions/checkout@v2
|
38
|
+
- name: Install
|
39
|
+
run: wget -O - -q https://git.io/misspell | sh -s -- -b .
|
40
|
+
- name: enable problem matcher
|
41
|
+
run: |
|
42
|
+
echo "::add-matcher::.github/misspell-problem-matcher.json"
|
43
|
+
- name: Misspell
|
44
|
+
run: git ls-files --empty-directory | xargs ./misspell -i 'enviromnent' -error
|
data/.github/workflows/steep.yml
CHANGED
@@ -10,10 +10,14 @@ on:
|
|
10
10
|
jobs:
|
11
11
|
check:
|
12
12
|
runs-on: ubuntu-latest
|
13
|
+
strategy:
|
14
|
+
matrix:
|
15
|
+
ruby: [2.7, '3.0', 3.1]
|
13
16
|
steps:
|
14
17
|
- uses: actions/checkout@v2
|
15
18
|
- uses: ruby/setup-ruby@v1
|
16
19
|
with:
|
20
|
+
ruby-version: ${{ matrix.ruby }}
|
17
21
|
bundler-cache: true
|
18
22
|
- run: bundle exec appraisal install
|
19
23
|
- run: |
|
@@ -21,10 +25,14 @@ jobs:
|
|
21
25
|
shell: bash
|
22
26
|
stats:
|
23
27
|
runs-on: ubuntu-latest
|
28
|
+
strategy:
|
29
|
+
matrix:
|
30
|
+
ruby: [2.7, '3.0', 3.1]
|
24
31
|
steps:
|
25
32
|
- uses: actions/checkout@v2
|
26
33
|
- uses: ruby/setup-ruby@v1
|
27
34
|
with:
|
35
|
+
ruby-version: ${{ matrix.ruby }}
|
28
36
|
bundler-cache: true
|
29
37
|
- run: bundle exec appraisal install
|
30
38
|
- run: bundle exec rake steep:stats
|
data/.github/workflows/test.yml
CHANGED
@@ -7,14 +7,17 @@ on:
|
|
7
7
|
branches: ["main"]
|
8
8
|
|
9
9
|
jobs:
|
10
|
-
|
10
|
+
test:
|
11
11
|
runs-on: ubuntu-latest
|
12
|
-
|
12
|
+
strategy:
|
13
|
+
matrix:
|
14
|
+
ruby: [2.7, '3.0', 3.1]
|
13
15
|
steps:
|
14
16
|
- uses: actions/checkout@v2
|
15
17
|
- name: Set up Ruby
|
16
18
|
uses: ruby/setup-ruby@v1
|
17
19
|
with:
|
20
|
+
ruby-version: ${{ matrix.ruby }}
|
18
21
|
bundler-cache: true
|
19
22
|
- run: bundle exec appraisal install
|
20
23
|
- run: bundle exec appraisal rspec
|
data/.gitignore
CHANGED
data/.rubocop.yml
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
AllCops:
|
2
|
-
TargetRubyVersion:
|
2
|
+
TargetRubyVersion: 2.7
|
3
3
|
|
4
4
|
Style/StringLiterals:
|
5
5
|
Enabled: true
|
@@ -9,6 +9,14 @@ Style/StringLiteralsInInterpolation:
|
|
9
9
|
Enabled: true
|
10
10
|
EnforcedStyle: double_quotes
|
11
11
|
|
12
|
+
Metrics/BlockLength:
|
13
|
+
Exclude:
|
14
|
+
- spec/**/*
|
15
|
+
|
16
|
+
Metrics/ClassLength:
|
17
|
+
Exclude:
|
18
|
+
- spec/**/*
|
19
|
+
|
12
20
|
Layout/LineLength:
|
13
21
|
Max: 120
|
14
22
|
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,64 @@
|
|
1
|
-
|
1
|
+
# [0.3.1](https://github.com/IkumaTadokoro/jp_local_gov/compare/v0.3.0...v0.3.1) (2022-02-03)
|
2
2
|
|
3
|
-
|
3
|
+
|
4
|
+
### feat
|
5
|
+
|
6
|
+
* Specify ruby version in auto-update workflow ([572fc5e](https://github.com/IkumaTadokoro/jp_local_gov/commit/572fc5e3cd316f5d194dc8affdbf161acd3b864f)), closes [#77](https://github.com/IkumaTadokoro/jp_local_gov/issues/77) [#79](https://github.com/IkumaTadokoro/jp_local_gov/issues/79)
|
7
|
+
|
8
|
+
### fix
|
9
|
+
|
10
|
+
* Fix JpLocalGov.valid_code?'s condition ([5e1ccf4](https://github.com/IkumaTadokoro/jp_local_gov/commit/5e1ccf4415d5e2e5752d904334e07b550e0d6d5d)), closes [#85](https://github.com/IkumaTadokoro/jp_local_gov/issues/85)
|
11
|
+
|
12
|
+
# [0.3.0](https://github.com/IkumaTadokoro/jp_local_gov/compare/v0.2.1...v0.3.0) (2022-01-28)
|
13
|
+
|
14
|
+
### feat
|
15
|
+
|
16
|
+
* Loosen Ruby version requirement to 2.7.0 ([e3d5f6da](https://github.com/IkumaTadokoro/jp_local_gov/commit/e3d5f6dafcb6665444e81289fcb91ce7d4365a3a))
|
17
|
+
* Removing `.ruby-version` file lets other devs to use their preferred version of Ruby ([3b3bd483](https://github.com/IkumaTadokoro/jp_local_gov/commit/3b3bd483c167266338fe07d627d58de3d833b37d))
|
18
|
+
|
19
|
+
## [0.2.1](https://github.com/IkumaTadokoro/jp_local_gov/compare/v0.2.0...v0.2.1) (2022-01-14)
|
20
|
+
|
21
|
+
### docs
|
22
|
+
|
23
|
+
* Add how to use JpLocalGov::Random ([aab920b](https://github.com/IkumaTadokoro/jp_local_gov/commit/aab920bc1e460eb7105f4759fcca1f8a8e06b9f7)), closes [#66](https://github.com/IkumaTadokoro/jp_local_gov/issues/66)
|
24
|
+
|
25
|
+
### fix
|
26
|
+
|
27
|
+
* Fix dependency of JpLocalGov::Random ([6da699b](https://github.com/IkumaTadokoro/jp_local_gov/commit/6da699b9b49c53551e704f0d05cdd269a4566727)), closes [#70](https://github.com/IkumaTadokoro/jp_local_gov/issues/70)
|
28
|
+
|
29
|
+
## [0.2.0](https://github.com/IkumaTadokoro/jp_local_gov/compare/v0.1.0...v0.2.0) (2022-01-14)
|
30
|
+
|
31
|
+
### chore
|
32
|
+
|
33
|
+
* Add RSpec Runner for JetBrains IDE ([83d8c86](https://github.com/IkumaTadokoro/jp_local_gov/commit/83d8c8649f69506c9a08acf275960480316eb988))
|
34
|
+
* Make JpLocalGov::Data::Importer#prefecture_capital? to return true/false ([82daafd](https://github.com/IkumaTadokoro/jp_local_gov/commit/82daafd19b47e52ff2c1c341a243aef7e5dffae4))
|
35
|
+
|
36
|
+
### ci
|
37
|
+
|
38
|
+
* Add spell checking GitHub Actions Workflow ([fc23bd1](https://github.com/IkumaTadokoro/jp_local_gov/commit/fc23bd1a3c10cc49f8aaf4e869c0062b50255f03))
|
39
|
+
|
40
|
+
### docs
|
41
|
+
|
42
|
+
* 💅 ([61c6d66](https://github.com/IkumaTadokoro/jp_local_gov/commit/61c6d66a43b75339036656a1b110dec97156177e))
|
43
|
+
* Add how to use JpLocalGov.valid_code? ([2e14d71](https://github.com/IkumaTadokoro/jp_local_gov/commit/2e14d71c146d823e4bc3fa268da2e3a0c5f7ebe1))
|
44
|
+
* Add issue template ([9f416a3](https://github.com/IkumaTadokoro/jp_local_gov/commit/9f416a335247c3be5c52e450b914bd73c380092d)), closes [#47](https://github.com/IkumaTadokoro/jp_local_gov/issues/47)
|
45
|
+
|
46
|
+
### feat
|
47
|
+
|
48
|
+
* Add JpLocalGov::Random module ([bae16d7](https://github.com/IkumaTadokoro/jp_local_gov/commit/bae16d7b8ebeff1871b2b5586f0b916253c462e7)), closes [#65](https://github.com/IkumaTadokoro/jp_local_gov/issues/65)
|
49
|
+
* Add JpLocalGov.all_xxx ([f522686](https://github.com/IkumaTadokoro/jp_local_gov/commit/f52268612a5c41435e4a20f3759c9d7d70686a62)), closes [#54](https://github.com/IkumaTadokoro/jp_local_gov/issues/54)
|
50
|
+
* Make JpLocalGov.valid_code? public ([e46b4e7](https://github.com/IkumaTadokoro/jp_local_gov/commit/e46b4e79f3fd0098bd2b509123f866a92c01ee37)), closes [#55](https://github.com/IkumaTadokoro/jp_local_gov/issues/55)
|
51
|
+
|
52
|
+
### fix
|
53
|
+
|
54
|
+
* Fix a task(`jp_local_gov:data:update_all`) ([e21125c](https://github.com/IkumaTadokoro/jp_local_gov/commit/e21125cda74c62e7b45b528ee0f908cfbab6b039)), closes [#60](https://github.com/IkumaTadokoro/jp_local_gov/issues/60)
|
55
|
+
|
56
|
+
### style
|
57
|
+
|
58
|
+
* Add rubocop-rake and rubocop-rspec ([eb5f7d2](https://github.com/IkumaTadokoro/jp_local_gov/commit/eb5f7d22066a65d41d112e60dc8fc7c9b8b71c47))
|
59
|
+
* omit parentheses for internal DSL(RSpec) ([3c23ec5](https://github.com/IkumaTadokoro/jp_local_gov/commit/3c23ec5a19460e2c8ed496b61536ebd800cfeb03))
|
60
|
+
* Remove Metrics rule for spec ([e362565](https://github.com/IkumaTadokoro/jp_local_gov/commit/e3625658376a6b0fd8ac5cea97b0d857cd6f6e7b))
|
61
|
+
|
62
|
+
## 0.1.0 (2021-11-28)
|
4
63
|
|
5
64
|
- Initial release
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -1,8 +1,25 @@
|
|
1
|
+
[![Gem Version](https://badge.fury.io/rb/jp_local_gov.svg)](https://badge.fury.io/rb/jp_local_gov)
|
2
|
+
[![MIT License](http://img.shields.io/badge/license-MIT-blue.svg?style=flat)](https://github.com/IkumaTadokoro/jp_local_gov/blob/main/LICENSE.txt)
|
3
|
+
![Gem](https://img.shields.io/gem/dt/jp_local_gov)
|
4
|
+
|
1
5
|
# JpLocalGov
|
2
6
|
|
3
7
|
Convert local government code based on JIS X 0402 to local government name in Japan.
|
4
8
|
Reference(Japanese): [全国地方公共団体コード \- Wikipedia](https://ja.wikipedia.org/wiki/%E5%85%A8%E5%9B%BD%E5%9C%B0%E6%96%B9%E5%85%AC%E5%85%B1%E5%9B%A3%E4%BD%93%E3%82%B3%E3%83%BC%E3%83%89)
|
5
9
|
|
10
|
+
### Issues
|
11
|
+
|
12
|
+
If you find any bugs or concerns, or have suggestions for new features, please feel free to add them as an [GitHub Issue](https://github.com/IkumaTadokoro/jp_local_gov/issues/new/choose)!
|
13
|
+
|
14
|
+
There are issue templates for bug and feature. If neither, please use the blank template.
|
15
|
+
|
16
|
+
### Special Thanks
|
17
|
+
|
18
|
+
This gem is based on and inspired by [chocoby/jp_prefecture](https://github.com/chocoby/jp_prefecture).
|
19
|
+
And I referenced [kufu/jpostcode-data](https://github.com/kufu/jpostcode-data) for the method of data acquisition.
|
20
|
+
|
21
|
+
Thanks!😁
|
22
|
+
|
6
23
|
## Installation
|
7
24
|
|
8
25
|
Add this line to your application's Gemfile:
|
@@ -60,7 +77,7 @@ This search function is an exact match search.
|
|
60
77
|
|
61
78
|
```ruby
|
62
79
|
misato = JpLocalGov.where(city: "美郷町")
|
63
|
-
# => [#<JpLocalGov::LocalGov:0x00007fb1c594cb08 @code="054348", @prefecture_code="05", @prefecture="秋田県", @prefecture_kana="アキタケン", @city="美郷町", @city_kana="ミサトチョウ", @prefecture_capital=false>, #<JpLocalGov::LocalGov:8 @code="324485", @prefecture_code="32", @prefecture="島根県", @prefecture_kana="シマネケン", @city="美郷町", @city_kana="ミサトチョウ", @prefecture_capital=false>, #<JpLocalGov::LocalGov:0x00007fb1c1a3ce40 @code="454311", @
|
80
|
+
# => [#<JpLocalGov::LocalGov:0x00007fb1c594cb08 @code="054348", @prefecture_code="05", @prefecture="秋田県", @prefecture_kana="アキタケン", @city="美郷町", @city_kana="ミサトチョウ", @prefecture_capital=false>, #<JpLocalGov::LocalGov:8 @code="324485", @prefecture_code="32", @prefecture="島根県", @prefecture_kana="シマネケン", @city="美郷町", @city_kana="ミサトチョウ", @prefecture_capital=false>, #<JpLocalGov::LocalGov:0x00007fb1c1a3ce40 @code="454311", @prefecture="宮崎県", @prefecture_kana="ミヤザキケン", @city="美郷町", @city_kana="ミサトチョウ", @prefecture_capital=false>]
|
64
81
|
misato.map { "#{_1.prefecture}:#{_1.city}" }
|
65
82
|
# => ["秋田県:美郷町", "島根県:美郷町", "宮崎県:美郷町"]
|
66
83
|
|
@@ -84,13 +101,43 @@ The following attributes can be specified for the condition.
|
|
84
101
|
| city_kana | String | "チヨダク" |
|
85
102
|
| prefecture_capital | true or false | false |
|
86
103
|
|
104
|
+
### All data
|
105
|
+
|
106
|
+
You can get all local governments using `JpLocalGov.all`
|
107
|
+
|
108
|
+
```ruby
|
109
|
+
JpLocalGov.all
|
110
|
+
# => [#<JpLocalGov::LocalGov:0x00007fdf3a9c6758 @code="011002", @prefecture_code="01", @prefecture="北海道", @prefecture_kana="ホッカイドウ", @city="札幌市na="サッポロシ", @prefecture_capital=true>, #<JpLocalGov::LocalGov:0x00007fdf3a9c6730 @code="011011",...
|
111
|
+
```
|
112
|
+
|
113
|
+
### Random data
|
114
|
+
|
115
|
+
You can create random `code`, `city`, `city_kana`, `prefecture`, `prefecture_code` and `prefecture_kana` by using `JpLocalGov::Random`.
|
116
|
+
|
117
|
+
```ruby
|
118
|
+
JpLocalGov::Random.code
|
119
|
+
# => "281077"
|
120
|
+
JpLocalGov::Random.city
|
121
|
+
# => "大島町"
|
122
|
+
JpLocalGov::Random.city_kana
|
123
|
+
# => "チュウオウシ"
|
124
|
+
JpLocalGov::Random.prefecture
|
125
|
+
# => "青森県"
|
126
|
+
JpLocalGov::Random.prefecture_code
|
127
|
+
# => "46"
|
128
|
+
JpLocalGov::Random.prefecture_kana
|
129
|
+
# => "ヒョウゴケン"
|
130
|
+
```
|
131
|
+
|
132
|
+
It is useful to random factory data in rails app for example.
|
133
|
+
|
87
134
|
### Usage on Rails (ActiveRecord)
|
88
135
|
|
89
136
|
Include JpLocalGov to Model which ActiveRecord::Base inherited.
|
90
137
|
|
91
138
|
```ruby
|
92
|
-
# app/models/
|
93
|
-
class
|
139
|
+
# app/models/insurance_fee.rb:
|
140
|
+
class InsuranceFee < ActiveRecord::Base
|
94
141
|
# local_gov_code:String
|
95
142
|
|
96
143
|
include JpLocalGov
|
@@ -110,13 +157,43 @@ insurance_fee.local_government.city
|
|
110
157
|
In Migration file, set `local_gov_code` column type to `string`.
|
111
158
|
|
112
159
|
```ruby
|
113
|
-
class
|
160
|
+
class AddLocalGovCodeToInsuranceFees < ActiveRecord::Migration
|
114
161
|
def change
|
115
162
|
add_column :insurance_fees, :local_gov_code, :string
|
116
163
|
end
|
117
164
|
end
|
118
165
|
```
|
119
166
|
|
167
|
+
### Validation
|
168
|
+
|
169
|
+
You can use `JpLocalGov.valid_code?(local_gov_code)` in `validate` method.
|
170
|
+
|
171
|
+
```ruby
|
172
|
+
class InsuranceFee < ApplicationRecord
|
173
|
+
include JpLocalGov
|
174
|
+
jp_local_gov :local_gov_code
|
175
|
+
|
176
|
+
validate :valid_code?
|
177
|
+
|
178
|
+
def valid_code?
|
179
|
+
unless JpLocalGov.valid_code?(local_gov_code)
|
180
|
+
errors.add(:local_gov_code, "is not valid code")
|
181
|
+
end
|
182
|
+
end
|
183
|
+
end
|
184
|
+
```
|
185
|
+
|
186
|
+
This method inspect code by [check digits defined in JISX0402](https://www.soumu.go.jp/main_content/000137948.pdf).
|
187
|
+
(And also check code is String.)
|
188
|
+
|
189
|
+
### View Template
|
190
|
+
|
191
|
+
Use `collection_select` to generate selector in view:
|
192
|
+
|
193
|
+
```ruby
|
194
|
+
f.collection_select :local_gov_code, JpLocalGov.all, :code, :city # e.g. code: 131016, city: "千代田区"
|
195
|
+
```
|
196
|
+
|
120
197
|
## Development
|
121
198
|
|
122
199
|
### Steps
|
@@ -138,9 +215,62 @@ end
|
|
138
215
|
| `bin/lint` | Run Rubocop |
|
139
216
|
| `bin/steep` | Run `steep stats` and `steep check` |
|
140
217
|
|
218
|
+
### Running Test via JetBrains IDE (e.g. RubyMine)
|
219
|
+
|
220
|
+
This gem use 'Appraisal' to inspect several versions of Rails.
|
221
|
+
|
222
|
+
So you should run rspec by `bundle exec appraisal rspec` and you won't be able to run spec via IDE (only run via your
|
223
|
+
terminal).
|
224
|
+
|
225
|
+
If you use JetBrains IDE and you want to run spec via IDE, try to configure the following steps.
|
226
|
+
|
227
|
+
1. Open 「Edit Configurations...」
|
228
|
+
2. Open 「Edit Configuration templates...」
|
229
|
+
3. Select 「RSpec」
|
230
|
+
4. Check 「Use custom RSpec runner script:」 and fill the script with `[CLONE_DIR]/bin/spec_runner.rb`
|
231
|
+
5. Click「APPLY」, then you can run spec via IDE!!🎉
|
232
|
+
|
233
|
+
If you have already run spec via IDE before configuration, delete the existing configuration and try to configure the
|
234
|
+
above steps
|
235
|
+
|
236
|
+
## Update local government data
|
237
|
+
|
238
|
+
This Gem update local government data (format: JSON) automatically once a month by [GitHub Actions](https://github.com/IkumaTadokoro/jp_local_gov/actions/workflows/auto-update.yml).
|
239
|
+
|
240
|
+
- Data source: https://www.soumu.go.jp/denshijiti/code.html
|
241
|
+
- Output: https://github.com/IkumaTadokoro/jp_local_gov/tree/main/data/json
|
242
|
+
|
243
|
+
Fetch script is written in Ruby and Rake Task. So you can run update data at local by the following command.
|
244
|
+
|
245
|
+
```ruby
|
246
|
+
bundle exec rake jp_local_gov:data:update_all
|
247
|
+
```
|
248
|
+
|
141
249
|
## Contributing
|
142
250
|
|
143
|
-
Bug reports and pull requests are welcome on GitHub at https://github.com/IkumaTadokoro/jp_local_gov. This project is
|
251
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/IkumaTadokoro/jp_local_gov. This project is
|
252
|
+
intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to
|
253
|
+
the [code of conduct](https://github.com/IkumaTadokoro/jp_local_gov/blob/main/CODE_OF_CONDUCT.md).
|
254
|
+
|
255
|
+
### Spell Checking
|
256
|
+
|
257
|
+
We are running [misspell](https://github.com/client9/misspell) which is mainly written in
|
258
|
+
[Golang](https://golang.org/) to check spelling with [GitHub Actions](../.github/workflows/spell-checking.yml). Correct
|
259
|
+
commonly misspelled English words quickly with `misspell`. `misspell` is different from most other spell checkers
|
260
|
+
because it doesn't use a custom dictionary. You can run `misspell` locally against all files with:
|
261
|
+
|
262
|
+
$ find . -type f | xargs ./misspell -error
|
263
|
+
|
264
|
+
Notable `misspell` help options or flags are:
|
265
|
+
|
266
|
+
* `-i` string: ignore the following corrections, comma separated
|
267
|
+
* `-w`: Overwrite file with corrections (default is just to display)
|
268
|
+
|
269
|
+
We also run [codespell](https://github.com/codespell-project/codespell) with GitHub Actions to check spelling and
|
270
|
+
[codespell](https://pypi.org/project/codespell/) runs against a [small custom dictionary](../codespell.txt).
|
271
|
+
`codespell` is written in [Python](https://www.python.org/) and you can run it with:
|
272
|
+
|
273
|
+
$ codespell --ignore-words=codespell.txt
|
144
274
|
|
145
275
|
## License
|
146
276
|
|
@@ -148,4 +278,5 @@ The gem is available as open source under the terms of the [MIT License](https:/
|
|
148
278
|
|
149
279
|
## Code of Conduct
|
150
280
|
|
151
|
-
Everyone interacting in the JpLocalGov project's codebases, issue trackers, chat rooms and mailing lists is expected to
|
281
|
+
Everyone interacting in the JpLocalGov project's codebases, issue trackers, chat rooms and mailing lists is expected to
|
282
|
+
follow the [code of conduct](https://github.com/IkumaTadokoro/jp_local_gov/blob/main/CODE_OF_CONDUCT.md).
|
data/bin/spec_runner.rb
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# !/usr/bin/env ruby
|
4
|
+
|
5
|
+
# Most of the code here is copied from /lib/appraisal/cli.rb in the appraisal gem library
|
6
|
+
require "rubygems"
|
7
|
+
require "bundler/setup"
|
8
|
+
require "appraisal"
|
9
|
+
require "appraisal/cli"
|
10
|
+
|
11
|
+
begin
|
12
|
+
`bundle exec appraisal list`.split(/\R/) do |appraisal_name|
|
13
|
+
cmd = [appraisal_name, "rspec"] + ARGV
|
14
|
+
Appraisal::CLI.start(cmd)
|
15
|
+
end
|
16
|
+
rescue Appraisal::AppraisalsNotFound => e
|
17
|
+
puts e.message
|
18
|
+
exit 127
|
19
|
+
end
|
data/codespell.txt
ADDED
File without changes
|
data/data/importer.rb
CHANGED
@@ -56,7 +56,7 @@ module JpLocalGov
|
|
56
56
|
|
57
57
|
def prefecture_capital?(prefecture, city)
|
58
58
|
prefecture_capital_list = JSON.parse(File.open(File.expand_path("prefecture_capital.json", __dir__)).read)
|
59
|
-
prefecture_capital_list.
|
59
|
+
prefecture_capital_list.any? do |prefecture_capital|
|
60
60
|
prefecture_capital["prefecture"] == prefecture && prefecture_capital["city"] == city
|
61
61
|
end
|
62
62
|
end
|
data/jp_local_gov.gemspec
CHANGED
@@ -12,7 +12,7 @@ Gem::Specification.new do |spec|
|
|
12
12
|
spec.description = "Convert japan local government code (JIS X 0402 based) into the local government name."
|
13
13
|
spec.homepage = "https://github.com/IkumaTadokoro/jp_local_gov"
|
14
14
|
spec.license = "MIT"
|
15
|
-
spec.required_ruby_version = ">=
|
15
|
+
spec.required_ruby_version = ">= 2.7.0"
|
16
16
|
|
17
17
|
# Specify which files should be added to the gem when it is released.
|
18
18
|
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "../jp_local_gov"
|
4
|
+
|
5
|
+
module JpLocalGov
|
6
|
+
module Random
|
7
|
+
DATA_DIR = "#{File.dirname(__FILE__)}/../../data/json/"
|
8
|
+
RANDOMIZE_TARGET = %w[code city city_kana prefecture prefecture_code prefecture_kana].freeze
|
9
|
+
|
10
|
+
module_function
|
11
|
+
|
12
|
+
RANDOMIZE_TARGET.each do |target|
|
13
|
+
define_method target.to_s do
|
14
|
+
sample_data.send(target)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def sample_data
|
19
|
+
file_name = ("1".."47").to_a.sample&.rjust(2, "0")
|
20
|
+
json_file = "#{DATA_DIR}#{file_name}.json"
|
21
|
+
data = JSON.parse(File.read(json_file), { symbolize_names: true })
|
22
|
+
JpLocalGov::LocalGov.new(data[data.keys.sample])
|
23
|
+
end
|
24
|
+
|
25
|
+
private_class_method :sample_data
|
26
|
+
private_constant :DATA_DIR, :RANDOMIZE_TARGET
|
27
|
+
end
|
28
|
+
end
|
data/lib/jp_local_gov/version.rb
CHANGED
data/lib/jp_local_gov.rb
CHANGED
@@ -3,12 +3,15 @@
|
|
3
3
|
require_relative "jp_local_gov/version"
|
4
4
|
require_relative "jp_local_gov/local_gov"
|
5
5
|
require_relative "jp_local_gov/base"
|
6
|
+
require_relative "jp_local_gov/random"
|
6
7
|
require "json"
|
7
8
|
|
8
9
|
module JpLocalGov
|
9
|
-
DATA_DIR = "#{File.dirname(__FILE__)}/../data/json/"
|
10
|
+
DATA_DIR = "#{File.dirname(__FILE__)}/../data/json/"
|
10
11
|
CHECK_DIGITS_INDEX = 5
|
11
12
|
CHECK_BASE = 11
|
13
|
+
PREFECTURE_RANGE = (1..47).freeze
|
14
|
+
VALID_CODE_LENGTH = 6
|
12
15
|
|
13
16
|
module_function
|
14
17
|
|
@@ -17,10 +20,10 @@ module JpLocalGov
|
|
17
20
|
end
|
18
21
|
|
19
22
|
def find(local_gov_code)
|
20
|
-
return nil unless
|
23
|
+
return nil unless valid_code?(local_gov_code)
|
21
24
|
|
22
25
|
json_file = "#{DATA_DIR}#{local_gov_code[0..1]}.json"
|
23
|
-
data =
|
26
|
+
data = json_data_from(json_file)
|
24
27
|
local_gov_data = data[local_gov_code.to_sym]
|
25
28
|
return nil if local_gov_data.nil?
|
26
29
|
|
@@ -30,9 +33,9 @@ module JpLocalGov
|
|
30
33
|
def where(conditions)
|
31
34
|
return nil unless conditions.is_a?(Hash)
|
32
35
|
|
33
|
-
json_files =
|
36
|
+
json_files = prefecture_code_list.map { "#{DATA_DIR}#{_1}.json" }
|
34
37
|
results = json_files.map do |json_file|
|
35
|
-
data =
|
38
|
+
data = json_data_from(json_file)
|
36
39
|
build_local_gov(data, conditions)
|
37
40
|
end.flatten.compact
|
38
41
|
return nil if results.empty?
|
@@ -40,6 +43,30 @@ module JpLocalGov
|
|
40
43
|
results
|
41
44
|
end
|
42
45
|
|
46
|
+
# Inspect code by check digits defined in JISX0402
|
47
|
+
# https://www.soumu.go.jp/main_content/000137948.pdf
|
48
|
+
def valid_code?(code)
|
49
|
+
unless code.is_a?(String) && code.length == VALID_CODE_LENGTH && prefecture_code_list.include?(code[0..1])
|
50
|
+
return false
|
51
|
+
end
|
52
|
+
|
53
|
+
sub_total = code.chars
|
54
|
+
.take(CHECK_DIGITS_INDEX)
|
55
|
+
.map.with_index { |digit, index| digit.to_i * (CHECK_DIGITS_INDEX - index + 1) }
|
56
|
+
.sum
|
57
|
+
candidate = (CHECK_BASE - sub_total % CHECK_BASE) % 10
|
58
|
+
check_digits = sub_total >= CHECK_BASE ? candidate : CHECK_BASE - sub_total
|
59
|
+
code[CHECK_DIGITS_INDEX] == check_digits.to_s
|
60
|
+
end
|
61
|
+
|
62
|
+
def all
|
63
|
+
json_files = prefecture_code_list.map { "#{DATA_DIR}#{_1}.json" }
|
64
|
+
json_files.flat_map do |json_file|
|
65
|
+
data = json_data_from(json_file)
|
66
|
+
data.values.map { |value| JpLocalGov::LocalGov.new(value) }
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
43
70
|
def build_local_gov(data, conditions)
|
44
71
|
data.values
|
45
72
|
.select { |target| filter(target, conditions) }
|
@@ -51,18 +78,14 @@ module JpLocalGov
|
|
51
78
|
conditions.map { |condition| target[condition[0]] == condition[1] }.all?
|
52
79
|
end
|
53
80
|
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
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
|
81
|
+
def prefecture_code_list
|
82
|
+
[*PREFECTURE_RANGE].map { format("%02<number>d", number: _1) }
|
83
|
+
end
|
84
|
+
|
85
|
+
def json_data_from(json_file)
|
86
|
+
JSON.parse(File.read(json_file), { symbolize_names: true })
|
64
87
|
end
|
65
88
|
|
66
|
-
private_class_method :
|
89
|
+
private_class_method :build_local_gov, :filter, :prefecture_code_list, :json_data_from
|
67
90
|
private_constant :CHECK_DIGITS_INDEX, :CHECK_BASE
|
68
91
|
end
|
data/sig/jp_local_gov.rbs
CHANGED
@@ -5,15 +5,25 @@ module JpLocalGov
|
|
5
5
|
|
6
6
|
CHECK_BASE: Integer
|
7
7
|
|
8
|
+
PREFECTURE_RANGE: Range[Integer]
|
9
|
+
|
10
|
+
VALID_CODE_LENGTH: Integer
|
11
|
+
|
8
12
|
def self?.included: (Class | Module model_class) -> (Class | Module)
|
9
13
|
|
10
14
|
def self?.find: (String local_gov_code) -> (nil | JpLocalGov::LocalGov)
|
11
15
|
|
12
16
|
def self?.where: (Hash[Symbol, untyped] conditions) -> (nil | Array[JpLocalGov::LocalGov])
|
13
17
|
|
18
|
+
def self?.valid_code?: (String code) -> bool
|
19
|
+
|
20
|
+
def self.all: () -> Array[JpLocalGov::LocalGov]
|
21
|
+
|
14
22
|
def self?.build_local_gov: (Hash[Symbol, untyped] data, Hash[Symbol, String] conditions) -> (nil | Array[JpLocalGov::LocalGov])
|
15
23
|
|
16
24
|
def self?.filter: (Hash[Symbol, untyped] target, Hash[Symbol, String] conditions) -> bool
|
17
25
|
|
18
|
-
def
|
26
|
+
def prefecture_code_list: () -> Array[String]
|
27
|
+
|
28
|
+
def self?.json_data_from: (String) -> Hash[Symbol, untyped]
|
19
29
|
end
|
data/tmp/.gitignore
ADDED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jp_local_gov
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1
|
4
|
+
version: 0.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- ikuma-t
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-02-02 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Convert japan local government code (JIS X 0402 based) into the local
|
14
14
|
government name.
|
@@ -18,16 +18,20 @@ executables: []
|
|
18
18
|
extensions: []
|
19
19
|
extra_rdoc_files: []
|
20
20
|
files:
|
21
|
+
- ".github/ISSUE_TEMPLATE/bug-report.yml"
|
22
|
+
- ".github/ISSUE_TEMPLATE/feature-suggestion.yml"
|
23
|
+
- ".github/codespell-problem-matcher.json"
|
21
24
|
- ".github/dependabot.yml"
|
25
|
+
- ".github/misspell-problem-matcher.json"
|
22
26
|
- ".github/workflows/auto-update.yml"
|
23
27
|
- ".github/workflows/lint.yml"
|
24
28
|
- ".github/workflows/main.yml"
|
29
|
+
- ".github/workflows/spell-checking.yml"
|
25
30
|
- ".github/workflows/steep.yml"
|
26
31
|
- ".github/workflows/test.yml"
|
27
32
|
- ".gitignore"
|
28
33
|
- ".rspec"
|
29
34
|
- ".rubocop.yml"
|
30
|
-
- ".ruby-version"
|
31
35
|
- Appraisals
|
32
36
|
- CHANGELOG.md
|
33
37
|
- CODE_OF_CONDUCT.md
|
@@ -40,8 +44,10 @@ files:
|
|
40
44
|
- bin/generate_rbs
|
41
45
|
- bin/lint
|
42
46
|
- bin/setup
|
47
|
+
- bin/spec_runner.rb
|
43
48
|
- bin/steep
|
44
49
|
- bin/test
|
50
|
+
- codespell.txt
|
45
51
|
- data/base.rb
|
46
52
|
- data/exporter.rb
|
47
53
|
- data/importer.rb
|
@@ -99,11 +105,14 @@ files:
|
|
99
105
|
- lib/jp_local_gov.rb
|
100
106
|
- lib/jp_local_gov/base.rb
|
101
107
|
- lib/jp_local_gov/local_gov.rb
|
108
|
+
- lib/jp_local_gov/random.rb
|
102
109
|
- lib/jp_local_gov/version.rb
|
103
110
|
- sig/jp_local_gov.rbs
|
104
111
|
- sig/jp_local_gov/base.rbs
|
105
112
|
- sig/jp_local_gov/local_gov.rbs
|
113
|
+
- sig/jp_local_gov/random.rbs
|
106
114
|
- sig/jp_local_gov/version.rbs
|
115
|
+
- tmp/.gitignore
|
107
116
|
homepage: https://github.com/IkumaTadokoro/jp_local_gov
|
108
117
|
licenses:
|
109
118
|
- MIT
|
@@ -116,7 +125,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
116
125
|
requirements:
|
117
126
|
- - ">="
|
118
127
|
- !ruby/object:Gem::Version
|
119
|
-
version:
|
128
|
+
version: 2.7.0
|
120
129
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
121
130
|
requirements:
|
122
131
|
- - ">="
|
data/.ruby-version
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
3.0.0
|