kamome 0.9.0 → 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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 35ffe91d4c66bc1f179e7db9980ecbf6800633de1af8f3de76645dffb926d423
4
- data.tar.gz: 5e373d056502af1d4f6b1ca51d0ca44d2adf26daaef07d706e79ca115472fd9a
3
+ metadata.gz: 543759c4f572e9af3e2d98b374bfda5b71b048a873850ae13be1fe2915a783f4
4
+ data.tar.gz: cf3ccc4d1dd1e416f52df2376b5fae4337effa18426344fa7f35856d034a3997
5
5
  SHA512:
6
- metadata.gz: 4b41f5d5424612e149377fd3deff5b29e5cfe5e88addca51f89c49deeabe3a0e50111686a429f1ce0b314239fe5508222fc06f8277fd5adb10095961c8bc9c52
7
- data.tar.gz: 759139eb2ce52cd217b576f814fae768e78af52f330a6d78bafee4502270157a34e1a058e438411a227bfd8035276b16ac9a2ce1ee80f6540a67bb8faa6d6c5d
6
+ metadata.gz: c91d7646c2bc4f5aaad10382dde10d93a694eaf32d8af543648d48ebd1ea4528cbdc65ea846c705206661e88414cc5d7bdde17a513959dce1c83cafc4e5ad8c7
7
+ data.tar.gz: 268e34ed33d3dddca66a184385d5d1dd07803e34f862b8ba82a45557dd38ee2a0822bcbeaa6ad2bf62c7dbae725e9126911fd194efccf105a4754851b2247644
@@ -26,3 +26,6 @@ RSpec/NestedGroups:
26
26
 
27
27
  RSpec/MessageSpies:
28
28
  EnforcedStyle: receive
29
+
30
+ RSpec/MultipleExpectations:
31
+ Enabled: false
@@ -1,6 +1,14 @@
1
1
  # Changelogs
2
2
 
3
- ## v0.9.0
3
+ ## 1.0.0
4
+
5
+ * Add executable command: `kamome`
6
+ * kamome generate_csv
7
+ * kamome generate_diff_csv [--date=1810]
8
+ * kamome generate_json
9
+ * kamome generate_diff_json [--date=1810]
10
+
11
+ ## 0.9.0
4
12
 
5
13
  * Fixed [Unexpected town value](https://github.com/kengos/kamome/issues/1)
6
14
  * Skip `block.call` in the case of `#ambisous_town` is true and is not a first appearance model
@@ -1,8 +1,9 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- kamome (0.9.0)
4
+ kamome (1.0.0)
5
5
  rubyzip (~> 1.2)
6
+ thor (~> 0.19)
6
7
 
7
8
  GEM
8
9
  remote: https://rubygems.org/
@@ -48,6 +49,7 @@ GEM
48
49
  ruby-progressbar (1.10.0)
49
50
  rubyzip (1.2.2)
50
51
  safe_yaml (1.0.4)
52
+ thor (0.20.3)
51
53
  unicode-display_width (1.4.0)
52
54
  vcr (4.0.0)
53
55
  webmock (3.4.2)
data/README.md CHANGED
@@ -81,6 +81,22 @@ Kamome.import_jigyosho_diff(date: date) do |model, lineno|
81
81
  end
82
82
  ```
83
83
 
84
+ ## Cli commands
85
+
86
+ ```bash
87
+ $ kamome generate_csv all.csv
88
+ $ kamome generate_diff_csv diff.csv --date=1810
89
+ $ kamome generate_json all.json
90
+ $ kamome generate_diff_json diff.json
91
+ ```
92
+
93
+ For more informations:
94
+
95
+ ```bash
96
+ $ kamome -h
97
+ $ kamome help [command]
98
+ ```
99
+
84
100
  ## FAQ
85
101
 
86
102
  ### `Kamome.import_xxx` の model の型を変換したい
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require 'bundler/setup'
5
+ require 'kamome'
6
+ require 'kamome/cli'
7
+
8
+ Kamome::Cli.start(ARGV)
@@ -44,4 +44,5 @@ Gem::Specification.new do |spec|
44
44
  spec.add_development_dependency 'rubocop', '~> 0.60'
45
45
  spec.add_development_dependency 'rubocop-rspec', '~> 1.30'
46
46
  spec.add_dependency 'rubyzip', '~> 1.2'
47
+ spec.add_dependency 'thor', '~> 0.19'
47
48
  end
@@ -61,14 +61,14 @@ module Kamome
61
61
  loader.call(operation: operation, &block)
62
62
  end
63
63
 
64
+ def loader
65
+ Kamome::Loader.new(config: configuration)
66
+ end
67
+
64
68
  private
65
69
 
66
70
  def configuration
67
71
  @configuration ||= Kamome::Configuration.new
68
72
  end
69
-
70
- def loader
71
- Kamome::Loader.new(config: configuration)
72
- end
73
73
  end
74
74
  end
@@ -0,0 +1,101 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'thor'
4
+ require 'kamome'
5
+ require 'pathname'
6
+
7
+ module Kamome
8
+ class Cli < ::Thor
9
+ option :header, type: :boolean, default: true, desc: 'Include headers'
10
+ desc 'generate_csv', 'Genrate CSV from KEN_ALL.CSV and JIGYOSHO.CSV'
11
+ def generate_csv(filepath)
12
+ path = ::Pathname.new(filepath)
13
+ do_generate_csv(operation_all, path, options[:header])
14
+ $stdout.puts "Generated csv: #{path}"
15
+ rescue StandardError => e
16
+ path.delete if path&.exist?
17
+ raise e
18
+ end
19
+
20
+ option :header, type: :boolean, default: true, desc: 'Include headers'
21
+ option :date, type: :string, default: nil, desc: 'Target date'
22
+ desc 'generate_diff_csv', 'Genrate diff CSV from ADD_YYMM.CSV/DEL_YYMM.CSV/JADDYYMM.CSV/JDELYYMM.CSV'
23
+ def generate_diff_csv(filepath)
24
+ path = ::Pathname.new(filepath)
25
+ do_generate_csv(operation_diff(options[:date]), path, options[:header])
26
+ $stdout.puts "Generated diff csv: #{path}"
27
+ rescue StandardError => e
28
+ path.delete if path&.exist?
29
+ raise e
30
+ end
31
+
32
+ desc 'generate_json', 'Genrate JSON from KEN_ALL.CSV and JIGYOSHO.CSV'
33
+ def generate_json(filepath)
34
+ path = ::Pathname.new(filepath)
35
+ do_generate_json(operation_all, path)
36
+ $stdout.puts "Generated json: #{path}"
37
+ end
38
+
39
+ option :date, type: :string, default: nil, desc: 'Target date'
40
+ desc 'generate_diff_json', 'Genrate diff JSON from ADD_YYMM.CSV/DEL_YYMM.CSV/JADDYYMM.CSV/JDELYYMM.CSV'
41
+ def generate_diff_json(filepath)
42
+ path = ::Pathname.new(filepath)
43
+ do_generate_json(operation_diff(options[:date]), path)
44
+ $stdout.puts "Generated diff json: #{path}"
45
+ rescue StandardError => e
46
+ path.delete if path&.exist?
47
+ raise e
48
+ end
49
+
50
+ private
51
+
52
+ def operation_all
53
+ [
54
+ ::Kamome::Operation.general_all,
55
+ ::Kamome::Operation.jigyosho_all
56
+ ]
57
+ end
58
+
59
+ def operation_diff(date)
60
+ require 'date'
61
+ date ||= Date.today << 1
62
+ [
63
+ ::Kamome::Operation.general_diff(date: date),
64
+ ::Kamome::Operation.jigyosho_diff(date: date)
65
+ ]
66
+ end
67
+
68
+ def do_generate_csv(operations, path, header)
69
+ require 'csv'
70
+ ::CSV.open(path, 'w') do |csv|
71
+ csv << csv_headers if header
72
+ operations.each do |operation|
73
+ Kamome.loader.call(operation: operation) do |model|
74
+ csv << build_pretty_attributes(model).values
75
+ end
76
+ end
77
+ end
78
+ end
79
+
80
+ def do_generate_json(operations, path)
81
+ require 'json'
82
+ json = {}
83
+ operations.each do |operation|
84
+ Kamome.loader.call(operation: operation) do |model|
85
+ json[model.zipcode] ||= []
86
+ json[model.zipcode] << build_pretty_attributes(model)
87
+ end
88
+ end
89
+ ::File.write(path, ::JSON.pretty_generate(json))
90
+ end
91
+
92
+ REJECT_KEYS = [:ambiguous_town].freeze
93
+ def csv_headers
94
+ Kamome::Models::Address.new.attributes.keys.reject { |o| REJECT_KEYS.include?(o) }
95
+ end
96
+
97
+ def build_pretty_attributes(model)
98
+ model.attributes.reject { |key, _| REJECT_KEYS.include?(key) }
99
+ end
100
+ end
101
+ end
@@ -19,7 +19,7 @@ module Kamome
19
19
  zip_path.delete
20
20
  csv_path
21
21
  rescue StandardError => e
22
- raise Kamome::DownloadError, "#{e.class}: #{e.message}"
22
+ raise Kamome::DownloadError, "#{url}, #{e.class}: #{e.message}"
23
23
  end
24
24
 
25
25
  private
@@ -36,7 +36,7 @@ module Kamome
36
36
 
37
37
  private
38
38
 
39
- YYMM_FORMAT = /\d{2}(0[1-9]|1[0-2])/.freeze
39
+ YYMM_FORMAT = /\A\d{2}(0[1-9]|1[0-2])\z/.freeze
40
40
  def format_yymm(date)
41
41
  yymm = date.respond_to?(:strftime) ? date.strftime('%y%m') : date.to_s
42
42
  return yymm if yymm =~ YYMM_FORMAT
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Kamome
4
- VERSION = '0.9.0'
4
+ VERSION = '1.0.0'
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kamome
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.0
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - kengos
@@ -122,10 +122,25 @@ dependencies:
122
122
  - - "~>"
123
123
  - !ruby/object:Gem::Version
124
124
  version: '1.2'
125
+ - !ruby/object:Gem::Dependency
126
+ name: thor
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: '0.19'
132
+ type: :runtime
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: '0.19'
125
139
  description: the Japanese postcode loading interface
126
140
  email:
127
141
  - kengo@kengos.jp
128
- executables: []
142
+ executables:
143
+ - kamome
129
144
  extensions: []
130
145
  extra_rdoc_files: []
131
146
  files:
@@ -143,8 +158,10 @@ files:
143
158
  - Rakefile
144
159
  - bin/console
145
160
  - bin/setup
161
+ - exe/kamome
146
162
  - kamome.gemspec
147
163
  - lib/kamome.rb
164
+ - lib/kamome/cli.rb
148
165
  - lib/kamome/configuration.rb
149
166
  - lib/kamome/csv_handler.rb
150
167
  - lib/kamome/downloader.rb
@@ -184,5 +201,5 @@ rubyforge_project:
184
201
  rubygems_version: 2.7.6
185
202
  signing_key:
186
203
  specification_version: 4
187
- summary: kamome-0.9.0
204
+ summary: kamome-1.0.0
188
205
  test_files: []