activerecord-import 0.16.1 → 0.16.2
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 +13 -5
- data/CHANGELOG.md +11 -0
- data/README.markdown +6 -2
- data/lib/activerecord-import/adapters/postgresql_adapter.rb +1 -2
- data/lib/activerecord-import/import.rb +6 -4
- data/lib/activerecord-import/version.rb +1 -1
- data/test/import_test.rb +5 -0
- data/test/support/postgresql/import_examples.rb +23 -8
- metadata +12 -12
checksums.yaml
CHANGED
@@ -1,7 +1,15 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
YzExZGVjNzkyYjBhNmZiMDE4MmQ4NTBmMTNiMGFlOTg3M2ZjMjcyOA==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
MDRjY2QxYTc1NmViOGI5MDM1Yjg5ODY1YmY3ZjU0ZGJkMGRiOTFhZA==
|
5
7
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
YmUyZGIyZWQ1MjI1MGZkN2VkZTk0NGZlZmUyZWFmZDY0OTc3NjU3OTQzZWI5
|
10
|
+
ZTk2NGFkNjc1MjVkOGE2MGQyNTM2OTc1N2YzYjQyYmFlNjA0M2FhNjRiMDEz
|
11
|
+
YTgyNTk4MjIxOTUwYzYwOWM1ZmE5ZGQ0NDcyODkzNGNkNGYwMWU=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
ZmRlNTc0NjhhNmYxZmNiNDFjNzZlNTM1ODcxNTNiNzE3NmUyYjhjMjliYjU4
|
14
|
+
MGY5NmYyN2JhY2FjMmQ3ZWFiODE3ZTY3OTgxMDA5M2Y5MTkwZjIyNWU2Y2Ni
|
15
|
+
MWUyYTRlODNiMzg1YzYyNDEzMmFjZTBhZTEwMzFkZGU0MDI5ZTE=
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,14 @@
|
|
1
|
+
## Changes in 0.16.2
|
2
|
+
|
3
|
+
### Fixes
|
4
|
+
|
5
|
+
* Fixes issue clearing query cache on wrong connection when using
|
6
|
+
multiple databases. Thanks to @KentoMoriwaki via \#337
|
7
|
+
* Raises an ArgumentError on incorrect usage of nested arrays. Thanks
|
8
|
+
to @Nitrodist via \#340
|
9
|
+
* Fixes issue that prevented uuid primary keys from being set manually.
|
10
|
+
Thanks to @Dclusin-og, @jkowens via \#342
|
11
|
+
|
1
12
|
## Changes in 0.16.1
|
2
13
|
|
3
14
|
### Fixes
|
data/README.markdown
CHANGED
@@ -29,7 +29,11 @@ Use activerecord-import 0.11.0 or higher.
|
|
29
29
|
|
30
30
|
Use activerecord-import 0.4.0 or higher.
|
31
31
|
|
32
|
-
### Rails 3.
|
32
|
+
### Rails 3.2.x up to, but not including 4.0
|
33
|
+
|
34
|
+
Use activerecord-import 0.3.0 or higher.
|
35
|
+
|
36
|
+
### Rails 3.1.x up to, but not including 3.2
|
33
37
|
|
34
38
|
Use the latest in the activerecord-import 0.3.x series.
|
35
39
|
|
@@ -60,7 +64,7 @@ To understand how rubygems loads code you can reference the following:
|
|
60
64
|
And an example of how active_record dynamically load adapters:
|
61
65
|
https://github.com/rails/rails/blob/master/activerecord/lib/active_record/connection_adapters/connection_specification.rb
|
62
66
|
|
63
|
-
In summary, when a gem is loaded rubygems adds the `lib` folder of the gem to the global load path `$LOAD_PATH` so that all `require` lookups will not
|
67
|
+
In summary, when a gem is loaded rubygems adds the `lib` folder of the gem to the global load path `$LOAD_PATH` so that all `require` lookups will not propagate through all of the folders on the load path. When a `require` is issued each folder on the `$LOAD_PATH` is checked for the file and/or folder referenced. This allows a gem (like activerecord-import) to define push the activerecord-import folder (or namespace) on the `$LOAD_PATH` and any adapters provided by activerecord-import will be found by rubygems when the require is issued.
|
64
68
|
|
65
69
|
If `fake_name` adapter is needed by a gem (potentially called `activerecord-import-fake_name`) then the folder structure should look as follows:
|
66
70
|
|
@@ -17,12 +17,11 @@ module ActiveRecord::Import::PostgreSQLAdapter
|
|
17
17
|
sql2insert = base_sql + values.join( ',' ) + post_sql
|
18
18
|
if post_sql =~ /RETURNING\s/
|
19
19
|
ids = select_values( sql2insert, *args )
|
20
|
+
query_cache.clear if query_cache_enabled
|
20
21
|
else
|
21
22
|
insert( sql2insert, *args )
|
22
23
|
end
|
23
24
|
|
24
|
-
ActiveRecord::Base.connection.query_cache.clear
|
25
|
-
|
26
25
|
[number_of_inserts, ids]
|
27
26
|
end
|
28
27
|
|
@@ -367,15 +367,13 @@ class ActiveRecord::Base
|
|
367
367
|
column_names = self.column_names.dup
|
368
368
|
end
|
369
369
|
|
370
|
-
if column_names.include?(primary_key) && columns_hash[primary_key].type == :uuid
|
370
|
+
if models.first.id.nil? && column_names.include?(primary_key) && columns_hash[primary_key].type == :uuid
|
371
371
|
column_names.delete(primary_key)
|
372
372
|
end
|
373
373
|
|
374
374
|
stored_attrs = respond_to?(:stored_attributes) ? stored_attributes : {}
|
375
375
|
|
376
376
|
array_of_attributes = models.map do |model|
|
377
|
-
# this next line breaks sqlite.so with a segmentation fault
|
378
|
-
# if model.new_record? || options[:on_duplicate_key_update]
|
379
377
|
column_names.map do |name|
|
380
378
|
if stored_attrs.any? && stored_attrs.key?(name.to_sym)
|
381
379
|
model.read_attribute(name.to_s)
|
@@ -383,13 +381,17 @@ class ActiveRecord::Base
|
|
383
381
|
model.read_attribute_before_type_cast(name.to_s)
|
384
382
|
end
|
385
383
|
end
|
386
|
-
# end
|
387
384
|
end
|
388
385
|
# supports empty array
|
389
386
|
elsif args.last.is_a?( Array ) && args.last.empty?
|
390
387
|
return ActiveRecord::Import::Result.new([], 0, [])
|
391
388
|
# supports 2-element array and array
|
392
389
|
elsif args.size == 2 && args.first.is_a?( Array ) && args.last.is_a?( Array )
|
390
|
+
|
391
|
+
unless args.last.first.is_a?(Array)
|
392
|
+
raise ArgumentError, "Last argument should be a two dimensional array '[[]]'. First element in array was a #{args.last.first.class}"
|
393
|
+
end
|
394
|
+
|
393
395
|
column_names, array_of_attributes = args
|
394
396
|
|
395
397
|
# dup the passed args so we don't modify unintentionally
|
data/test/import_test.rb
CHANGED
@@ -12,6 +12,11 @@ describe "#import" do
|
|
12
12
|
end
|
13
13
|
end
|
14
14
|
|
15
|
+
it "warns you that you're using the library wrong" do
|
16
|
+
error = assert_raise(ArgumentError) { Topic.import %w(title author_name), ['Author #1', 'Book #1', 0] }
|
17
|
+
assert_equal error.message, "Last argument should be a two dimensional array '[[]]'. First element in array was a String"
|
18
|
+
end
|
19
|
+
|
15
20
|
it "should not produce an error when importing empty arrays" do
|
16
21
|
assert_nothing_raised do
|
17
22
|
Topic.import []
|
@@ -59,19 +59,34 @@ def should_support_postgresql_import_functionality
|
|
59
59
|
end
|
60
60
|
end
|
61
61
|
|
62
|
-
|
63
|
-
|
64
|
-
|
62
|
+
if ENV['AR_VERSION'].to_f >= 4.0
|
63
|
+
describe "with a uuid primary key" do
|
64
|
+
let(:vendor) { Vendor.new(name: "foo") }
|
65
|
+
let(:vendors) { [vendor] }
|
65
66
|
|
66
|
-
|
67
|
-
|
67
|
+
it "creates records" do
|
68
|
+
assert_difference "Vendor.count", +1 do
|
69
|
+
Vendor.import vendors
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
it "assigns an id to the model objects" do
|
68
74
|
Vendor.import vendors
|
75
|
+
assert_not_nil vendor.id
|
69
76
|
end
|
70
77
|
end
|
71
78
|
|
72
|
-
|
73
|
-
|
74
|
-
|
79
|
+
describe "with an assigned uuid primary key" do
|
80
|
+
let(:id) { SecureRandom.uuid }
|
81
|
+
let(:vendor) { Vendor.new(id: id, name: "foo") }
|
82
|
+
let(:vendors) { [vendor] }
|
83
|
+
|
84
|
+
it "creates records with correct id" do
|
85
|
+
assert_difference "Vendor.count", +1 do
|
86
|
+
Vendor.import vendors
|
87
|
+
end
|
88
|
+
assert_equal id, vendor.id
|
89
|
+
end
|
75
90
|
end
|
76
91
|
end
|
77
92
|
|
metadata
CHANGED
@@ -1,41 +1,41 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: activerecord-import
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.16.
|
4
|
+
version: 0.16.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Zach Dennis
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-11-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ! '>='
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '3.2'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - ! '>='
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '3.2'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ! '>='
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - ! '>='
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
description: Extraction of the ActiveRecord::Base#import functionality from ar-extensions
|
@@ -46,10 +46,10 @@ executables: []
|
|
46
46
|
extensions: []
|
47
47
|
extra_rdoc_files: []
|
48
48
|
files:
|
49
|
-
-
|
50
|
-
-
|
51
|
-
-
|
52
|
-
-
|
49
|
+
- .gitignore
|
50
|
+
- .rubocop.yml
|
51
|
+
- .rubocop_todo.yml
|
52
|
+
- .travis.yml
|
53
53
|
- Brewfile
|
54
54
|
- CHANGELOG.md
|
55
55
|
- Gemfile
|
@@ -160,12 +160,12 @@ require_paths:
|
|
160
160
|
- lib
|
161
161
|
required_ruby_version: !ruby/object:Gem::Requirement
|
162
162
|
requirements:
|
163
|
-
- -
|
163
|
+
- - ! '>='
|
164
164
|
- !ruby/object:Gem::Version
|
165
165
|
version: 1.9.2
|
166
166
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
167
167
|
requirements:
|
168
|
-
- -
|
168
|
+
- - ! '>='
|
169
169
|
- !ruby/object:Gem::Version
|
170
170
|
version: '0'
|
171
171
|
requirements: []
|