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.
Files changed (88) hide show
  1. checksums.yaml +7 -0
  2. data/.github/dependabot.yml +14 -0
  3. data/.github/workflows/auto-update.yml +27 -0
  4. data/.github/workflows/lint.yml +21 -0
  5. data/.github/workflows/main.yml +16 -0
  6. data/.github/workflows/steep.yml +30 -0
  7. data/.github/workflows/test.yml +20 -0
  8. data/.gitignore +14 -0
  9. data/.rspec +3 -0
  10. data/.rubocop.yml +17 -0
  11. data/.ruby-version +1 -0
  12. data/Appraisals +5 -0
  13. data/CHANGELOG.md +5 -0
  14. data/CODE_OF_CONDUCT.md +84 -0
  15. data/Gemfile +24 -0
  16. data/LICENSE.txt +21 -0
  17. data/README.md +151 -0
  18. data/Rakefile +44 -0
  19. data/Steepfile +6 -0
  20. data/bin/console +15 -0
  21. data/bin/generate_rbs +13 -0
  22. data/bin/lint +3 -0
  23. data/bin/setup +7 -0
  24. data/bin/steep +4 -0
  25. data/bin/test +4 -0
  26. data/data/base.rb +77 -0
  27. data/data/exporter.rb +65 -0
  28. data/data/importer.rb +65 -0
  29. data/data/json/01.json +1757 -0
  30. data/data/json/02.json +362 -0
  31. data/data/json/03.json +299 -0
  32. data/data/json/04.json +362 -0
  33. data/data/json/05.json +227 -0
  34. data/data/json/06.json +317 -0
  35. data/data/json/07.json +533 -0
  36. data/data/json/08.json +398 -0
  37. data/data/json/09.json +227 -0
  38. data/data/json/10.json +317 -0
  39. data/data/json/11.json +659 -0
  40. data/data/json/12.json +542 -0
  41. data/data/json/13.json +560 -0
  42. data/data/json/14.json +551 -0
  43. data/data/json/15.json +344 -0
  44. data/data/json/16.json +137 -0
  45. data/data/json/17.json +173 -0
  46. data/data/json/18.json +155 -0
  47. data/data/json/19.json +245 -0
  48. data/data/json/20.json +695 -0
  49. data/data/json/21.json +380 -0
  50. data/data/json/22.json +407 -0
  51. data/data/json/23.json +632 -0
  52. data/data/json/24.json +263 -0
  53. data/data/json/25.json +173 -0
  54. data/data/json/26.json +335 -0
  55. data/data/json/27.json +668 -0
  56. data/data/json/28.json +452 -0
  57. data/data/json/29.json +353 -0
  58. data/data/json/30.json +272 -0
  59. data/data/json/31.json +173 -0
  60. data/data/json/32.json +173 -0
  61. data/data/json/33.json +281 -0
  62. data/data/json/34.json +281 -0
  63. data/data/json/35.json +173 -0
  64. data/data/json/36.json +218 -0
  65. data/data/json/37.json +155 -0
  66. data/data/json/38.json +182 -0
  67. data/data/json/39.json +308 -0
  68. data/data/json/40.json +668 -0
  69. data/data/json/41.json +182 -0
  70. data/data/json/42.json +191 -0
  71. data/data/json/43.json +452 -0
  72. data/data/json/44.json +164 -0
  73. data/data/json/45.json +236 -0
  74. data/data/json/46.json +389 -0
  75. data/data/json/47.json +371 -0
  76. data/data/prefecture_capital.json +190 -0
  77. data/gemfiles/rails61.gemfile +25 -0
  78. data/gemfiles/rails61.gemfile.lock +127 -0
  79. data/jp_local_gov.gemspec +31 -0
  80. data/lib/jp_local_gov/base.rb +13 -0
  81. data/lib/jp_local_gov/local_gov.rb +17 -0
  82. data/lib/jp_local_gov/version.rb +5 -0
  83. data/lib/jp_local_gov.rb +68 -0
  84. data/sig/jp_local_gov/base.rbs +7 -0
  85. data/sig/jp_local_gov/local_gov.rbs +19 -0
  86. data/sig/jp_local_gov/version.rbs +3 -0
  87. data/sig/jp_local_gov.rbs +19 -0
  88. 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,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "../jp_local_gov"
4
+
5
+ module JpLocalGov
6
+ module Base
7
+ def jp_local_gov(column_name)
8
+ define_method "local_government" do
9
+ JpLocalGov.find(send(column_name))
10
+ end
11
+ end
12
+ end
13
+ 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
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module JpLocalGov
4
+ VERSION = "0.1.0"
5
+ end
@@ -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,7 @@
1
+ module JpLocalGov
2
+ module Base : Module
3
+ def jp_local_gov: (Symbol | String column_name) -> Symbol
4
+
5
+ def local_government: () -> JpLocalGov::LocalGov
6
+ end
7
+ 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,3 @@
1
+ module JpLocalGov
2
+ VERSION: ::String
3
+ 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: []