jp_prefecture 0.11.0 → 1.0.0.rc1

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.
data/lib/jp_prefecture.rb CHANGED
@@ -1,8 +1,9 @@
1
- # coding: utf-8
2
- require "jp_prefecture/base"
3
- require "jp_prefecture/config"
4
- require "jp_prefecture/prefecture"
5
- require "jp_prefecture/version"
1
+ # frozen_string_literal: true
2
+
3
+ require 'jp_prefecture/base'
4
+ require 'jp_prefecture/config'
5
+ require 'jp_prefecture/prefecture'
6
+ require 'jp_prefecture/version'
6
7
 
7
8
  module JpPrefecture
8
9
  @config = Config.new
@@ -1,4 +1,5 @@
1
- # coding: utf-8
1
+ # frozen_string_literal: true
2
+
2
3
  module JpPrefecture
3
4
  module Base
4
5
  # モデル内で使用するための設定を行う
@@ -34,7 +35,7 @@ module JpPrefecture
34
35
  method_name = options[:method_name] || :prefecture
35
36
 
36
37
  define_method method_name do
37
- JpPrefecture::Prefecture.find(self.send(column_name))
38
+ JpPrefecture::Prefecture.find(send(column_name))
38
39
  end
39
40
  end
40
41
  end
@@ -1,9 +1,7 @@
1
- # -*- coding: utf-8 -*-
1
+ # frozen_string_literal: true
2
2
 
3
3
  module JpPrefecture
4
4
  class Config
5
- attr_accessor :mapping_data
6
- attr_accessor :zip_mapping_data
5
+ attr_accessor :mapping_data, :zip_mapping_data
7
6
  end
8
7
  end
9
-
@@ -1,10 +1,10 @@
1
- # coding: utf-8
1
+ # frozen_string_literal: true
2
+
2
3
  require 'yaml'
3
4
 
4
5
  module JpPrefecture
5
6
  # コードと都道府県のマッピング
6
7
  module Mapping
7
-
8
8
  filepath = File.join(File.dirname(__FILE__), '../../data/prefecture.yml')
9
9
  @data = YAML.load_file(filepath)
10
10
 
@@ -1,98 +1,46 @@
1
- # coding: utf-8
2
- require "jp_prefecture/mapping"
3
- require "jp_prefecture/zip_mapping"
1
+ # frozen_string_literal: true
2
+
3
+ require 'jp_prefecture/prefecture/finder'
4
+ require 'jp_prefecture/mapping'
5
+ require 'jp_prefecture/zip_mapping'
4
6
 
5
7
  module JpPrefecture
6
8
  # 都道府県のコードと名前を扱うクラス
7
9
  class Prefecture
8
-
9
10
  attr_accessor :code, :name, :name_e, :name_h, :name_k, :zips, :area, :type
10
11
 
11
- # 配列から都道府県クラスを生成
12
+ # 都道府県コードから都道府県インスタンスを作成
12
13
  #
13
14
  # @example
14
- # # コード/名前から都道府県クラスを生成
15
- # JpPrefecture::Prefecture.build(1, '北海道', 'Hokkaido')
15
+ # # 都道府県コードから都道府県インスタンスを生成
16
+ # JpPrefecture::Prefecture.build_by_code(1)
16
17
  #
17
- # @param pref [Integer] 都道府県コード
18
- # @param name [String] 都道府県名
19
- # @param name_e [String] 都道府県名(英語表記)
20
- # @param optional name_h [String] 都道府県名(ひらがな表記)
21
- # @param optional name_k [String] 都道府県名(カタカナ表記)
22
- # @param optional area [String] 地方名
23
- # @param zips [Array] 郵便番号の配列 (array of ranges, can be used in ARel, e.g. User.where(zip: prefecture.zips))
24
- def self.build(code, name, name_e, name_h = nil, name_k = nil, area = nil)
25
- pref = self.new
26
-
27
- pref.code = code
28
- pref.name = name
29
- pref.name_e = name_e.capitalize
30
- pref.name_h = name_h
31
- pref.name_k = name_k
32
- pref.zips = ZipMapping.data[code]
33
- pref.area = area
34
- pref.type =
18
+ # @param code [Integer] 都道府県コード
19
+ # @return [JpPrefecture::Prefecture] 都道府県インスタンス
20
+ # @return [nil] 都道府県が見つからない場合は nil
21
+ def self.build_by_code(code) # rubocop:disable Metrics/AbcSize
22
+ result = Mapping.data[code]
23
+ return unless result
24
+
25
+ pref = new
26
+
27
+ pref.code = code
28
+ pref.name = result[:name]
29
+ pref.name_e = result[:name_e].capitalize
30
+ pref.name_h = result[:name_h]
31
+ pref.name_k = result[:name_k]
32
+ pref.zips = ZipMapping.data[code]
33
+ pref.area = result[:area]
34
+ pref.type =
35
35
  case pref.name[-1]
36
- when "", "", "", ""
36
+ when '', '', '', ''
37
37
  pref.name[-1]
38
- else
39
- nil
40
38
  end
41
39
 
42
40
  pref
43
41
  end
44
42
 
45
- # 都道府県を検索
46
- #
47
- # @example
48
- # # 都道府県コードから検索
49
- # JpPrefecture::Prefecture.find(1)
50
- # JpPrefecture::Prefecture.find(code: 1)
51
- #
52
- # # 都道府県名から検索
53
- # JpPrefecture::Prefecture.find(name: '北海道')
54
- #
55
- # # 都道府県名から検索(前方一致)
56
- # JpPrefecture::Prefecture.find(name: '東京')
57
- #
58
- # # 英語表記の都道府県名から検索
59
- # JpPrefecture::Prefecture.find(name: 'Hokkaido')
60
- # JpPrefecture::Prefecture.find(name: 'hokkaido')
61
- #
62
- # @param args [Integer] 都道府県コード
63
- # @param [Hash] args 検索条件
64
- # @option args [Integer] :code 都道府県コード
65
- # @option args [String] :name 都道府県名/英語/ひらがな/カタカナ表記の都道府県名
66
- # @option args [Integer] :zip 郵便番号
67
- # @return [JpPrefecture::Prefecture] 都道府県が見つかった場合は都道府県クラス
68
- # @return [nil] 都道府県が見つからない場合は nil
69
- def self.find(args)
70
- return if args.nil?
71
-
72
- if args.is_a?(Integer) || args.is_a?(String)
73
- code = args.to_i
74
- else
75
- code =
76
- case args.keys[0]
77
- when :name
78
- self.find_code_by_name(args[:name])
79
- when :code
80
- args[:code].to_i
81
- when :zip
82
- ZipMapping.code_for_zip(args[:zip].to_i)
83
- end
84
- end
85
-
86
- names = Mapping.data[code]
87
-
88
- return unless names
89
-
90
- self.build(code,
91
- names[:name], names[:name_e],
92
- names[:name_h], names[:name_k], names[:area])
93
- end
94
-
95
- # すべての都道府県クラスを返す
43
+ # すべての都道府県を取得
96
44
  #
97
45
  # @example
98
46
  # # 都道府県の一覧を取得
@@ -104,38 +52,56 @@ module JpPrefecture
104
52
  # # collection_select で選択肢を生成(英語表記)
105
53
  # f.collection_select :prefecture_code, JpPrefecture::Prefecture.all, :code, :name_e
106
54
  #
107
- # @return [Array] 都道府県クラスの配列
55
+ # @return [Array<JpPrefecture::Prefecture>] 都道府県インスタンスの配列
108
56
  def self.all
109
- Mapping.data.map do |pref|
110
- names = pref[1]
111
- self.build(pref[0],
112
- names[:name], names[:name_e],
113
- names[:name_h], names[:name_k], names[:area])
114
- end
57
+ Mapping.data.map { |code, _| build_by_code(code) }
115
58
  end
116
59
 
117
- protected
118
-
119
- # 名前から都道府県コードを前方一致で検索
60
+ # 都道府県を検索
61
+ #
62
+ # 文字列は前方一致で検索する
63
+ #
64
+ # @example
65
+ # # 都道府県コードを検索
66
+ # JpPrefecture::Prefecture.find(1)
67
+ # JpPrefecture::Prefecture.find(code: 1)
68
+ #
69
+ # # 都道府県名を検索
70
+ # JpPrefecture::Prefecture.find(name: '北海道')
71
+ # JpPrefecture::Prefecture.find(name: '東京')
72
+ #
73
+ # # 英語表記の都道府県名を検索
74
+ # JpPrefecture::Prefecture.find(name_e: 'Hokkaido')
75
+ # JpPrefecture::Prefecture.find(name_e: 'hokkaido')
76
+ #
77
+ # # ひらがな表記の都道府県名を検索
78
+ # JpPrefecture::Prefecture.find(name_h: 'ほっかいどう')
120
79
  #
121
- # @param name [String] 検索する都道府県名
122
- # @return [Integer] 見つかった場合は都道府県コード
123
- # @return [nil] 見つからない場合は nil
124
- def self.find_code_by_name(name)
125
- return nil if name.nil? || name.empty?
80
+ # # カタカナ表記の都道府県名を検索
81
+ # JpPrefecture::Prefecture.find(name_k: 'ホッカイドウ')
82
+ #
83
+ # # すべての項目を検索
84
+ # JpPrefecture::Prefecture.find(all_fields: '東')
85
+ #
86
+ # @param args [Integer] 都道府県コード
87
+ # @param args [Hash<Symbol, Integer>] :code 都道府県コード
88
+ # @param args [Hash<Symbol, String>] :name 漢字表記/:name_e 英語表記/:name_h ひらがな表記/:name_k カタカナ表記
89
+ # @param args [Hash<Symbol, Integer>] :zip 郵便番号
90
+ # @param args [Hash<Symbol, (String, Integer)>] :all_fields マッピングに定義しているすべてのフィールドから検索
91
+ # @return [JpPrefecture::Prefecture] 都道府県が見つかった場合は都道府県インスタンス
92
+ # @return [nil] 都道府県が見つからない場合は nil
93
+ def self.find(args)
94
+ return if args.nil?
126
95
 
127
- name = name.downcase
96
+ case args
97
+ when Integer, String
98
+ JpPrefecture::Prefecture::Finder.new.find(field: nil, value: args)
99
+ when Hash
100
+ search_field = args.keys.first
101
+ search_value = args.values.first
128
102
 
129
- Mapping.data.each do |m|
130
- m[1].values.each do |v|
131
- if v.start_with?(name)
132
- return m[0]
133
- end
134
- end
103
+ JpPrefecture::Prefecture::Finder.new.find(field: search_field, value: search_value)
135
104
  end
136
-
137
- nil
138
105
  end
139
-
140
106
  end
141
107
  end
@@ -0,0 +1,71 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'jp_prefecture/mapping'
4
+ require 'jp_prefecture/zip_mapping'
5
+
6
+ module JpPrefecture
7
+ class Prefecture
8
+ # 都道府県の検索を行うクラス
9
+ class Finder
10
+ def initialize
11
+ @mapping = Mapping.data
12
+ end
13
+
14
+ # 指定した項目を検索
15
+ #
16
+ # @param field [Symbol] 検索する項目。nil の場合は都道府県コードとして扱う
17
+ # @param value [String, Integer] 検索する内容
18
+ # @return [JpPrefecture::Prefecture] 都道府県が見つかった場合は都道府県インスタンス
19
+ # @return [nil] 都道府県が見つからない場合は nil
20
+ def find(field:, value:)
21
+ code = find_code(field, value)
22
+ JpPrefecture::Prefecture.build_by_code(code)
23
+ end
24
+
25
+ private
26
+
27
+ # @param field [Symbol] 検索する項目
28
+ # @param value [String, Integer] 検索する内容
29
+ # @return [Integer] 見つかった場合は都道府県コード
30
+ # @return [nil] 見つからない場合は nil
31
+ def find_code(field, value)
32
+ return value.to_i if field.nil?
33
+
34
+ case field
35
+ when :all_fields
36
+ find_code_by_name_from_all_fields(value)
37
+ when :name, :name_h, :name_k, :name_e
38
+ find_code_by_name(field, value)
39
+ when :code
40
+ value.to_i
41
+ when :zip
42
+ ZipMapping.code_for_zip(value.to_i)
43
+ end
44
+ end
45
+
46
+ # すべての項目を前方一致で検索
47
+ def find_code_by_name_from_all_fields(value)
48
+ return if value.nil? || value.empty?
49
+
50
+ value = value.downcase
51
+
52
+ @mapping.each do |m|
53
+ m[1].each_value do |v|
54
+ return m[0] if v.start_with?(value)
55
+ end
56
+ end
57
+ end
58
+
59
+ # 指定した項目を前方一致で検索
60
+ def find_code_by_name(field, value)
61
+ return if value.nil? || value.empty?
62
+
63
+ value = value.downcase
64
+
65
+ @mapping.each do |m|
66
+ return m[0] if m[1][field].start_with?(value)
67
+ end
68
+ end
69
+ end
70
+ end
71
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module JpPrefecture
2
- VERSION = '0.11.0'
4
+ VERSION = '1.0.0.rc1'
3
5
  end
@@ -1,21 +1,21 @@
1
- # coding: utf-8
1
+ # frozen_string_literal: true
2
+
2
3
  require 'yaml'
3
4
 
4
5
  module JpPrefecture
5
6
  # コードと郵便番号のマッピング
6
7
  module ZipMapping
7
-
8
8
  filepath = File.join(File.dirname(__FILE__), '../../data/zip.yml')
9
9
  @data = YAML.load_file(filepath)
10
- @data = Hash[*@data.collect{|code, arr|[code, arr.collect{|zip_from, zip_to|zip_from..zip_to}]}.flatten(1)]
10
+ @data = Hash[*@data.collect { |code, arr| [code, arr.collect { |zip_from, zip_to| zip_from..zip_to }] }.flatten(1)]
11
11
 
12
12
  def self.data
13
13
  JpPrefecture.config.zip_mapping_data || @data
14
14
  end
15
15
 
16
- def self.code_for_zip zip
17
- self.data.select do |code, zip_ranges|
18
- zip_ranges.find{|range|range.include? zip}
16
+ def self.code_for_zip(zip)
17
+ data.select do |_code, zip_ranges|
18
+ zip_ranges.find { |range| range.include? zip }
19
19
  end.keys.first
20
20
  end
21
21
  end
metadata CHANGED
@@ -1,15 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jp_prefecture
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.11.0
4
+ version: 1.0.0.rc1
5
5
  platform: ruby
6
6
  authors:
7
- - chocoby
7
+ - "@chocoby"
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-12-18 00:00:00.000000000 Z
11
+ date: 2021-02-10 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: activerecord
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 5.0.0
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 5.0.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: appraisal
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
13
41
  - !ruby/object:Gem::Dependency
14
42
  name: rake
15
43
  requirement: !ruby/object:Gem::Requirement
@@ -39,21 +67,49 @@ dependencies:
39
67
  - !ruby/object:Gem::Version
40
68
  version: '0'
41
69
  - !ruby/object:Gem::Dependency
42
- name: activerecord
70
+ name: rubocop
43
71
  requirement: !ruby/object:Gem::Requirement
44
72
  requirements:
45
73
  - - ">="
46
74
  - !ruby/object:Gem::Version
47
- version: 4.2.0
75
+ version: '0'
48
76
  type: :development
49
77
  prerelease: false
50
78
  version_requirements: !ruby/object:Gem::Requirement
51
79
  requirements:
52
80
  - - ">="
53
81
  - !ruby/object:Gem::Version
54
- version: 4.2.0
82
+ version: '0'
55
83
  - !ruby/object:Gem::Dependency
56
- name: sqlite3
84
+ name: rubocop-performance
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rubocop-rake
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: rubocop-rspec
57
113
  requirement: !ruby/object:Gem::Requirement
58
114
  requirements:
59
115
  - - ">="
@@ -95,7 +151,7 @@ dependencies:
95
151
  - !ruby/object:Gem::Version
96
152
  version: '0'
97
153
  - !ruby/object:Gem::Dependency
98
- name: appraisal
154
+ name: sqlite3
99
155
  requirement: !ruby/object:Gem::Requirement
100
156
  requirements:
101
157
  - - ">="
@@ -108,51 +164,27 @@ dependencies:
108
164
  - - ">="
109
165
  - !ruby/object:Gem::Version
110
166
  version: '0'
111
- description: Convert japan prefecture code(JIS X 0402 based) into prefecture name.
167
+ description: Convert japan prefecture code (JIS X 0402 based) into prefecture name.
112
168
  email:
113
169
  - chocoby@gmail.com
114
170
  executables: []
115
171
  extensions: []
116
172
  extra_rdoc_files: []
117
173
  files:
118
- - ".github/workflows/build.yml"
119
- - ".gitignore"
120
- - ".rspec"
121
- - ".yardopts"
122
- - Appraisals
123
174
  - CHANGELOG.md
124
- - Gemfile
125
- - MIT-LICENSE
175
+ - LICENSE
126
176
  - README.md
127
177
  - README_EN.md
128
- - Rakefile
129
178
  - data/prefecture.yml
130
179
  - data/zip.yml
131
- - gemfiles/rails32.gemfile
132
- - gemfiles/rails40.gemfile
133
- - gemfiles/rails41.gemfile
134
- - gemfiles/rails42.gemfile
135
- - gemfiles/rails50.gemfile
136
- - gemfiles/rails51.gemfile
137
- - gemfiles/rails52.gemfile
138
- - gemfiles/rails60.gemfile
139
- - gemfiles/rails61.gemfile
140
- - jp_prefecture.gemspec
141
180
  - lib/jp_prefecture.rb
142
181
  - lib/jp_prefecture/base.rb
143
182
  - lib/jp_prefecture/config.rb
144
183
  - lib/jp_prefecture/mapping.rb
145
184
  - lib/jp_prefecture/prefecture.rb
185
+ - lib/jp_prefecture/prefecture/finder.rb
146
186
  - lib/jp_prefecture/version.rb
147
187
  - lib/jp_prefecture/zip_mapping.rb
148
- - spec/base_spec.rb
149
- - spec/config_spec.rb
150
- - spec/fixtures/prefecture.yml
151
- - spec/jp_prefecture_spec.rb
152
- - spec/mapping_spec.rb
153
- - spec/prefecture_spec.rb
154
- - spec/spec_helper.rb
155
- - spec/zip_mapping_spec.rb
156
188
  homepage: https://github.com/chocoby/jp_prefecture
157
189
  licenses:
158
190
  - MIT
@@ -165,23 +197,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
165
197
  requirements:
166
198
  - - ">="
167
199
  - !ruby/object:Gem::Version
168
- version: '0'
200
+ version: 2.4.0
169
201
  required_rubygems_version: !ruby/object:Gem::Requirement
170
202
  requirements:
171
- - - ">="
203
+ - - ">"
172
204
  - !ruby/object:Gem::Version
173
- version: '0'
205
+ version: 1.3.1
174
206
  requirements: []
175
- rubygems_version: 3.2.2
207
+ rubygems_version: 3.1.4
176
208
  signing_key:
177
209
  specification_version: 4
178
210
  summary: Convert japan prefecture code into prefecture name
179
- test_files:
180
- - spec/base_spec.rb
181
- - spec/config_spec.rb
182
- - spec/fixtures/prefecture.yml
183
- - spec/jp_prefecture_spec.rb
184
- - spec/mapping_spec.rb
185
- - spec/prefecture_spec.rb
186
- - spec/spec_helper.rb
187
- - spec/zip_mapping_spec.rb
211
+ test_files: []