jp_local_gov 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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: []