kamome 0.1.0 → 0.8.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.
- checksums.yaml +4 -4
- data/.rubocop.yml +3 -0
- data/Gemfile.lock +1 -1
- data/README.md +18 -4
- data/lib/kamome/configuration.rb +15 -2
- data/lib/kamome/csv_handler.rb +1 -1
- data/lib/kamome/downloader.rb +13 -6
- data/lib/kamome/loader.rb +9 -7
- data/lib/kamome/models/address.rb +19 -3
- data/lib/kamome/operation.rb +4 -0
- data/lib/kamome/transformations/cleaner.rb +1 -1
- data/lib/kamome/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 580db2ebe5e52ce51d8014ad886247ef89ae3ab9f8bccb82397a3c3ce0a15e75
|
4
|
+
data.tar.gz: 0605ca8f9f680d15fb87b2396e4f8db0930a8d3984ee18eaa5b3b95d51ec9a8b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6a2cd80afb342ff0ca2f68ff769a6f11b478dc06e5514d836142763102cff983a9760fa9bea9334d59fd76744a09c766a727cad3a5f79e52719a5c89330b9fa1
|
7
|
+
data.tar.gz: 2e17669f0e652e42ba98f8429ca034d5d770b0b7ba5bd5e0380402b05a7ad7d7d3883aa3c57738cbb638e376722eef40e656fc9f56d92f2e0ce98aa9318194e2
|
data/.rubocop.yml
CHANGED
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -12,6 +12,15 @@ Kamome.import_general_all do |model, lineno|
|
|
12
12
|
end
|
13
13
|
```
|
14
14
|
|
15
|
+
対応CSV
|
16
|
+
|
17
|
+
* 全国一括 (全件, 差分)
|
18
|
+
* 事業所(全件, 差分)
|
19
|
+
|
20
|
+
各CSVは共通のモデルにマッピングされます(type オプションで詳細なモデル or Hashに変更可能)
|
21
|
+
|
22
|
+
詳細は [Kamome::Models::Address](https://github.com/kengos/kamome/blob/master/lib/kamome/models/address.rb) を参照してください
|
23
|
+
|
15
24
|
## Installation
|
16
25
|
|
17
26
|
Add this line to your application's Gemfile:
|
@@ -43,7 +52,7 @@ end
|
|
43
52
|
```rb
|
44
53
|
date = Time.local(2018, 11) # 2018/11 更新分の取り込み
|
45
54
|
Kamome.import_general_diff(date: date) do |model, lineno|
|
46
|
-
if model.
|
55
|
+
if model.update?
|
47
56
|
puts "追加データ: #{model.zipcode} => #{model.prefecture}#{model.city}#{model.town}"
|
48
57
|
else
|
49
58
|
puts "削除データ: #{model.zipcode} => #{model.prefecture}#{model.city}#{model.town}"
|
@@ -64,7 +73,7 @@ end
|
|
64
73
|
```rb
|
65
74
|
date = Time.local(2018, 11) # 2018/11 更新分の取り込み
|
66
75
|
Kamome.import_jigyosho_diff(date: date) do |model, lineno|
|
67
|
-
if model.
|
76
|
+
if model.update?
|
68
77
|
puts "追加データ: #{model.zipcode} => #{model.prefecture}#{model.city}#{model.town}"
|
69
78
|
else
|
70
79
|
puts "削除データ: #{model.zipcode} => #{model.prefecture}#{model.city}#{model.town}"
|
@@ -104,6 +113,13 @@ Kamome.import_general_all(type: :detail or Kamome::Operation::TYPE_DETAIL)
|
|
104
113
|
|XXXXX(YYYY階)|XXXXX(YYYY階)|元の値を維持しています|
|
105
114
|
|XXXXX(YYYYY)|XXXXX|() の部分が除去されます|
|
106
115
|
|
116
|
+
※ 以下のような削除データが発生する可能性があり、 `town` が正確に取得できないことがあります
|
117
|
+
|
118
|
+
```
|
119
|
+
26106,"600 ","6008093","キョウトフ","キョウトシシモギョウク","タケヤチョウ","京都府","京都市下京区","竹屋町(高倉通綾小路下る、高倉通仏光寺上る、堺町通綾小路下",0,0,0,0,2,6
|
120
|
+
26106,"600 ","6008093","キョウトフ","キョウトシシモギョウク","タケヤチョウ","京都府","京都市下京区","る西入)",0,0,0,0,2,6
|
121
|
+
```
|
122
|
+
|
107
123
|
#### `Kamome::Models::General#town_kana`
|
108
124
|
|
109
125
|
|元データ|変換後|備考|
|
@@ -126,8 +142,6 @@ Kamome.import_general_all(type: :detail or Kamome::Operation::TYPE_DETAIL)
|
|
126
142
|
|
127
143
|
として設定されます
|
128
144
|
|
129
|
-
#### `Kamome::Models::General#town_kana`
|
130
|
-
|
131
145
|
## Development
|
132
146
|
|
133
147
|
After checking out the repo, run `bin/setup` to install dependencies. Then, run `make` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
data/lib/kamome/configuration.rb
CHANGED
@@ -2,17 +2,30 @@
|
|
2
2
|
|
3
3
|
module Kamome
|
4
4
|
class Configuration
|
5
|
-
require 'securerandom'
|
6
5
|
require 'tmpdir'
|
7
6
|
|
7
|
+
# @!attribute [rw] tmp_path
|
8
|
+
# @return [String]
|
8
9
|
attr_accessor :tmp_path
|
10
|
+
|
11
|
+
# @!attribute [rw] open_uri_options
|
12
|
+
# OpenURI options
|
13
|
+
# @see https://docs.ruby-lang.org/ja/latest/class/OpenURI.html
|
14
|
+
# @return [Hash]
|
9
15
|
attr_accessor :open_uri_options
|
10
16
|
|
17
|
+
# @!attribute [rw] cleanup
|
18
|
+
# If you do not want to delete the downloaded csv, please specify `false`
|
19
|
+
# @return [Bolean]
|
20
|
+
attr_accessor :cleanup
|
21
|
+
|
11
22
|
def initialize
|
12
|
-
@tmp_path = ::File.join(Dir.tmpdir, 'kamome'
|
23
|
+
@tmp_path = ::File.join(Dir.tmpdir, 'kamome')
|
13
24
|
@open_uri_options = {}
|
25
|
+
@cleanup = true
|
14
26
|
end
|
15
27
|
|
28
|
+
# @return [Pathname]
|
16
29
|
def working_directory
|
17
30
|
@working_directory ||= ::Pathname.new(@tmp_path.to_s)
|
18
31
|
end
|
data/lib/kamome/csv_handler.rb
CHANGED
data/lib/kamome/downloader.rb
CHANGED
@@ -26,7 +26,7 @@ module Kamome
|
|
26
26
|
|
27
27
|
# @return [Pathname] downloaded file
|
28
28
|
def download(url)
|
29
|
-
dest = @config.working_directory.join(
|
29
|
+
dest = @config.working_directory.join(download_filename)
|
30
30
|
::FileUtils.mkdir_p(dest.dirname)
|
31
31
|
|
32
32
|
::OpenURI.open_uri(url, @config.open_uri_options) do |response|
|
@@ -35,11 +35,13 @@ module Kamome
|
|
35
35
|
dest
|
36
36
|
end
|
37
37
|
|
38
|
-
def
|
39
|
-
#
|
40
|
-
|
38
|
+
def download_filename
|
39
|
+
::Time.now.strftime("%Y%m%d%H%M%S_#{SecureRandom.hex(3)}.zip")
|
40
|
+
end
|
41
41
|
|
42
|
+
def unpack(src)
|
42
43
|
dest = src.sub('.zip', '.csv')
|
44
|
+
content = convert_encoding(take_csv_entry(src))
|
43
45
|
::File.binwrite(dest, content)
|
44
46
|
dest
|
45
47
|
end
|
@@ -48,9 +50,14 @@ module Kamome
|
|
48
50
|
entry = ::Zip::File.open(src) do |zipfile|
|
49
51
|
zipfile.select { |o| o.name =~ /.*\.csv/i }.first
|
50
52
|
end
|
51
|
-
raise
|
53
|
+
raise 'Not found csvfile in zipfile' if entry.nil?
|
54
|
+
|
55
|
+
entry.get_input_stream.read
|
56
|
+
end
|
52
57
|
|
53
|
-
|
58
|
+
# convert encoding Shift_JIS to UTF-8 (and half width Katakana to full width Katakana)
|
59
|
+
def convert_encoding(content)
|
60
|
+
::NKF.nkf('-w -Lu', content)
|
54
61
|
end
|
55
62
|
end
|
56
63
|
end
|
data/lib/kamome/loader.rb
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
|
3
3
|
require 'kamome/downloader'
|
4
4
|
require 'kamome/csv_handler'
|
5
|
+
require 'digest'
|
5
6
|
|
6
7
|
module Kamome
|
7
8
|
class Loader
|
@@ -9,13 +10,11 @@ module Kamome
|
|
9
10
|
@config = config
|
10
11
|
end
|
11
12
|
|
13
|
+
# @return [Array] csv digest
|
12
14
|
def call(operation:, &block)
|
13
|
-
|
14
|
-
|
15
|
-
operation.urls.each do |url|
|
15
|
+
operation.urls.map do |url|
|
16
16
|
csv_path = download(url)
|
17
|
-
|
18
|
-
csv_path.delete
|
17
|
+
call_csv_handler(operation, csv_path, &block)
|
19
18
|
end
|
20
19
|
end
|
21
20
|
|
@@ -29,8 +28,11 @@ module Kamome
|
|
29
28
|
@downloader ||= ::Kamome::Downloader.new(@config)
|
30
29
|
end
|
31
30
|
|
32
|
-
def
|
33
|
-
::Kamome::CsvHandler.new(operation)
|
31
|
+
def call_csv_handler(operation, csv_path, &block)
|
32
|
+
::Kamome::CsvHandler.new(operation).call(csv_path, &block)
|
33
|
+
::Digest::SHA256.file(csv_path).to_s
|
34
|
+
ensure
|
35
|
+
csv_path.delete if @config.cleanup
|
34
36
|
end
|
35
37
|
end
|
36
38
|
end
|
@@ -51,12 +51,18 @@ module Kamome
|
|
51
51
|
# @return [Integer]
|
52
52
|
attr_accessor :state
|
53
53
|
|
54
|
+
STATE_NOT_CHANGE = 0
|
55
|
+
STATE_UPDATE = 1
|
56
|
+
STATE_DELETE = 2
|
57
|
+
|
58
|
+
# @params [Hash] model attributes
|
54
59
|
def initialize(params = {})
|
55
60
|
params.each do |key, value|
|
56
61
|
public_send("#{key}=", value)
|
57
62
|
end
|
58
63
|
end
|
59
64
|
|
65
|
+
# @return [Hash] model attributes
|
60
66
|
def attributes
|
61
67
|
{
|
62
68
|
code: code,
|
@@ -71,12 +77,22 @@ module Kamome
|
|
71
77
|
}
|
72
78
|
end
|
73
79
|
|
74
|
-
|
75
|
-
|
80
|
+
# Returns true when state is 1 or 2
|
81
|
+
# @return [Boolean]
|
82
|
+
def change?
|
83
|
+
updated? || deleted?
|
84
|
+
end
|
85
|
+
|
86
|
+
# Returns true when state is 1
|
87
|
+
# @return [Boolean]
|
88
|
+
def update?
|
89
|
+
state == STATE_UPDATE
|
76
90
|
end
|
77
91
|
|
92
|
+
# Returns true when state is 2
|
93
|
+
# @return [Boolean]
|
78
94
|
def delete?
|
79
|
-
state ==
|
95
|
+
state == STATE_DELETE
|
80
96
|
end
|
81
97
|
end
|
82
98
|
end
|
data/lib/kamome/operation.rb
CHANGED
@@ -10,7 +10,7 @@ module Kamome
|
|
10
10
|
value.sub(TOWN_KAN_SUB_RULE, '')
|
11
11
|
end
|
12
12
|
|
13
|
-
TOWN_SUB_RULE = /(((?!.+階))
|
13
|
+
TOWN_SUB_RULE = /(((?!.+階)).+|以下に掲載がない場合|.+の次に番地がくる場合|.+一円|)$/.freeze
|
14
14
|
def clean_town(value)
|
15
15
|
value.sub(TOWN_SUB_RULE, '')
|
16
16
|
end
|
data/lib/kamome/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kamome
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.8.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- kengos
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-12-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -184,5 +184,5 @@ rubyforge_project:
|
|
184
184
|
rubygems_version: 2.7.6
|
185
185
|
signing_key:
|
186
186
|
specification_version: 4
|
187
|
-
summary: kamome-0.
|
187
|
+
summary: kamome-0.8.0
|
188
188
|
test_files: []
|