local_gov_code 1.0.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.
@@ -0,0 +1,3 @@
1
+ class LocalGovCode
2
+ VERSION = "1.0.0"
3
+ end
@@ -0,0 +1,112 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ require 'singleton'
4
+ require "local_gov_code/version"
5
+ require "local_gov_code/local_gov_data"
6
+
7
+ class LocalGovCode
8
+ include Singleton
9
+
10
+ def initialize
11
+ @code_hash = {}
12
+ @fullname_hash = {}
13
+ @name_hash = {}
14
+
15
+ data.each do |lg|
16
+ local_gov = LocalGov.new(*lg)
17
+ @code_hash[local_gov.code.to_i] = local_gov
18
+
19
+ @fullname_hash[local_gov.name] = [] if @fullname_hash[local_gov.name].nil?
20
+ @fullname_hash[local_gov.name] << local_gov
21
+
22
+ @name_hash[local_gov.name] = [] if @name_hash[local_gov.name].nil?
23
+ @name_hash[local_gov.name] << local_gov
24
+ end
25
+
26
+ @code_hash.freeze
27
+ @fullname_hash.freeze
28
+ @name_hash.freeze
29
+ end
30
+
31
+ # 5桁の地方公共団体コードに該当するLocalGovオブジェクトを返す
32
+ # コードは文字列でも整数でも可。
33
+ # 例)北海道 '01000' or 1000
34
+ def find(code)
35
+ @code_hash[code.to_i]
36
+ end
37
+
38
+ # 都道府県+市区町村名で検索
39
+ def find_by_fullname(fullname)
40
+ @fullname_hash[fullname]
41
+ end
42
+
43
+ # 市区町村名で検索
44
+ def find_by_name(name)
45
+ @name_hash[name]
46
+ end
47
+
48
+ # すべてのLocalGovの配列を返す。順番は地方自治体コード順。
49
+ def all
50
+ @code_hash.sort.collect { |lg| lg.last }
51
+ end
52
+
53
+ #--------------------------------------------------------------------
54
+
55
+ #
56
+ # 各地方公共団体を扱うクラス
57
+ #
58
+ class LocalGov
59
+ attr_reader :prefname, :name, :prefkana, :kana
60
+
61
+ def initialize(code, prefname, name, prefkana, kana)
62
+ @code = code.to_i / 10 # 6桁目チェックコードは除く
63
+ @checksum = code.to_i % 10
64
+ @prefname = prefname
65
+ @name = name
66
+ @prefkana = prefkana
67
+ @kana = kana
68
+ end
69
+
70
+ def code
71
+ sprintf("%05d", @code)
72
+ end
73
+
74
+ def fullname
75
+ "#{prefname}#{name}"
76
+ end
77
+
78
+ # テスト用
79
+ def check_ok?
80
+ @checksum == checksum
81
+ end
82
+
83
+ private
84
+
85
+ # 全国地方公共団体コード仕様(平成19年4月1日総務省)
86
+ # 11.検査数字
87
+ # 全国地方公共団体コードにおける検査数字は、電算処理にあたって、不
88
+ # 正なコードが使われないよう第6桁目をチェック用としたもので、次の方
89
+ # 式により算出した数字とする。 (方式)第1桁から第5桁までの数字に、そ
90
+ # れぞれ6.5.4.3.2を乗じて算出した積の和を求め、その和を11で除し、商
91
+ # と剰余(以下「余り数字」という。)を求めて、11と余り数字との差の下
92
+ # 1桁の数字を検査数字とする。 ただし、積の和が11より小なるときは、
93
+ # 検査数字は、11から積の和を控除した数字とする。
94
+ #
95
+ def checksum
96
+ c = @code
97
+ c, n5 = c.divmod(10)
98
+ c, n4 = c.divmod(10)
99
+ c, n3 = c.divmod(10)
100
+ c, n2 = c.divmod(10)
101
+ c, n1 = c.divmod(10)
102
+
103
+ sum = n1*6 + n2*5 + n3*4 + n4*3 + n5*2
104
+ if sum < 11
105
+ 11 - sum
106
+ else
107
+ q =sum.modulo(11)
108
+ (11 - q).modulo(10)
109
+ end
110
+ end
111
+ end
112
+ end
@@ -0,0 +1,25 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'local_gov_code/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "local_gov_code"
8
+ spec.version = LocalGovCode::VERSION
9
+ spec.authors = ["Hideo NAKAMURA"]
10
+ spec.email = ["cxn03651@msj.biglobe.ne.jp"]
11
+
12
+ spec.summary = %q{全国地方公共団体コードを取り扱うgemです。平成26年4月5日現在データによります。}
13
+ spec.description = %q{全国地方公共団体コードを取り扱うgemです。平成26年4月5日現在データによります。}
14
+ spec.homepage = ""
15
+ spec.license = "MIT"
16
+
17
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
18
+ spec.bindir = "exe"
19
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
20
+ spec.require_paths = ["lib"]
21
+
22
+ spec.add_development_dependency "bundler", "~> 1.12"
23
+ spec.add_development_dependency "rake", "~> 10.0"
24
+ spec.add_development_dependency "minitest", "~> 5.0"
25
+ end
metadata ADDED
@@ -0,0 +1,98 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: local_gov_code
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Hideo NAKAMURA
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2016-05-22 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.12'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.12'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: minitest
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '5.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '5.0'
55
+ description: 全国地方公共団体コードを取り扱うgemです。平成26年4月5日現在データによります。
56
+ email:
57
+ - cxn03651@msj.biglobe.ne.jp
58
+ executables: []
59
+ extensions: []
60
+ extra_rdoc_files: []
61
+ files:
62
+ - ".gitignore"
63
+ - ".travis.yml"
64
+ - Gemfile
65
+ - LICENSE.txt
66
+ - README.md
67
+ - Rakefile
68
+ - bin/console
69
+ - bin/setup
70
+ - lib/local_gov_code.rb
71
+ - lib/local_gov_code/local_gov_data.rb
72
+ - lib/local_gov_code/version.rb
73
+ - local_gov_code.gemspec
74
+ homepage: ''
75
+ licenses:
76
+ - MIT
77
+ metadata: {}
78
+ post_install_message:
79
+ rdoc_options: []
80
+ require_paths:
81
+ - lib
82
+ required_ruby_version: !ruby/object:Gem::Requirement
83
+ requirements:
84
+ - - ">="
85
+ - !ruby/object:Gem::Version
86
+ version: '0'
87
+ required_rubygems_version: !ruby/object:Gem::Requirement
88
+ requirements:
89
+ - - ">="
90
+ - !ruby/object:Gem::Version
91
+ version: '0'
92
+ requirements: []
93
+ rubyforge_project:
94
+ rubygems_version: 2.5.1
95
+ signing_key:
96
+ specification_version: 4
97
+ summary: 全国地方公共団体コードを取り扱うgemです。平成26年4月5日現在データによります。
98
+ test_files: []