deltaconveyor 0.2.0 → 0.2.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 +4 -4
- data/lib/deltaconveyor/row.rb +0 -4
- data/lib/deltaconveyor/version.rb +1 -1
- data/lib/deltaconveyor.rb +69 -94
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 712223865ad3f96330a2693b159d4d1b07606059
|
4
|
+
data.tar.gz: c6ca40ef25658c369f609fd479cfc0c5706c0412
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f0c5743616da52a2ac2881d7e1191cfab80a52e4e5c2813dea2aa681cdedd974660ccc291c566d8da6a9f8aab54e7da8b836e545923db77600dcaf24e944b1e6
|
7
|
+
data.tar.gz: 7d6c519fcaa0f1d337c10067a1edeb6f65338d42959a5fe7d39b2d025d229d80d75ffbbedec0b5815c583bb59d3229adc447bf40f338177d7f7f1642ae5f77ad
|
data/lib/deltaconveyor/row.rb
CHANGED
data/lib/deltaconveyor.rb
CHANGED
@@ -7,120 +7,95 @@ module Deltaconveyor
|
|
7
7
|
class InvalidRowError < StandardError; end
|
8
8
|
class RemovingOriginalError < StandardError; end
|
9
9
|
def self.import(data, option, container, force_remove: false)
|
10
|
-
|
10
|
+
Importer.new(option, container, force_remove: force_remove).import(data)
|
11
|
+
end
|
11
12
|
|
12
|
-
|
13
|
-
rows = data.map do |d|
|
14
|
-
passes_container ? option.row_class.from_json(d, container) : option.row_class.from_json(d)
|
15
|
-
end
|
13
|
+
class Importer
|
16
14
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
option.logger.error invalid.errors.messages.to_s
|
22
|
-
end
|
23
|
-
raise InvalidRowError, 'Not Imported.'
|
15
|
+
def initialize(option, container, force_remove: false)
|
16
|
+
@option = option
|
17
|
+
@container = container
|
18
|
+
@force_remove = force_remove
|
24
19
|
end
|
25
20
|
|
26
|
-
|
27
|
-
original_hash = index_by_keys(originals, option_keys)
|
28
|
-
new_hash = index_by_keys(rows, option_keys)
|
21
|
+
attr_reader :option, :container, :force_remove
|
29
22
|
|
30
|
-
|
31
|
-
|
23
|
+
def import(data)
|
24
|
+
originals = container.originals
|
32
25
|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
if remove_keys.size > 0 && !force_remove
|
38
|
-
option.logger.error 'Error: Some data is facing to remove but `force_remove` flag is false'
|
39
|
-
option.logger.error 'so import is stopped.'
|
40
|
-
option.logger.error 'Removing keys:'
|
41
|
-
option.logger.error remove_keys
|
42
|
-
raise RemovingOriginalError, 'Not Imported.'
|
43
|
-
end
|
26
|
+
passes_container = option.row_class.method(:from_json).parameters.size == 2
|
27
|
+
rows = data.map do |d|
|
28
|
+
passes_container ? option.row_class.from_json(d, container) : option.row_class.from_json(d)
|
29
|
+
end
|
44
30
|
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
31
|
+
invalids = rows.reject(&:valid?)
|
32
|
+
if invalids.size > 0
|
33
|
+
option.logger.error 'Error: Some data has errors.'
|
34
|
+
invalids.each do |invalid|
|
35
|
+
option.logger.error invalid.errors.messages.to_s
|
36
|
+
end
|
37
|
+
raise InvalidRowError, 'Not Imported.'
|
38
|
+
end
|
53
39
|
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
raise 'Bug.' unless original_data && new_data
|
40
|
+
option_keys = Array(option.key)
|
41
|
+
original_hash = index_by_keys(originals, option_keys)
|
42
|
+
new_hash = index_by_keys(rows, option_keys)
|
58
43
|
|
59
|
-
|
60
|
-
|
61
|
-
option.logger.info 'Updating Phase is finished.'
|
44
|
+
original_keys = original_hash.keys
|
45
|
+
new_keys = new_hash.keys
|
62
46
|
|
63
|
-
|
64
|
-
|
65
|
-
|
47
|
+
intersection_keys = original_keys & new_keys
|
48
|
+
remove_keys = original_keys - intersection_keys
|
49
|
+
adding_keys = new_keys - intersection_keys
|
66
50
|
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
def self.index_by_keys(arr, keys)
|
75
|
-
hash = {}
|
76
|
-
arr.each do |elem|
|
77
|
-
pk = keys.map { |key| elem.send(key) }
|
78
|
-
unless hash[pk].nil?
|
79
|
-
option.logger.error "not unique key #{pk}"
|
80
|
-
raise 'Not Imported.'
|
51
|
+
if remove_keys.size > 0 && !force_remove
|
52
|
+
option.logger.error 'Error: Some data is facing to remove but `force_remove` flag is false'
|
53
|
+
option.logger.error 'so import is stopped.'
|
54
|
+
option.logger.error 'Removing keys:'
|
55
|
+
option.logger.error remove_keys
|
56
|
+
raise RemovingOriginalError, 'Not Imported.'
|
81
57
|
end
|
82
|
-
hash[pk] = elem
|
83
|
-
end
|
84
|
-
hash
|
85
58
|
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
59
|
+
remove_keys.each do |key|
|
60
|
+
original_data = original_hash[key]
|
61
|
+
raise 'Bug.' unless original_data
|
62
|
+
option.logger.info "Remove #{key}"
|
63
|
+
# TODO: rethink
|
64
|
+
original_data.destroy!
|
65
|
+
end
|
66
|
+
option.logger.info 'Removing Phase is finished.'
|
93
67
|
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
68
|
+
intersection_keys.each do |key|
|
69
|
+
original_data = original_hash[key]
|
70
|
+
new_data = new_hash[key]
|
71
|
+
raise 'Bug.' unless original_data && new_data
|
98
72
|
|
99
|
-
|
100
|
-
|
101
|
-
|
73
|
+
new_data.update!(original_data)
|
74
|
+
end
|
75
|
+
option.logger.info 'Updating Phase is finished.'
|
102
76
|
|
103
|
-
|
104
|
-
|
105
|
-
|
77
|
+
adding_keys.each do |key|
|
78
|
+
new_data = new_hash[key]
|
79
|
+
raise 'Bug.' unless new_data
|
106
80
|
|
107
|
-
|
108
|
-
|
81
|
+
option.logger.info "Insert #{key}"
|
82
|
+
new_data.save!
|
83
|
+
end
|
84
|
+
option.logger.info 'Adding Phase is finished.'
|
85
|
+
nil
|
109
86
|
end
|
110
|
-
option.logger.info 'Adding Phase is finished.'
|
111
|
-
nil
|
112
|
-
end
|
113
87
|
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
88
|
+
def index_by_keys(arr, keys)
|
89
|
+
hash = {}
|
90
|
+
arr.each do |elem|
|
91
|
+
pk = keys.map { |key| elem.send(key) }
|
92
|
+
unless hash[pk].nil?
|
93
|
+
option.logger.error "Error: not unique key #{pk}"
|
94
|
+
raise 'Not Imported.'
|
95
|
+
end
|
96
|
+
hash[pk] = elem
|
121
97
|
end
|
122
|
-
hash
|
98
|
+
hash
|
123
99
|
end
|
124
|
-
hash
|
125
100
|
end
|
126
101
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: deltaconveyor
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- qsona
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-02-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|