jp_address 1.0.0 → 1.0.1

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 47f6300a25d529f2ec5b5448d584b57c7c21acdf5da71e8e1cdbf7c1f2ca2324
4
- data.tar.gz: 1779a70d87802bf6c76ea248e82ff1e06ab519ec566bcca644707115bbb8525a
3
+ metadata.gz: ef948c1cac5b64467a6007a4679ce93ef6be1e68e367dbf52cabd69f7d3099f5
4
+ data.tar.gz: e08a3c24c255492740a037f02f27b09b3522034186753711c1f0fe1f524afa8a
5
5
  SHA512:
6
- metadata.gz: 65c7442c0e8a62f79c0b22730fb61ddcac2fd734fa8fb83abff2d6759c7462f83de449b9d7d83ff1b1cc198215b216b4e72e81061e8d8874b6d10714bc7a9bec
7
- data.tar.gz: 3ef126b87da8a5271f315190f9e76a5c83f93cf5b4d0998417ba7747ade6ecc44efb3a17d21e8b94dd23b7d47cb090bbf16eb9b189501cb35f3e9a32f52b0963
6
+ metadata.gz: 489a71906ce28abc642138bc4129d8f3608098d1d6a666d43bef11ee083e6a31ccc4364f51a55a37ddae0eaad5e98bac1abe57041b5fbafd9aaf1a83d8cb2afb
7
+ data.tar.gz: 44d2f3ea727acff307d755a186817f341b6fb7e0b539822e65f39a294b78ec066903a5fa062835b367e3353bd05414ead9a84eadfbb4bb9d003ac7fa1a3d6d95
data/README.md ADDED
@@ -0,0 +1,241 @@
1
+ # Ruby on Rails 6 で 郵便番号住所検索 な gem
2
+
3
+ ## JpAddressとは
4
+ 日本郵便の「[郵便番号データ](https://www.post.japanpost.jp/zipcode/dl/oogaki-zip.html)」を Rails 6.1 で使用するための gem です。
5
+ 以下の機能を提供します。
6
+
7
+ * [[郵便番号データ](https://www.post.japanpost.jp/zipcode/dl/oogaki/zip/ken_all.zip "ken_all.zip")]をダウンロードして自前DBのテーブル(jp_address_zipcodes)にロードするクラスメソッド。(```JpAddress::Zipcode.load_master_data```)
8
+ * 郵便番号を受け取り都道府県名と住所をJSONで返却するAPI。
9
+ (```jp_address/zipcodes#search```)
10
+
11
+ 要するに、「**郵便番号住所検索 ruby gem**」でググった人向けの gem です。
12
+
13
+ APIはお使いのRailsアプリケーションにマウントして使います。外部のサービスに依存しません。<br>
14
+ あと必要なのは、戻ってくるJSONを加工してHTML要素にセットするJavaScriptの記述だけです。<br>
15
+ (本記事下部にサンプルコードを掲載しています。)
16
+
17
+ ### インストール
18
+ GemFileに追記
19
+ ```ruby
20
+ gem 'jp_address'
21
+ ```
22
+
23
+ ### テーブル(jp_address_zipcodes)の作成
24
+ ```
25
+ $ bundle
26
+ $ bundle exec rails jp_address:install:migrations
27
+ $ bundle exec rails db:migrate
28
+ ```
29
+
30
+ ### テーブルへの郵便番号データのロード
31
+ ```
32
+ # 開発環境
33
+ $ bundle exec rails runner -e development 'JpAddress::Zipcode.load_master_data'
34
+
35
+ # 本番環境
36
+ $ bundle exec rails runner -e production 'JpAddress::Zipcode.load_master_data'
37
+ ```
38
+
39
+ 環境にもよりますが、1~3分ぐらいかかると思います。
40
+
41
+ ※ APP_ROOT/tmp/ を作業ディレクトリに使用しています。<br>
42
+ ※ 最初にテーブルをトランケートしますので、毎回「全件insert」になります。
43
+
44
+ ### APIのマウント
45
+ Railsアプリの config/routes.rb に追記。
46
+ ```ruby
47
+ mount JpAddress::Engine, at: "/jp_address"
48
+ ```
49
+
50
+ ### APIの利用
51
+ /jp_address にマウントした場合、下記URLへGETリクエストをすることで、JSONを取得できます。<br>
52
+ 後はこれを好きに加工してテキストボックスなどにセットして使ってください。
53
+
54
+ **get リクエスト先**
55
+ ```
56
+ http://localhost:3000/jp_address/zipcodes/search?zip=5330033
57
+ ```
58
+
59
+ **API が返す JSON**
60
+ ```js script
61
+ {"id":84280,"zip":"5330033","prefecture":"大阪府","city":"大阪市東淀川区","town":"東中島"}
62
+ ```
63
+
64
+ ### APIを利用するサンプル JavaScript
65
+ フォームに
66
+ 1. #zipcode (郵便番号を入力するテキストボックス)
67
+ 2. #prefecture_id (いわゆる都道府県プルダウン)
68
+ 3. #address (住所を表示するテキストボックス)
69
+
70
+ の3要素があるとします。<br>
71
+ #zipcodeに入れられた値を keyup イベントで拾ってAPIを叩き、都道府県プルダウンを選択し、住所をセットするサンプルです。
72
+
73
+ 都道府県プルダウンは、戻ってくるJSONの "prefecture" すなわち都道府県名で選択します。<br>
74
+ ですので、お持ちの都道府県マスターの各レコードがどのようなIDを持っていても構いません。
75
+
76
+ ※ JQuery の存在を前提にしています。<br>
77
+ ※ 郵便番号の半角ハイフンは自動でカットされます。<br>
78
+ ※ もともと CoffeeScript で書いてあったソースを decaffeinate したものですので冗長です。本質的な処理はAddressSearch が担っているだけで、他の関数は decaffeinate に必要なだけです。
79
+
80
+ #### フォーム
81
+ ```
82
+ <form>
83
+ <input type="text" name="zipcode" id="zipcode">
84
+ <select name="prefecture_id" id="prefecture_id">
85
+ <option value="1">北海道</option>
86
+ <option value="2">青森県</option>
87
+ <option value="3">岩手県</option>
88
+ <option value="4">宮城県</option>
89
+ <option value="5">秋田県</option>
90
+ <option value="6">山形県</option>
91
+ <option value="7">福島県</option>
92
+ <option value="8">東京都</option>
93
+ <option value="9">神奈川県</option>
94
+ <option value="10">埼玉県</option>
95
+ <option value="11">千葉県</option>
96
+ <option value="12">茨城県</option>
97
+ <option value="13">栃木県</option>
98
+ <option value="14">群馬県</option>
99
+ <option value="15">山梨県</option>
100
+ <option value="16">新潟県</option>
101
+ <option value="17">長野県</option>
102
+ <option value="18">富山県</option>
103
+ <option value="19">石川県</option>
104
+ <option value="20">福井県</option>
105
+ <option value="21">愛知県</option>
106
+ <option value="22">岐阜県</option>
107
+ <option value="23">静岡県</option>
108
+ <option value="24">三重県</option>
109
+ <option value="25">大阪府</option>
110
+ <option value="26">兵庫県</option>
111
+ <option value="27">京都府</option>
112
+ <option value="28">滋賀県</option>
113
+ <option value="29">奈良県</option>
114
+ <option value="30">和歌山県</option>
115
+ <option value="31">鳥取県</option>
116
+ <option value="32">島根県</option>
117
+ <option value="33">岡山県</option>
118
+ <option value="34">広島県</option>
119
+ <option value="35">山口県</option>
120
+ <option value="36">徳島県</option>
121
+ <option value="37">香川県</option>
122
+ <option value="38">愛媛県</option>
123
+ <option value="39">高知県</option>
124
+ <option value="40">福岡県</option>
125
+ <option value="41">佐賀県</option>
126
+ <option value="42">長崎県</option>
127
+ <option value="43">熊本県</option>
128
+ <option value="44">大分県</option>
129
+ <option value="45">宮崎県</option>
130
+ <option value="46">鹿児島県</option>
131
+ <option value="47">沖縄県</option>
132
+ </select>
133
+ <input type="text" name="address" id="address">
134
+ </form>
135
+ ```
136
+
137
+ #### application.js など共通に読み込まれるファイルに配置するJavaScript
138
+
139
+ ```js script
140
+ function _classCallCheck(instance, Constructor) {
141
+ if (!(instance instanceof Constructor)) {
142
+ throw new TypeError("Cannot call a class as a function");
143
+ }
144
+ }
145
+
146
+ function _defineProperties(target, props) {
147
+ for (var i = 0; i < props.length; i++) {
148
+ var descriptor = props[i];
149
+ descriptor.enumerable = descriptor.enumerable || false;
150
+ descriptor.configurable = true;
151
+
152
+ if ("value" in descriptor)
153
+ descriptor.writable = true;
154
+ Object.defineProperty(target, descriptor.key, descriptor);
155
+ }
156
+ }
157
+
158
+ function _createClass(Constructor, protoProps, staticProps) {
159
+ if (protoProps)
160
+ _defineProperties(Constructor.prototype, protoProps);
161
+ if (staticProps)
162
+ _defineProperties(Constructor, staticProps);
163
+ return Constructor;
164
+ }
165
+
166
+ var AddressSearch = function() {
167
+ "use strict";
168
+ function AddressSearch(zip_elem_id, prefecture_elem_id, address_elem_id) {
169
+ _classCallCheck(this, AddressSearch);
170
+ this.zip = $(zip_elem_id);
171
+ this.prefecture = $(prefecture_elem_id);
172
+ this.address = $(address_elem_id);
173
+ this.prefecture_elem_id = prefecture_elem_id;
174
+ }
175
+
176
+ _createClass(AddressSearch, [{
177
+ key: "_remove_hyphen",
178
+ value: function _remove_hyphen() {
179
+ return this.zip.val(this.zip.val().replace(/-/, ''));
180
+ }
181
+ }, {
182
+ key: "_clear_current_value",
183
+ value: function _clear_current_value() {
184
+ $(this.prefecture_elem_id + ' >option:eq(0)').prop('selected', true);
185
+ return this.address.val('');
186
+ }
187
+ }, {
188
+ key: "_set_prefecture",
189
+ value: function _set_prefecture(json) {
190
+ return $(this.prefecture_elem_id + ' > option').each(function() {
191
+ if ($(this).text() === json['prefecture']) {
192
+ return $(this).prop('selected', true);
193
+ }
194
+ });
195
+ }
196
+ }, {
197
+ key: "_set_address",
198
+ value: function _set_address(json) {
199
+ return this.address.val(json['city'] + json['town']);
200
+ }
201
+ }, {
202
+ key: "_call_api",
203
+ value: function _call_api() {
204
+ var _this = this;
205
+ return $.getJSON('/jp_address/zipcodes/search', {zip: this.zip.val()}, function(json) {
206
+ if (json['id'] === null) {
207
+ return _this._clear_current_value();
208
+ } else {
209
+ _this._set_prefecture(json);
210
+ return _this._set_address(json);
211
+ }
212
+ });
213
+ }
214
+ }, {
215
+ key: "execute",
216
+ value: function execute() {
217
+ this._remove_hyphen();
218
+ if (this.zip.val().length === 7) {
219
+ return this._call_api();
220
+ }
221
+ }
222
+ }]);
223
+
224
+ return AddressSearch;
225
+ }();
226
+ ```
227
+
228
+ #### フォームのあるページに配置するJavaScript
229
+ ```js script
230
+ // #zipcode, #prefecture_id, #address を各自の環境に合わせて書き換えてください。
231
+ $(function() {
232
+ var address_search = new AddressSearch('#zipcode', '#prefecture_id', '#address');
233
+ $('#zipcode').keyup(function() {
234
+ address_search.execute();
235
+ });
236
+ });
237
+ ```
238
+
239
+ ##### 作者
240
+ Copyright 2016 (c) Tad Kam, under MIT License.<br>
241
+ Tad Kam <densya203@skult.jp>
data/Rakefile CHANGED
@@ -10,7 +10,6 @@ RDoc::Task.new(:rdoc) do |rdoc|
10
10
  rdoc.rdoc_dir = 'rdoc'
11
11
  rdoc.title = 'JpAddress'
12
12
  rdoc.options << '--line-numbers'
13
- rdoc.rdoc_files.include('README.rdoc')
14
13
  rdoc.rdoc_files.include('lib/**/*.rb')
15
14
  end
16
15
 
@@ -31,4 +30,4 @@ RSpec::Core::RakeTask.new(:spec) do |spec|
31
30
  end
32
31
 
33
32
  task :default => :spec
34
- task :test => :spec # for rubygems-test
33
+ task :test => :spec
@@ -1,4 +1,4 @@
1
- class CreateJpAddressZipcodes < ActiveRecord::Migration[6.1]
1
+ class CreateJpAddressZipcodes < ActiveRecord::Migration[5.0]
2
2
  def change
3
3
  create_table :jp_address_zipcodes do |t|
4
4
  t.string :zip , null: false, index: true
@@ -1,3 +1,3 @@
1
1
  module JpAddress
2
- VERSION = "1.0.0"
2
+ VERSION = "1.0.1"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jp_address
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tad Kam
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-06-09 00:00:00.000000000 Z
11
+ date: 2021-06-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rubyzip
@@ -108,7 +108,7 @@ dependencies:
108
108
  - - ">="
109
109
  - !ruby/object:Gem::Version
110
110
  version: '0'
111
- description: JpAddress is simple japan-zipcode-address-search API. You can load master-data
111
+ description: JpAddress is simple japan-zipcode-address-search API. You can load master-data
112
112
  from JapanPost and mount address-search-api to your rails application.
113
113
  email:
114
114
  - densya203@skult.jp
@@ -117,6 +117,7 @@ extensions: []
117
117
  extra_rdoc_files: []
118
118
  files:
119
119
  - MIT-LICENSE
120
+ - README.md
120
121
  - Rakefile
121
122
  - app/assets/javascripts/jp_address/application.js
122
123
  - app/assets/stylesheets/jp_address/application.css