master_data_tool 0.16.0 → 0.17.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/lib/master_data_tool/import/executor.rb +20 -24
- data/lib/master_data_tool/import.rb +0 -1
- data/lib/master_data_tool/master_data.rb +9 -0
- data/lib/master_data_tool/master_data_collection.rb +25 -0
- data/lib/master_data_tool/master_data_file.rb +25 -3
- data/lib/master_data_tool/master_data_file_collection.rb +51 -0
- data/lib/master_data_tool/version.rb +1 -1
- data/lib/master_data_tool.rb +2 -0
- data/master_data_tool.gemspec +42 -0
- metadata +5 -3
- data/lib/master_data_tool/import/master_data_file_list.rb +0 -43
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 13d917fbfac12aeef06fb5d23478b0b7a72cb7d322307650097cf7b9bbfc2154
|
4
|
+
data.tar.gz: 55e5a9eaf6fb6605e3c81db67e416b9b194ba38dd68f7f52646e2d6aed1f4bb4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c786f48fffb282a462c5daff7dc238c2021113d79590b6bcfc3a5f9d001a153e0db298b958f99548f12d0f4c09f69ed7b254c3b03e7e29655bc67d3b299c2476
|
7
|
+
data.tar.gz: cf6f31dbe36c37e82ac9fbed099b02e93ac721fc31676288cc3f5b2905502a85b2e919517f0bdc60e3a793f5ab525de4bef597c335ac254b53c168eb7f0a12b1
|
@@ -33,17 +33,17 @@ module MasterDataTool
|
|
33
33
|
ApplicationRecord.transaction do
|
34
34
|
print_execute_options
|
35
35
|
|
36
|
-
|
36
|
+
master_data_collection = build_master_data_collection
|
37
37
|
|
38
|
-
import_all!(
|
39
|
-
verify_all!(
|
40
|
-
save_master_data_statuses!(
|
38
|
+
import_all!(master_data_collection)
|
39
|
+
verify_all!(master_data_collection) if @verify
|
40
|
+
save_master_data_statuses!(master_data_collection)
|
41
41
|
|
42
|
-
print_affected_tables(
|
42
|
+
print_affected_tables(master_data_collection)
|
43
43
|
|
44
44
|
raise DryRunError if @dry_run
|
45
45
|
|
46
|
-
|
46
|
+
master_data_collection
|
47
47
|
end
|
48
48
|
rescue DryRunError
|
49
49
|
puts "[DryRun] end"
|
@@ -61,22 +61,18 @@ module MasterDataTool
|
|
61
61
|
puts "================="
|
62
62
|
end
|
63
63
|
|
64
|
-
def
|
65
|
-
|
66
|
-
MasterDataTool::
|
64
|
+
def build_master_data_collection
|
65
|
+
MasterDataCollection.new.tap do |collection|
|
66
|
+
MasterDataTool::MasterDataFileCollection.new(override_identifier: @override_identifier).each do |master_data_file|
|
67
67
|
load_skip = load_skip_table?(master_data_file)
|
68
|
-
|
69
|
-
|
70
|
-
master_data = MasterData.new(master_data_file, model_klass)
|
71
|
-
master_data.load unless load_skip
|
72
|
-
|
73
|
-
master_data_list << master_data
|
68
|
+
master_data = MasterData.build(master_data_file, load: !load_skip)
|
69
|
+
collection.append(master_data)
|
74
70
|
end
|
75
|
-
end
|
71
|
+
end
|
76
72
|
end
|
77
73
|
|
78
|
-
def import_all!(
|
79
|
-
|
74
|
+
def import_all!(master_data_collection)
|
75
|
+
master_data_collection.each do |master_data|
|
80
76
|
next unless master_data.loaded?
|
81
77
|
next if import_skip_table?(master_data.table_name)
|
82
78
|
|
@@ -85,8 +81,8 @@ module MasterDataTool
|
|
85
81
|
end
|
86
82
|
end
|
87
83
|
|
88
|
-
def verify_all!(
|
89
|
-
|
84
|
+
def verify_all!(master_data_collection)
|
85
|
+
master_data_collection.each do |master_data|
|
90
86
|
next if verify_skip_table?(master_data.table_name)
|
91
87
|
|
92
88
|
report = master_data.verify!(ignore_fail: @dry_run)
|
@@ -94,9 +90,9 @@ module MasterDataTool
|
|
94
90
|
end
|
95
91
|
end
|
96
92
|
|
97
|
-
def save_master_data_statuses!(
|
93
|
+
def save_master_data_statuses!(master_data_collection)
|
98
94
|
records = []
|
99
|
-
|
95
|
+
master_data_collection.each do |master_data|
|
100
96
|
next unless master_data.loaded?
|
101
97
|
|
102
98
|
records << MasterDataTool::MasterDataStatus.build(master_data.master_data_file)
|
@@ -105,8 +101,8 @@ module MasterDataTool
|
|
105
101
|
MasterDataTool::MasterDataStatus.import_records!(records, dry_run: @dry_run)
|
106
102
|
end
|
107
103
|
|
108
|
-
def print_affected_tables(
|
109
|
-
|
104
|
+
def print_affected_tables(master_data_collection)
|
105
|
+
master_data_collection.each do |master_data|
|
110
106
|
next unless master_data.loaded?
|
111
107
|
next unless master_data.affected?
|
112
108
|
|
@@ -19,6 +19,15 @@ module MasterDataTool
|
|
19
19
|
@deleted_records = []
|
20
20
|
end
|
21
21
|
|
22
|
+
class << self
|
23
|
+
def build(master_data_file, load: false)
|
24
|
+
model_klass = Object.const_get(master_data_file.table_name.classify)
|
25
|
+
new(master_data_file, model_klass).tap do |record|
|
26
|
+
record.load if load
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
22
31
|
def basename
|
23
32
|
@master_data_file.basename
|
24
33
|
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module MasterDataTool
|
4
|
+
class MasterDataCollection
|
5
|
+
def initialize
|
6
|
+
@collection = []
|
7
|
+
end
|
8
|
+
|
9
|
+
def append(master_data)
|
10
|
+
@collection << master_data
|
11
|
+
end
|
12
|
+
|
13
|
+
def each
|
14
|
+
return enum_for(:each) unless block_given?
|
15
|
+
|
16
|
+
@collection.sort_by(&:basename).each do |master_data|
|
17
|
+
yield master_data
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def to_a
|
22
|
+
each.to_a
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -1,13 +1,35 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
module MasterDataTool
|
3
|
-
class MasterDataFile
|
3
|
+
class MasterDataFile
|
4
|
+
attr_reader :table_name, :path, :override_identifier
|
5
|
+
|
4
6
|
def initialize(table_name, path, override_identifier)
|
5
|
-
|
7
|
+
@table_name = table_name
|
8
|
+
@path = path
|
9
|
+
@override_identifier = override_identifier
|
6
10
|
freeze
|
7
11
|
end
|
8
12
|
|
13
|
+
class << self
|
14
|
+
def build(path, override_identifier)
|
15
|
+
table_name = MasterDataTool.resolve_table_name(path, override_identifier)
|
16
|
+
new(table_name, path, override_identifier)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
9
20
|
def basename
|
10
|
-
|
21
|
+
@path.basename
|
22
|
+
end
|
23
|
+
|
24
|
+
def ==(other)
|
25
|
+
other.class === self &&
|
26
|
+
other.hash == hash
|
27
|
+
end
|
28
|
+
|
29
|
+
alias eql? ==
|
30
|
+
|
31
|
+
def hash
|
32
|
+
[@table_name, @path, @override_identifier].join.hash
|
11
33
|
end
|
12
34
|
end
|
13
35
|
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module MasterDataTool
|
4
|
+
class MasterDataFileCollection
|
5
|
+
def initialize(override_identifier: nil)
|
6
|
+
@override_identifier = override_identifier
|
7
|
+
@collection = build
|
8
|
+
freeze
|
9
|
+
end
|
10
|
+
|
11
|
+
def each
|
12
|
+
return enum_for(:each) unless block_given?
|
13
|
+
|
14
|
+
@collection.each do |file|
|
15
|
+
yield file
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def to_a
|
20
|
+
each.to_a
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def build
|
26
|
+
files = extract_master_data_csv_paths.presence&.index_by(&:table_name)
|
27
|
+
overridden_files = overridden_master_data_csv_paths.presence&.index_by(&:table_name) || {}
|
28
|
+
|
29
|
+
table_names = (files.keys + overridden_files.keys).uniq
|
30
|
+
table_names.map do |table_name|
|
31
|
+
overridden_files[table_name] || files[table_name]
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def extract_master_data_csv_paths
|
36
|
+
pattern = Pathname.new(MasterDataTool.config.master_data_dir).join('*.csv').to_s
|
37
|
+
Pathname.glob(pattern).select(&:file?).map do |path|
|
38
|
+
MasterDataFile.build(path, nil)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def overridden_master_data_csv_paths
|
43
|
+
return [] if @override_identifier.blank?
|
44
|
+
|
45
|
+
pattern = Pathname.new(MasterDataTool.config.master_data_dir).join(@override_identifier).join('*.csv').to_s
|
46
|
+
Pathname.glob(pattern).select(&:file?).map do |path|
|
47
|
+
MasterDataFile.build(path, @override_identifier)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
data/lib/master_data_tool.rb
CHANGED
@@ -5,7 +5,9 @@ require_relative "master_data_tool/version"
|
|
5
5
|
require_relative "master_data_tool/config"
|
6
6
|
require_relative "master_data_tool/master_data_status"
|
7
7
|
require_relative "master_data_tool/master_data_file"
|
8
|
+
require_relative "master_data_tool/master_data_file_collection"
|
8
9
|
require_relative "master_data_tool/master_data"
|
10
|
+
require_relative "master_data_tool/master_data_collection"
|
9
11
|
require_relative "master_data_tool/report"
|
10
12
|
require_relative "master_data_tool/dump/executor"
|
11
13
|
require_relative "master_data_tool/import"
|
@@ -0,0 +1,42 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "lib/master_data_tool/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |spec|
|
6
|
+
spec.name = "master_data_tool"
|
7
|
+
spec.version = MasterDataTool::VERSION
|
8
|
+
spec.authors = ["Takahiro Ooishi"]
|
9
|
+
spec.email = ["taka0125@gmail.com"]
|
10
|
+
|
11
|
+
spec.summary = "マスタデータの管理ツール"
|
12
|
+
spec.description = "システムが稼働する上で最初から必要なデータ(マスタデータ)を管理するツールです。"
|
13
|
+
spec.homepage = "https://github.com/taka0125/master_data_tool"
|
14
|
+
spec.required_ruby_version = ">= 2.6.0"
|
15
|
+
|
16
|
+
spec.metadata["homepage_uri"] = spec.homepage
|
17
|
+
spec.metadata["source_code_uri"] = spec.homepage
|
18
|
+
|
19
|
+
# Specify which files should be added to the gem when it is released.
|
20
|
+
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
21
|
+
spec.files = Dir.chdir(File.expand_path(__dir__)) do
|
22
|
+
`git ls-files -z`.split("\x0").reject do |f|
|
23
|
+
(f == __FILE__) || f.match(%r{\A(?:(?:test|spec|features)/|\.(?:git|travis|circleci)|appveyor)})
|
24
|
+
end
|
25
|
+
end
|
26
|
+
spec.bindir = "exe"
|
27
|
+
spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
|
28
|
+
spec.require_paths = ["lib"]
|
29
|
+
|
30
|
+
spec.add_development_dependency 'rspec'
|
31
|
+
spec.add_development_dependency 'mysql2'
|
32
|
+
spec.add_development_dependency 'psych', '~> 3.1'
|
33
|
+
spec.add_development_dependency 'appraisal'
|
34
|
+
spec.add_development_dependency 'ridgepole'
|
35
|
+
spec.add_development_dependency 'database_cleaner-active_record'
|
36
|
+
spec.add_development_dependency 'standalone_activerecord_boot_loader'
|
37
|
+
|
38
|
+
spec.add_dependency 'activerecord', '>= 5.1.7'
|
39
|
+
spec.add_dependency 'activesupport'
|
40
|
+
spec.add_dependency 'thor'
|
41
|
+
spec.add_dependency 'activerecord-import'
|
42
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: master_data_tool
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.17.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Takahiro Ooishi
|
@@ -194,9 +194,10 @@ files:
|
|
194
194
|
- lib/master_data_tool/dump/executor.rb
|
195
195
|
- lib/master_data_tool/import.rb
|
196
196
|
- lib/master_data_tool/import/executor.rb
|
197
|
-
- lib/master_data_tool/import/master_data_file_list.rb
|
198
197
|
- lib/master_data_tool/master_data.rb
|
198
|
+
- lib/master_data_tool/master_data_collection.rb
|
199
199
|
- lib/master_data_tool/master_data_file.rb
|
200
|
+
- lib/master_data_tool/master_data_file_collection.rb
|
200
201
|
- lib/master_data_tool/master_data_status.rb
|
201
202
|
- lib/master_data_tool/report.rb
|
202
203
|
- lib/master_data_tool/report/core.rb
|
@@ -207,6 +208,7 @@ files:
|
|
207
208
|
- lib/master_data_tool/report/verify_report.rb
|
208
209
|
- lib/master_data_tool/version.rb
|
209
210
|
- log/test.log
|
211
|
+
- master_data_tool.gemspec
|
210
212
|
- scripts/setup.sh
|
211
213
|
- sig/master_data_tool.rbs
|
212
214
|
homepage: https://github.com/taka0125/master_data_tool
|
@@ -229,7 +231,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
229
231
|
- !ruby/object:Gem::Version
|
230
232
|
version: '0'
|
231
233
|
requirements: []
|
232
|
-
rubygems_version: 3.
|
234
|
+
rubygems_version: 3.2.22
|
233
235
|
signing_key:
|
234
236
|
specification_version: 4
|
235
237
|
summary: マスタデータの管理ツール
|
@@ -1,43 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module MasterDataTool
|
4
|
-
module Import
|
5
|
-
class MasterDataFileList
|
6
|
-
Result = Struct.new(:table_name, :path, :override_identifier)
|
7
|
-
|
8
|
-
def initialize(override_identifier: nil)
|
9
|
-
@override_identifier = override_identifier
|
10
|
-
end
|
11
|
-
|
12
|
-
def build
|
13
|
-
files = extract_master_data_csv_paths.presence&.index_by(&:table_name)
|
14
|
-
overridden_files = overridden_master_data_csv_paths.presence&.index_by(&:table_name) || {}
|
15
|
-
|
16
|
-
table_names = (files.keys + overridden_files.keys).uniq
|
17
|
-
table_names.map do |table_name|
|
18
|
-
overridden_files[table_name] || files[table_name]
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
private
|
23
|
-
|
24
|
-
def extract_master_data_csv_paths
|
25
|
-
pattern = Pathname.new(MasterDataTool.config.master_data_dir).join('*.csv').to_s
|
26
|
-
Pathname.glob(pattern).select(&:file?).map do |path|
|
27
|
-
table_name = MasterDataTool.resolve_table_name(path, nil)
|
28
|
-
MasterDataTool::MasterDataFile.new(table_name, path, nil)
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
def overridden_master_data_csv_paths
|
33
|
-
return [] if @override_identifier.blank?
|
34
|
-
|
35
|
-
pattern = Pathname.new(MasterDataTool.config.master_data_dir).join(@override_identifier).join('*.csv').to_s
|
36
|
-
Pathname.glob(pattern).select(&:file?).map do |path|
|
37
|
-
table_name = MasterDataTool.resolve_table_name(path, @override_identifier)
|
38
|
-
MasterDataTool::MasterDataFile.new(table_name, path, @override_identifier)
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|