para 0.11.2 → 0.11.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/para/cloneable/attachments_cloner.rb +25 -10
- data/lib/para/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9ecad01c0560b48fbe495db67c73c5f3275096b45b4a99a9c9bc0075a39d111e
|
4
|
+
data.tar.gz: aedd600ea37ee165dccf2d8ac8452b316999a10de5092c5dea3ab72c1ef0d4a9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ff73f38e195cb79654b75b8e0e145873e540f8b351b887dfeb871548fb73f73f698dc641f62116fbc820e7909db80a22fb933e990625ede8de89aa133d0436a9
|
7
|
+
data.tar.gz: 74b34f00a147194d45060346895a46581eda59cd5d6a27f2963093557ba4331b570c866c8a98acc70395c89422ce5485a040373ec6167955ff41e649a9841ac7
|
@@ -17,7 +17,7 @@ module Para
|
|
17
17
|
|
18
18
|
attachment_reflections = original.class.reflections.select do |name, reflection|
|
19
19
|
name.to_s.match(ATTACHMENTS_RELATION_REGEX) &&
|
20
|
-
|
20
|
+
reflection.options[:class_name] == 'ActiveStorage::Attachment'
|
21
21
|
end
|
22
22
|
|
23
23
|
attachment_reflections.each do |name, reflection|
|
@@ -26,16 +26,27 @@ module Para
|
|
26
26
|
|
27
27
|
if reflection.collection?
|
28
28
|
association_target.each do |attachment|
|
29
|
-
|
29
|
+
clone_attachment_if_needed(name, attachment)
|
30
30
|
end
|
31
31
|
else
|
32
|
-
|
32
|
+
clone_attachment_if_needed(name, association_target)
|
33
33
|
end
|
34
34
|
end
|
35
35
|
end
|
36
36
|
|
37
|
+
def clone_attachment_if_needed(name, attachment)
|
38
|
+
return if attachment.nil?
|
39
|
+
|
40
|
+
store_key = store_key_for(attachment)
|
41
|
+
|
42
|
+
# If the attachment has already been cloned, we don't need to clone it again
|
43
|
+
return if dictionary[store_key]&.key?(attachment)
|
44
|
+
|
45
|
+
clone_attachment(name, attachment)
|
46
|
+
end
|
47
|
+
|
37
48
|
def clone_attachment(name, original_attachment)
|
38
|
-
association_name = name.gsub(ATTACHMENTS_RELATION_REGEX,
|
49
|
+
association_name = name.gsub(ATTACHMENTS_RELATION_REGEX, '')
|
39
50
|
original_blob = original_attachment.blob
|
40
51
|
|
41
52
|
# Handle missing file in storage service by bypassing the attachment cloning
|
@@ -45,7 +56,7 @@ module Para
|
|
45
56
|
attachment_target = clone.send(association_name)
|
46
57
|
|
47
58
|
cloned_blob = ActiveStorage::Blob.create_and_upload!(
|
48
|
-
io: tempfile,
|
59
|
+
io: tempfile,
|
49
60
|
filename: original_blob.filename,
|
50
61
|
content_type: original_blob.content_type
|
51
62
|
)
|
@@ -67,10 +78,10 @@ module Para
|
|
67
78
|
# doesn't always return the same, so for now we still handle the Rails 5.2 case.
|
68
79
|
def find_cloned_attachment(attachment_target, original_blob)
|
69
80
|
attachments = if attachment_target.attachments.any?
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
81
|
+
attachment_target.attachments
|
82
|
+
else
|
83
|
+
[attachment_target.attachment]
|
84
|
+
end
|
74
85
|
|
75
86
|
attachment = attachments.find do |att|
|
76
87
|
att.blob.checksum == original_blob.checksum
|
@@ -81,11 +92,15 @@ module Para
|
|
81
92
|
# simulates what the deep_cloneable gem does when it clones a resource
|
82
93
|
#
|
83
94
|
def store_cloned(source, clone)
|
84
|
-
store_key = source
|
95
|
+
store_key = store_key_for(source)
|
85
96
|
|
86
97
|
dictionary[store_key] ||= {}
|
87
98
|
dictionary[store_key][source] = clone
|
88
99
|
end
|
100
|
+
|
101
|
+
def store_key_for(attachment)
|
102
|
+
attachment.class.name.tableize.to_sym
|
103
|
+
end
|
89
104
|
end
|
90
105
|
end
|
91
106
|
end
|
data/lib/para/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: para
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.11.
|
4
|
+
version: 0.11.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Valentin Ballestrino
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-10-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: active_decorator
|
@@ -862,7 +862,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
862
862
|
- !ruby/object:Gem::Version
|
863
863
|
version: '0'
|
864
864
|
requirements: []
|
865
|
-
rubygems_version: 3.4.
|
865
|
+
rubygems_version: 3.4.8
|
866
866
|
signing_key:
|
867
867
|
specification_version: 4
|
868
868
|
summary: Rails admin engine
|