portable_model 1.2.2 → 1.3.0
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/portable_model.rb +29 -4
- data/lib/portable_model/version.rb +1 -1
- metadata +4 -4
data/lib/portable_model.rb
CHANGED
@@ -10,12 +10,18 @@ module PortableModel
|
|
10
10
|
base.extend(ClassMethods)
|
11
11
|
end
|
12
12
|
|
13
|
-
#
|
14
|
-
# is currently being imported. It can be read to skip callbacks and
|
15
|
-
# validations that shouldn't be run when a record is being imported.
|
13
|
+
# This virtual attribute is now deprecated in favor of #currently_importing?
|
16
14
|
#
|
17
15
|
attr_accessor :importing_record
|
18
16
|
|
17
|
+
# Check whether the record is currently being imported. Callers can use this
|
18
|
+
# for determining when to skip callbacks and validations that shouldn't be
|
19
|
+
# run when a record is being imported.
|
20
|
+
#
|
21
|
+
def currently_importing?
|
22
|
+
!!Thread.current[:imported_records]
|
23
|
+
end
|
24
|
+
|
19
25
|
# Export the record to a hash.
|
20
26
|
#
|
21
27
|
def export_to_hash
|
@@ -111,7 +117,9 @@ module PortableModel
|
|
111
117
|
# use the result of that previous import.
|
112
118
|
record = imported_records[record_hash.object_id]
|
113
119
|
|
114
|
-
|
120
|
+
if record
|
121
|
+
update_record_associations(record, record_hash, options)
|
122
|
+
else
|
115
123
|
transaction do
|
116
124
|
# First split out the attributes that correspond to portable
|
117
125
|
# associations.
|
@@ -276,6 +284,23 @@ module PortableModel
|
|
276
284
|
end
|
277
285
|
end
|
278
286
|
|
287
|
+
# Update a record's foreign key associations with the respective keys from record_hash.
|
288
|
+
#
|
289
|
+
def update_record_associations(record, record_hash, options)
|
290
|
+
# Determine the foreign keys that the record owns
|
291
|
+
association_foreign_key_list = record.class.reflect_on_all_associations(:belongs_to).map(&:association_foreign_key)
|
292
|
+
|
293
|
+
# Update the foreign keys to any associations that haven't been set yet.
|
294
|
+
association_foreign_keys = record_hash.reject do |key, value|
|
295
|
+
!association_foreign_key_list.include?(key) || value.nil? || !record[key].nil?
|
296
|
+
end
|
297
|
+
|
298
|
+
unless association_foreign_keys.empty?
|
299
|
+
record.attributes = association_foreign_keys
|
300
|
+
record.save(!options.fetch(:skip_validations, false))
|
301
|
+
end
|
302
|
+
end
|
303
|
+
|
279
304
|
end
|
280
305
|
|
281
306
|
end
|
metadata
CHANGED
@@ -5,9 +5,9 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 1
|
8
|
-
-
|
9
|
-
-
|
10
|
-
version: 1.
|
8
|
+
- 3
|
9
|
+
- 0
|
10
|
+
version: 1.3.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Clyde Law
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2016-
|
18
|
+
date: 2016-11-09 00:00:00 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
name: activerecord
|