kamome 0.9.0 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
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: []