activerecord-import 0.23.0 → 0.24.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/CHANGELOG.md +9 -2
- data/README.markdown +1 -1
- data/lib/activerecord-import/import.rb +9 -5
- data/lib/activerecord-import/version.rb +1 -1
- data/test/import_test.rb +8 -0
- data/test/models/user.rb +3 -1
- data/test/models/user_token.rb +3 -0
- data/test/schema/generic_schema.rb +5 -0
- data/test/support/shared_examples/recursive_import.rb +14 -2
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7c157e7eabb443b03aa347b06bb39d8e50a685a2
|
4
|
+
data.tar.gz: ec11c5ca04b49a03aa98a19eac8c768ade01e7c0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3ac6e43987fe5b0309ca4a8346326d4f1c32cf5f30d8b342b260552d26caeb3bdc8bc0f8a89c9ac4671756f94797dc960cb70642eb70da1d8fec35b1a0eced95
|
7
|
+
data.tar.gz: ca600fdd1ec92ec39f34ab89216dee9137abfbf710dec6bd4678a6a7d130afab06a1a90631ab2aec1f3017842291e6e79177b8300d02a7b5498dd6ea42fb2dbf
|
data/CHANGELOG.md
CHANGED
@@ -1,11 +1,18 @@
|
|
1
|
+
## Changes in 0.24.0
|
2
|
+
|
3
|
+
### Fixes
|
4
|
+
|
5
|
+
* Use the association primary key when importing. Thanks to @dpogue via \#512.
|
6
|
+
* Allow association ids to be updated. Thanks to @Aristat via \#515.
|
7
|
+
|
1
8
|
## Changes in 0.23.0
|
2
9
|
|
3
10
|
### New Features
|
4
11
|
|
5
|
-
* Rename `import` method to `bulk_import and alias to `import`. Thanks
|
12
|
+
* Rename `import` method to `bulk_import` and alias to `import`. Thanks
|
6
13
|
to @itay-grudev, @jkowens via \#498.
|
7
14
|
* Increment lock_version on duplicate key update. Thanks to @aimerald
|
8
|
-
via \#
|
15
|
+
via \#500.
|
9
16
|
|
10
17
|
### Fixes
|
11
18
|
|
data/README.markdown
CHANGED
@@ -52,13 +52,13 @@ If `fake_name` adapter is needed by a gem (potentially called `activerecord-impo
|
|
52
52
|
activerecord-import-fake_name/
|
53
53
|
|-- activerecord-import-fake_name.gemspec
|
54
54
|
|-- lib
|
55
|
+
| |-- activerecord-import-fake_name.rb
|
55
56
|
| |-- activerecord-import-fake_name
|
56
57
|
| | |-- version.rb
|
57
58
|
| |-- activerecord-import
|
58
59
|
| | |-- active_record
|
59
60
|
| | | |-- adapters
|
60
61
|
| | | |-- fake_name_adapter.rb
|
61
|
-
|--activerecord-import-fake_name.rb
|
62
62
|
```
|
63
63
|
|
64
64
|
When rubygems pushes the `lib` folder onto the load path a `require` will now find `activerecord-import/active_record/adapters/fake_name_adapter` as it runs through the lookup process for a ruby file under that path in `$LOAD_PATH`
|
@@ -97,7 +97,7 @@ class ActiveRecord::Associations::CollectionAssociation
|
|
97
97
|
symbolized_foreign_key = reflection.foreign_key.to_sym
|
98
98
|
symbolized_column_names = model_klass.column_names.map(&:to_sym)
|
99
99
|
|
100
|
-
owner_primary_key =
|
100
|
+
owner_primary_key = reflection.active_record_primary_key.to_sym
|
101
101
|
owner_primary_key_value = owner.send(owner_primary_key)
|
102
102
|
|
103
103
|
# assume array of model objects
|
@@ -276,6 +276,9 @@ class ActiveRecord::Base
|
|
276
276
|
# == Options
|
277
277
|
# * +validate+ - true|false, tells import whether or not to use
|
278
278
|
# ActiveRecord validations. Validations are enforced by default.
|
279
|
+
# It skips the uniqueness validation for performance reasons.
|
280
|
+
# You can find more details here:
|
281
|
+
# https://github.com/zdennis/activerecord-import/issues/228
|
279
282
|
# * +ignore+ - true|false, an alias for on_duplicate_key_ignore.
|
280
283
|
# * +on_duplicate_key_ignore+ - true|false, tells import to discard
|
281
284
|
# records that contain duplicate keys. For Postgres 9.5+ it adds
|
@@ -785,13 +788,14 @@ class ActiveRecord::Base
|
|
785
788
|
def load_association_ids(model)
|
786
789
|
association_reflections = model.class.reflect_on_all_associations(:belongs_to)
|
787
790
|
association_reflections.each do |association_reflection|
|
791
|
+
column_name = association_reflection.foreign_key
|
788
792
|
next if association_reflection.options[:polymorphic]
|
789
793
|
association = model.association(association_reflection.name)
|
790
794
|
association = association.target
|
791
|
-
if association
|
792
|
-
|
793
|
-
|
794
|
-
|
795
|
+
next if association.blank? || model.public_send(column_name).present?
|
796
|
+
|
797
|
+
association_primary_key = association_reflection.association_primary_key
|
798
|
+
model.public_send("#{column_name}=", association.send(association_primary_key))
|
795
799
|
end
|
796
800
|
end
|
797
801
|
|
data/test/import_test.rb
CHANGED
@@ -596,6 +596,14 @@ describe "#import" do
|
|
596
596
|
assert_equal [val1, val2], scope.map(&column).sort
|
597
597
|
end
|
598
598
|
end
|
599
|
+
|
600
|
+
it "works with a non-standard association primary key" do
|
601
|
+
user = User.create(id: 1, name: 'Solomon')
|
602
|
+
user.user_tokens.import [:id, :token], [[5, '12345abcdef67890']]
|
603
|
+
|
604
|
+
token = UserToken.find(5)
|
605
|
+
assert_equal 'Solomon', token.user_name
|
606
|
+
end
|
599
607
|
end
|
600
608
|
end
|
601
609
|
|
data/test/models/user.rb
CHANGED
@@ -164,6 +164,11 @@ ActiveRecord::Schema.define do
|
|
164
164
|
t.integer :lock_version, null: false, default: 0
|
165
165
|
end
|
166
166
|
|
167
|
+
create_table :user_tokens, force: :cascade do |t|
|
168
|
+
t.string :user_name, null: false
|
169
|
+
t.string :token, null: false
|
170
|
+
end
|
171
|
+
|
167
172
|
create_table :accounts, force: :cascade do |t|
|
168
173
|
t.string :name, null: false
|
169
174
|
t.integer :lock, null: false, default: 0
|
@@ -116,7 +116,10 @@ def should_support_recursive_import
|
|
116
116
|
end
|
117
117
|
|
118
118
|
it "imports an imported belongs_to association id" do
|
119
|
-
|
119
|
+
first_new_topic = new_topics[0]
|
120
|
+
second_new_topic = new_topics[1]
|
121
|
+
|
122
|
+
books = first_new_topic.books.to_a
|
120
123
|
Topic.import new_topics, validate: false
|
121
124
|
|
122
125
|
assert_difference "Book.count", books.size do
|
@@ -124,7 +127,16 @@ def should_support_recursive_import
|
|
124
127
|
end
|
125
128
|
|
126
129
|
books.each do |book|
|
127
|
-
|
130
|
+
assert_equal book.topic_id, first_new_topic.id
|
131
|
+
end
|
132
|
+
|
133
|
+
books.each { |book| book.topic_id = second_new_topic.id }
|
134
|
+
assert_no_difference "Book.count", books.size do
|
135
|
+
Book.import books, validate: false, on_duplicate_key_update: [:topic_id]
|
136
|
+
end
|
137
|
+
|
138
|
+
books.each do |book|
|
139
|
+
assert_equal book.topic_id, second_new_topic.id
|
128
140
|
end
|
129
141
|
end
|
130
142
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: activerecord-import
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.24.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Zach Dennis
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-06-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -131,6 +131,7 @@ files:
|
|
131
131
|
- test/models/tag.rb
|
132
132
|
- test/models/topic.rb
|
133
133
|
- test/models/user.rb
|
134
|
+
- test/models/user_token.rb
|
134
135
|
- test/models/vendor.rb
|
135
136
|
- test/models/widget.rb
|
136
137
|
- test/mysql2/import_test.rb
|
@@ -218,6 +219,7 @@ test_files:
|
|
218
219
|
- test/models/tag.rb
|
219
220
|
- test/models/topic.rb
|
220
221
|
- test/models/user.rb
|
222
|
+
- test/models/user_token.rb
|
221
223
|
- test/models/vendor.rb
|
222
224
|
- test/models/widget.rb
|
223
225
|
- test/mysql2/import_test.rb
|