abstract_importer 1.9.0 → 1.10.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/.github/workflows/ci.yml +2 -2
- data/.gitignore +1 -0
- data/.ruby-version +1 -1
- data/abstract_importer.gemspec +4 -2
- data/lib/abstract_importer/base.rb +8 -3
- data/lib/abstract_importer/collection_importer.rb +2 -1
- data/lib/abstract_importer/strategies/insert_strategy.rb +6 -1
- data/lib/abstract_importer/version.rb +1 -1
- data/test/insert_strategy_test.rb +2 -1
- data/test/test_helper.rb +3 -2
- data/test/upsert_strategy_test.rb +1 -1
- metadata +35 -11
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: e6ccc6e819a1519872b187dac45ceba5e56244f9036474f9c8fd2cb71770f8da
|
|
4
|
+
data.tar.gz: d6f43a92567a9cabc4883a1acfe3ebab3522f1e7b77fd3ac1df58c76a7d8096d
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: d0468d11985538e014eaa54f72d0097f41d3b9ce674cab8b5dbd19ba9361ff1dc1ed921701d16c5cab773f03470b2e7f1c423e720806048b750344b3208760b0
|
|
7
|
+
data.tar.gz: 32ea6b37fcfebc6c7bddf3d31397ad30f1cd102e495fe7419d02706ef4c3eb43e39e5ead633d36a2c6d2d401e28d196335546a8a977095e8f7803fff23cf393e
|
data/.github/workflows/ci.yml
CHANGED
|
@@ -7,7 +7,7 @@ jobs:
|
|
|
7
7
|
runs-on: ubuntu-latest
|
|
8
8
|
services:
|
|
9
9
|
postgres:
|
|
10
|
-
image: postgres:
|
|
10
|
+
image: postgres:17
|
|
11
11
|
env:
|
|
12
12
|
POSTGRES_PASSWORD: password
|
|
13
13
|
POSTGRES_DB: abstract_importer_test
|
|
@@ -20,7 +20,7 @@ jobs:
|
|
|
20
20
|
- name: Setup Ruby
|
|
21
21
|
uses: ruby/setup-ruby@v1
|
|
22
22
|
with:
|
|
23
|
-
ruby-version:
|
|
23
|
+
ruby-version: 4.0
|
|
24
24
|
bundler-cache: true
|
|
25
25
|
- name: Run the Tests
|
|
26
26
|
env:
|
data/.gitignore
CHANGED
data/.ruby-version
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
4.0.6
|
data/abstract_importer.gemspec
CHANGED
|
@@ -17,9 +17,11 @@ Gem::Specification.new do |spec|
|
|
|
17
17
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
|
18
18
|
spec.require_paths = ["lib"]
|
|
19
19
|
|
|
20
|
-
spec.add_dependency "activerecord", ">=
|
|
21
|
-
spec.add_dependency "activesupport", ">=
|
|
20
|
+
spec.add_dependency "activerecord", ">= 7.0"
|
|
21
|
+
spec.add_dependency "activesupport", ">= 7.0"
|
|
22
22
|
spec.add_dependency "progressbar"
|
|
23
|
+
spec.add_dependency "benchmark", ">= 0.4.0"
|
|
24
|
+
spec.add_dependency "ostruct"
|
|
23
25
|
|
|
24
26
|
spec.add_development_dependency "bundler"
|
|
25
27
|
spec.add_development_dependency "minitest-reporters"
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
require "benchmark"
|
|
1
2
|
require "active_support/core_ext/module/delegation"
|
|
2
3
|
require "abstract_importer/import_options"
|
|
3
4
|
require "abstract_importer/import_plan"
|
|
@@ -109,12 +110,12 @@ module AbstractImporter
|
|
|
109
110
|
{}.tap do |results|
|
|
110
111
|
reporter.start_all(self)
|
|
111
112
|
|
|
112
|
-
setup_ms =
|
|
113
|
+
setup_ms = benchmark do
|
|
113
114
|
setup
|
|
114
115
|
end
|
|
115
116
|
reporter.finish_setup(self, setup_ms)
|
|
116
117
|
|
|
117
|
-
ms =
|
|
118
|
+
ms = benchmark do
|
|
118
119
|
with_transaction do
|
|
119
120
|
collection_importers.each do |importer|
|
|
120
121
|
results[importer.name] = importer.perform!
|
|
@@ -122,7 +123,7 @@ module AbstractImporter
|
|
|
122
123
|
end
|
|
123
124
|
end
|
|
124
125
|
|
|
125
|
-
teardown_ms =
|
|
126
|
+
teardown_ms = benchmark do
|
|
126
127
|
teardown
|
|
127
128
|
end
|
|
128
129
|
reporter.finish_teardown(self, teardown_ms)
|
|
@@ -302,5 +303,9 @@ module AbstractImporter
|
|
|
302
303
|
end
|
|
303
304
|
end
|
|
304
305
|
|
|
306
|
+
def benchmark
|
|
307
|
+
Benchmark.realtime { yield } * 1_000
|
|
308
|
+
end
|
|
309
|
+
|
|
305
310
|
end
|
|
306
311
|
end
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
require "benchmark"
|
|
1
2
|
require "abstract_importer/strategies"
|
|
2
3
|
require "abstract_importer/mapping"
|
|
3
4
|
require "abstract_importer/polymorphic_mapping"
|
|
@@ -39,7 +40,7 @@ module AbstractImporter
|
|
|
39
40
|
prepare!
|
|
40
41
|
|
|
41
42
|
invoke_callback(:before_all)
|
|
42
|
-
summary.ms = Benchmark.
|
|
43
|
+
summary.ms = 1000 * Benchmark.realtime do
|
|
43
44
|
each_new_record do |attributes|
|
|
44
45
|
strategy.process_record(attributes)
|
|
45
46
|
end
|
|
@@ -84,7 +84,12 @@ module AbstractImporter
|
|
|
84
84
|
|
|
85
85
|
def cast_result(result, table_name)
|
|
86
86
|
types_by_column = result.columns.each_with_object({}) do |column_name, types|
|
|
87
|
-
|
|
87
|
+
connection = collection.scope.connection
|
|
88
|
+
column = collection.scope.columns.find { |column| column.name == column_name }
|
|
89
|
+
|
|
90
|
+
types[column_name] = connection.respond_to?(:lookup_cast_type_from_column) ?
|
|
91
|
+
connection.lookup_cast_type_from_column(column) :
|
|
92
|
+
connection.lookup_cast_type(column.sql_type)
|
|
88
93
|
end
|
|
89
94
|
|
|
90
95
|
result.to_a.map { |row|
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
require "test_helper"
|
|
2
|
+
require "ostruct"
|
|
2
3
|
|
|
3
4
|
|
|
4
5
|
class InsertStrategyTest < ActiveSupport::TestCase
|
|
@@ -17,7 +18,7 @@ class InsertStrategyTest < ActiveSupport::TestCase
|
|
|
17
18
|
end
|
|
18
19
|
|
|
19
20
|
should "import the records in batches" do
|
|
20
|
-
mock.proxy(
|
|
21
|
+
mock.proxy.instance_of(ActiveRecord::Relation).insert_all(satisfy { |arg| arg.length == 3 }, returning: anything)
|
|
21
22
|
import!
|
|
22
23
|
assert_equal [456, 457, 458], account.students.pluck(:legacy_id)
|
|
23
24
|
end
|
data/test/test_helper.rb
CHANGED
|
@@ -6,7 +6,7 @@ SimpleCov.start do
|
|
|
6
6
|
end
|
|
7
7
|
|
|
8
8
|
require "minitest/reporters/turn_reporter"
|
|
9
|
-
|
|
9
|
+
Minitest::Reporters.use! Minitest::Reporters::TurnReporter.new
|
|
10
10
|
|
|
11
11
|
require "pry"
|
|
12
12
|
require "rr"
|
|
@@ -20,7 +20,7 @@ require "minitest/autorun"
|
|
|
20
20
|
|
|
21
21
|
|
|
22
22
|
|
|
23
|
-
system "psql -c 'create database abstract_importer_test'"
|
|
23
|
+
system "psql -h localhost -U postgres -c 'create database abstract_importer_test'"
|
|
24
24
|
|
|
25
25
|
if ENV["DATABASE_URL"]
|
|
26
26
|
ActiveRecord::Base.establish_connection(ENV["DATABASE_URL"])
|
|
@@ -28,6 +28,7 @@ else
|
|
|
28
28
|
ActiveRecord::Base.establish_connection(
|
|
29
29
|
adapter: "postgresql",
|
|
30
30
|
host: "localhost",
|
|
31
|
+
user: "postgres",
|
|
31
32
|
database: "abstract_importer_test",
|
|
32
33
|
verbosity: "quiet")
|
|
33
34
|
end
|
|
@@ -17,7 +17,7 @@ class UpsertStrategyTest < ActiveSupport::TestCase
|
|
|
17
17
|
end
|
|
18
18
|
|
|
19
19
|
should "import the records in batches" do
|
|
20
|
-
mock.proxy(
|
|
20
|
+
mock.proxy.instance_of(ActiveRecord::Relation).upsert_all(satisfy { |arg| arg.length == 3 }, unique_by: anything, returning: anything)
|
|
21
21
|
import!
|
|
22
22
|
assert_equal [456, 457, 458], account.students.pluck(:legacy_id)
|
|
23
23
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: abstract_importer
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.10.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Bob Lail
|
|
8
|
-
autorequire:
|
|
9
8
|
bindir: bin
|
|
10
9
|
cert_chain: []
|
|
11
|
-
date:
|
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
12
11
|
dependencies:
|
|
13
12
|
- !ruby/object:Gem::Dependency
|
|
14
13
|
name: activerecord
|
|
@@ -16,28 +15,28 @@ dependencies:
|
|
|
16
15
|
requirements:
|
|
17
16
|
- - ">="
|
|
18
17
|
- !ruby/object:Gem::Version
|
|
19
|
-
version: '
|
|
18
|
+
version: '7.0'
|
|
20
19
|
type: :runtime
|
|
21
20
|
prerelease: false
|
|
22
21
|
version_requirements: !ruby/object:Gem::Requirement
|
|
23
22
|
requirements:
|
|
24
23
|
- - ">="
|
|
25
24
|
- !ruby/object:Gem::Version
|
|
26
|
-
version: '
|
|
25
|
+
version: '7.0'
|
|
27
26
|
- !ruby/object:Gem::Dependency
|
|
28
27
|
name: activesupport
|
|
29
28
|
requirement: !ruby/object:Gem::Requirement
|
|
30
29
|
requirements:
|
|
31
30
|
- - ">="
|
|
32
31
|
- !ruby/object:Gem::Version
|
|
33
|
-
version: '
|
|
32
|
+
version: '7.0'
|
|
34
33
|
type: :runtime
|
|
35
34
|
prerelease: false
|
|
36
35
|
version_requirements: !ruby/object:Gem::Requirement
|
|
37
36
|
requirements:
|
|
38
37
|
- - ">="
|
|
39
38
|
- !ruby/object:Gem::Version
|
|
40
|
-
version: '
|
|
39
|
+
version: '7.0'
|
|
41
40
|
- !ruby/object:Gem::Dependency
|
|
42
41
|
name: progressbar
|
|
43
42
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -52,6 +51,34 @@ dependencies:
|
|
|
52
51
|
- - ">="
|
|
53
52
|
- !ruby/object:Gem::Version
|
|
54
53
|
version: '0'
|
|
54
|
+
- !ruby/object:Gem::Dependency
|
|
55
|
+
name: benchmark
|
|
56
|
+
requirement: !ruby/object:Gem::Requirement
|
|
57
|
+
requirements:
|
|
58
|
+
- - ">="
|
|
59
|
+
- !ruby/object:Gem::Version
|
|
60
|
+
version: 0.4.0
|
|
61
|
+
type: :runtime
|
|
62
|
+
prerelease: false
|
|
63
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
64
|
+
requirements:
|
|
65
|
+
- - ">="
|
|
66
|
+
- !ruby/object:Gem::Version
|
|
67
|
+
version: 0.4.0
|
|
68
|
+
- !ruby/object:Gem::Dependency
|
|
69
|
+
name: ostruct
|
|
70
|
+
requirement: !ruby/object:Gem::Requirement
|
|
71
|
+
requirements:
|
|
72
|
+
- - ">="
|
|
73
|
+
- !ruby/object:Gem::Version
|
|
74
|
+
version: '0'
|
|
75
|
+
type: :runtime
|
|
76
|
+
prerelease: false
|
|
77
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
78
|
+
requirements:
|
|
79
|
+
- - ">="
|
|
80
|
+
- !ruby/object:Gem::Version
|
|
81
|
+
version: '0'
|
|
55
82
|
- !ruby/object:Gem::Dependency
|
|
56
83
|
name: bundler
|
|
57
84
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -206,7 +233,6 @@ dependencies:
|
|
|
206
233
|
- - ">="
|
|
207
234
|
- !ruby/object:Gem::Version
|
|
208
235
|
version: '0'
|
|
209
|
-
description:
|
|
210
236
|
email:
|
|
211
237
|
- bob.lail@cph.org
|
|
212
238
|
executables: []
|
|
@@ -260,7 +286,6 @@ homepage: https://github.com/cph/abstract_importer
|
|
|
260
286
|
licenses:
|
|
261
287
|
- MIT
|
|
262
288
|
metadata: {}
|
|
263
|
-
post_install_message:
|
|
264
289
|
rdoc_options: []
|
|
265
290
|
require_paths:
|
|
266
291
|
- lib
|
|
@@ -275,8 +300,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
275
300
|
- !ruby/object:Gem::Version
|
|
276
301
|
version: '0'
|
|
277
302
|
requirements: []
|
|
278
|
-
rubygems_version:
|
|
279
|
-
signing_key:
|
|
303
|
+
rubygems_version: 4.0.16
|
|
280
304
|
specification_version: 4
|
|
281
305
|
summary: Provides services for the mass-import of complex relational data
|
|
282
306
|
test_files:
|