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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6f6fa00155104b2a8b6557c6ec04c3c64ae456eaeea26605757f0b4fef347fcc
4
- data.tar.gz: 91243a2554514c1acbffec0d730276ffe5db4063b21723b91f0ed842b9ccb228
3
+ metadata.gz: 9ecad01c0560b48fbe495db67c73c5f3275096b45b4a99a9c9bc0075a39d111e
4
+ data.tar.gz: aedd600ea37ee165dccf2d8ac8452b316999a10de5092c5dea3ab72c1ef0d4a9
5
5
  SHA512:
6
- metadata.gz: 6842f6aa0f5ed769519fe0ce471ea9cb5bde60458974debc956ba094f93eb799dfbb4d0f9d6a0728e2131c3376088ecf7cd904130a228345b9d204664fdf8a7b
7
- data.tar.gz: 9de0c468a9e29066ca22a2cd0f2d5f600c0d4d7397b63034ab8a9a53784aa255901f1ea95e3f9759103a2a411d3f163c3a3bdb763b6e02e1c76008f90e29c2d3
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
- reflection.options[:class_name] == "ActiveStorage::Attachment"
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
- clone_attachment(name, attachment)
29
+ clone_attachment_if_needed(name, attachment)
30
30
  end
31
31
  else
32
- clone_attachment(name, association_target)
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
- attachment_target.attachments
71
- else
72
- [attachment_target.attachment]
73
- end
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.class.name.tableize.to_sym
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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Para
4
- VERSION = '0.11.2'
4
+ VERSION = '0.11.3'
5
5
  end
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.2
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-01-24 00:00:00.000000000 Z
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.4
865
+ rubygems_version: 3.4.8
866
866
  signing_key:
867
867
  specification_version: 4
868
868
  summary: Rails admin engine