para 0.11.2 → 0.11.3
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/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
|