deep_cloneable 3.0.0 → 3.2.1
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/Appraisals +20 -15
- data/CHANGELOG.md +135 -1
- data/Gemfile +6 -9
- data/Gemfile.lock +44 -75
- data/LICENSE +1 -1
- data/Rakefile +4 -18
- data/deep_cloneable.gemspec +18 -76
- data/init.rb +2 -0
- data/lib/deep_cloneable/association_not_found_exception.rb +2 -0
- data/lib/deep_cloneable/deep_clone.rb +19 -6
- data/lib/deep_cloneable/skip_validations.rb +2 -0
- data/lib/deep_cloneable/version.rb +3 -0
- data/lib/deep_cloneable.rb +2 -0
- data/readme.md +75 -21
- metadata +13 -39
- data/.document +0 -5
- data/.rubocop.yml +0 -20
- data/.travis.yml +0 -100
- data/VERSION +0 -1
- data/gemfiles/3.1.gemfile +0 -17
- data/gemfiles/3.1.gemfile.lock +0 -86
- data/gemfiles/3.2.gemfile +0 -17
- data/gemfiles/3.2.gemfile.lock +0 -86
- data/gemfiles/4.0.gemfile +0 -17
- data/gemfiles/4.0.gemfile.lock +0 -93
- data/gemfiles/4.1.gemfile +0 -17
- data/gemfiles/4.1.gemfile.lock +0 -93
- data/gemfiles/4.2.gemfile +0 -17
- data/gemfiles/4.2.gemfile.lock +0 -91
- data/gemfiles/5.0.gemfile +0 -16
- data/gemfiles/5.0.gemfile.lock +0 -91
- data/gemfiles/5.1.gemfile +0 -16
- data/gemfiles/5.1.gemfile.lock +0 -91
- data/gemfiles/5.2.gemfile +0 -15
- data/gemfiles/5.2.gemfile.lock +0 -91
- data/gemfiles/6.0.gemfile +0 -15
- data/gemfiles/6.0.gemfile.lock +0 -91
- data/test/database.yml +0 -6
- data/test/models.rb +0 -151
- data/test/schema.rb +0 -156
- data/test/test_deep_cloneable.rb +0 -509
- data/test/test_helper.rb +0 -35
data/deep_cloneable.gemspec
CHANGED
@@ -1,79 +1,21 @@
|
|
1
|
-
#
|
2
|
-
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
-
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
|
-
# -*- encoding: utf-8 -*-
|
5
|
-
# stub: deep_cloneable 3.0.0 ruby lib
|
1
|
+
# frozen_string_literal: true
|
6
2
|
|
7
|
-
|
8
|
-
|
9
|
-
s.version = "3.0.0"
|
10
|
-
|
11
|
-
s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
|
12
|
-
s.require_paths = ["lib".freeze]
|
13
|
-
s.authors = ["Reinier de Lange".freeze]
|
14
|
-
s.date = "2019-08-18"
|
15
|
-
s.description = "Extends the functionality of ActiveRecord::Base#dup to perform a deep clone that includes user specified associations. ".freeze
|
16
|
-
s.email = "rjdelange@icloud.com".freeze
|
17
|
-
s.extra_rdoc_files = [
|
18
|
-
"LICENSE"
|
19
|
-
]
|
20
|
-
s.files = [
|
21
|
-
".document",
|
22
|
-
".rubocop.yml",
|
23
|
-
".travis.yml",
|
24
|
-
"Appraisals",
|
25
|
-
"CHANGELOG.md",
|
26
|
-
"Gemfile",
|
27
|
-
"Gemfile.lock",
|
28
|
-
"LICENSE",
|
29
|
-
"Rakefile",
|
30
|
-
"VERSION",
|
31
|
-
"deep_cloneable.gemspec",
|
32
|
-
"gemfiles/3.1.gemfile",
|
33
|
-
"gemfiles/3.1.gemfile.lock",
|
34
|
-
"gemfiles/3.2.gemfile",
|
35
|
-
"gemfiles/3.2.gemfile.lock",
|
36
|
-
"gemfiles/4.0.gemfile",
|
37
|
-
"gemfiles/4.0.gemfile.lock",
|
38
|
-
"gemfiles/4.1.gemfile",
|
39
|
-
"gemfiles/4.1.gemfile.lock",
|
40
|
-
"gemfiles/4.2.gemfile",
|
41
|
-
"gemfiles/4.2.gemfile.lock",
|
42
|
-
"gemfiles/5.0.gemfile",
|
43
|
-
"gemfiles/5.0.gemfile.lock",
|
44
|
-
"gemfiles/5.1.gemfile",
|
45
|
-
"gemfiles/5.1.gemfile.lock",
|
46
|
-
"gemfiles/5.2.gemfile",
|
47
|
-
"gemfiles/5.2.gemfile.lock",
|
48
|
-
"gemfiles/6.0.gemfile",
|
49
|
-
"gemfiles/6.0.gemfile.lock",
|
50
|
-
"init.rb",
|
51
|
-
"lib/deep_cloneable.rb",
|
52
|
-
"lib/deep_cloneable/association_not_found_exception.rb",
|
53
|
-
"lib/deep_cloneable/deep_clone.rb",
|
54
|
-
"lib/deep_cloneable/skip_validations.rb",
|
55
|
-
"readme.md",
|
56
|
-
"test/database.yml",
|
57
|
-
"test/models.rb",
|
58
|
-
"test/schema.rb",
|
59
|
-
"test/test_deep_cloneable.rb",
|
60
|
-
"test/test_helper.rb"
|
61
|
-
]
|
62
|
-
s.homepage = "http://github.com/moiristo/deep_cloneable".freeze
|
63
|
-
s.licenses = ["MIT".freeze]
|
64
|
-
s.rubygems_version = "3.0.2".freeze
|
65
|
-
s.summary = "This gem gives every ActiveRecord::Base object the possibility to do a deep clone.".freeze
|
66
|
-
|
67
|
-
if s.respond_to? :specification_version then
|
68
|
-
s.specification_version = 4
|
3
|
+
$:.unshift File.expand_path('../lib', __FILE__)
|
4
|
+
require 'deep_cloneable/version'
|
69
5
|
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = 'deep_cloneable'
|
8
|
+
s.version = DeepCloneable::VERSION
|
9
|
+
s.authors = ['Reinier de Lange']
|
10
|
+
s.description = 'Extends the functionality of ActiveRecord::Base#dup to perform a deep clone that includes user specified associations.'
|
11
|
+
s.summary = 'This gem gives every ActiveRecord::Base object the possibility to do a deep clone.'
|
12
|
+
s.email = 'rjdelange@icloud.com'
|
13
|
+
s.extra_rdoc_files = ['LICENSE']
|
14
|
+
s.files = Dir.glob('{bin/*,lib/**/*,[A-Z]*}')
|
15
|
+
s.homepage = 'https://github.com/moiristo/deep_cloneable'
|
16
|
+
s.licenses = ['MIT']
|
17
|
+
s.platform = Gem::Platform::RUBY
|
18
|
+
s.required_ruby_version = '>= 1.9.3'
|
19
|
+
s.require_paths = ['lib']
|
20
|
+
s.add_runtime_dependency('activerecord', ['>= 3.1.0', '< 9'])
|
78
21
|
end
|
79
|
-
|
data/init.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module DeepCloneable
|
2
4
|
module DeepClone
|
3
5
|
# Deep dups an ActiveRecord model. See README.rdoc
|
@@ -5,7 +7,7 @@ module DeepCloneable
|
|
5
7
|
options = args[0] || {}
|
6
8
|
|
7
9
|
dictionary = options[:dictionary]
|
8
|
-
dictionary ||= {} if options
|
10
|
+
dictionary ||= {} if options[:use_dictionary]
|
9
11
|
|
10
12
|
kopy = if dictionary
|
11
13
|
find_in_dictionary_or_dup(dictionary)
|
@@ -13,6 +15,8 @@ module DeepCloneable
|
|
13
15
|
dup
|
14
16
|
end
|
15
17
|
|
18
|
+
options[:preprocessor].call(self, kopy) if options.key?(:preprocessor)
|
19
|
+
|
16
20
|
deep_exceptions = {}
|
17
21
|
if options[:except]
|
18
22
|
exceptions = Array.wrap(options[:except])
|
@@ -44,13 +48,21 @@ module DeepCloneable
|
|
44
48
|
association = association.keys.first
|
45
49
|
end
|
46
50
|
|
47
|
-
|
51
|
+
case conditions_or_deep_associations
|
52
|
+
when Hash
|
48
53
|
conditions_or_deep_associations = conditions_or_deep_associations.dup
|
49
54
|
conditions[:if] = conditions_or_deep_associations.delete(:if) if conditions_or_deep_associations[:if]
|
50
55
|
conditions[:unless] = conditions_or_deep_associations.delete(:unless) if conditions_or_deep_associations[:unless]
|
51
|
-
|
52
|
-
conditions_or_deep_associations = conditions_or_deep_associations.dup
|
53
|
-
conditions_or_deep_associations.
|
56
|
+
when Array
|
57
|
+
conditions_or_deep_associations = conditions_or_deep_associations.map { |entry| entry.is_a?(Hash) ? entry.dup : entry }
|
58
|
+
conditions_or_deep_associations.each_with_index do |entry, index|
|
59
|
+
if entry.is_a?(Hash)
|
60
|
+
conditions[:if] = entry.delete(:if) if entry[:if]
|
61
|
+
conditions[:unless] = entry.delete(:unless) if entry[:unless]
|
62
|
+
end
|
63
|
+
|
64
|
+
conditions_or_deep_associations.delete_at(index) if entry.empty?
|
65
|
+
end
|
54
66
|
end
|
55
67
|
|
56
68
|
dup_options = {}
|
@@ -59,7 +71,7 @@ module DeepCloneable
|
|
59
71
|
dup_options[:only] = deep_onlinesses[association] if deep_onlinesses[association]
|
60
72
|
dup_options[:dictionary] = dictionary if dictionary
|
61
73
|
|
62
|
-
[:skip_missing_associations, :validate].each do |option|
|
74
|
+
[:skip_missing_associations, :validate, :preprocessor, :postprocessor].each do |option|
|
63
75
|
dup_options[option] = options[option] if options.key?(option)
|
64
76
|
end
|
65
77
|
|
@@ -81,6 +93,7 @@ module DeepCloneable
|
|
81
93
|
end
|
82
94
|
|
83
95
|
yield(self, kopy) if block
|
96
|
+
options[:postprocessor].call(self, kopy) if options.key?(:postprocessor)
|
84
97
|
|
85
98
|
kopy
|
86
99
|
end
|
data/lib/deep_cloneable.rb
CHANGED
data/readme.md
CHANGED
@@ -1,21 +1,21 @@
|
|
1
1
|
# deep_cloneable
|
2
2
|
|
3
|
-
|
3
|
+

|
4
4
|
|
5
5
|
This gem gives every ActiveRecord::Base object the possibility to do a deep clone that includes user specified associations. It is a rails 3+ upgrade of the [deep_cloning plugin](http://github.com/openminds/deep_cloning).
|
6
6
|
|
7
7
|
## Requirements
|
8
8
|
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
- Ruby 2.3.0, 2.4.4, 2.5.5, 2.6.3, 2.7.5, 3.3.5 (tested)
|
10
|
+
- Activerecord 3.2, 4.0, 4.1, 4.2, 5.0, 5.1, 5.2, 6.0, 7.0, 8.0 (tested)
|
11
|
+
- Rails 2.x/3.0 users, please check out the 'rails2.x-3.0' branch
|
12
12
|
|
13
13
|
## Installation
|
14
14
|
|
15
|
-
|
15
|
+
- Add deep_cloneable to your Gemfile:
|
16
16
|
|
17
17
|
```ruby
|
18
|
-
gem 'deep_cloneable', '~> 3.
|
18
|
+
gem 'deep_cloneable', '~> 3.2.1'
|
19
19
|
```
|
20
20
|
|
21
21
|
## Upgrade details
|
@@ -24,8 +24,8 @@ gem 'deep_cloneable', '~> 3.0.0'
|
|
24
24
|
|
25
25
|
There are two breaking changes that you might need to pay attention to:
|
26
26
|
|
27
|
-
|
28
|
-
|
27
|
+
- When using an optional block (see below), the block used to be evaluated before `deep_cloneable` had performed its changes (inclusions, exclusions, includes). In v3, the block is evaluated after all processing has been done, just before the copy is about to be returned.
|
28
|
+
- When a defined association is not found, `deep_cloneable` raises an exception. The exception class has changed namespace: the class definition used to be `ActiveRecord::Base::DeepCloneable::AssociationNotFoundException` and this has changed to `DeepCloneable::AssociationNotFoundException`.
|
29
29
|
|
30
30
|
### Upgrading from v1
|
31
31
|
|
@@ -33,7 +33,7 @@ The `dup` method with arguments has been replaced in deep_cloneable 2 by the met
|
|
33
33
|
|
34
34
|
## Usage
|
35
35
|
|
36
|
-
The `deep_clone` method supports a couple options that can be specified by passing an options hash. Without options, the behaviour is the same as ActiveRecord's
|
36
|
+
The `deep_clone` method supports a couple options that can be specified by passing an options hash. Without options, the behaviour is the same as ActiveRecord's [`dup`](http://apidock.com/rails/ActiveRecord/Core/dup) method.
|
37
37
|
|
38
38
|
### Association inclusion
|
39
39
|
|
@@ -85,6 +85,7 @@ pirate.deep_clone include: [ :mateys, { treasures: [ :matey, :gold_pieces ] } ],
|
|
85
85
|
The `deep_clone` method supports both `except` and `only` for specifying which attributes should be duped:
|
86
86
|
|
87
87
|
#### Exceptions
|
88
|
+
|
88
89
|
```ruby
|
89
90
|
# Single exception
|
90
91
|
pirate.deep_clone except: :name
|
@@ -97,6 +98,7 @@ pirate.deep_clone include: :parrot, except: [ :name, { parrot: [ :name ] } ]
|
|
97
98
|
```
|
98
99
|
|
99
100
|
#### Inclusions
|
101
|
+
|
100
102
|
```ruby
|
101
103
|
# Single attribute inclusion
|
102
104
|
pirate.deep_clone only: :name
|
@@ -109,6 +111,19 @@ pirate.deep_clone include: :parrot, only: [ :name, { parrot: [ :name ] } ]
|
|
109
111
|
|
110
112
|
```
|
111
113
|
|
114
|
+
### Pre- and postprocessor
|
115
|
+
|
116
|
+
You can specify a pre- and/or a postprocessor to modify a duped object after duplication:
|
117
|
+
|
118
|
+
```ruby
|
119
|
+
pirate.deep_clone(include: :parrot, preprocessor: ->(original, kopy) { kopy.cloned_from_id = original.id if kopy.respond_to?(:cloned_from_id) })
|
120
|
+
pirate.deep_clone(include: :parrot, postprocessor: ->(original, kopy) { kopy.cloned_from_id = original.id if kopy.respond_to?(:cloned_from_id) })
|
121
|
+
```
|
122
|
+
|
123
|
+
_Note_: Specifying a postprocessor is essentially the same as specifying an optional block (see below).
|
124
|
+
|
125
|
+
_Note_: Using `deep_clone` with a processors will pass all associated objects that are being cloned to the processor, so be sure to check whether the object actually responds to your method of choice.
|
126
|
+
|
112
127
|
### Optional Block
|
113
128
|
|
114
129
|
Pass a block to `deep_clone` to modify a duped object after duplication:
|
@@ -119,9 +134,7 @@ pirate.deep_clone include: :parrot do |original, kopy|
|
|
119
134
|
end
|
120
135
|
```
|
121
136
|
|
122
|
-
|
123
|
-
|
124
|
-
*Note*: Using `deep_clone` with a block will also pass the associated objects that are being cloned to the block, so be sure to check whether the object actually responds to your method of choice.
|
137
|
+
_Note_: Using `deep_clone` with a block will also pass the associated objects that are being cloned to the block, so be sure to check whether the object actually responds to your method of choice.
|
125
138
|
|
126
139
|
### Cloning models with files
|
127
140
|
|
@@ -130,6 +143,7 @@ end
|
|
130
143
|
If you are cloning models that have associated files through Carrierwave these will not get transferred automatically. To overcome the issue you need to explicitly set the file attribute.
|
131
144
|
|
132
145
|
Easiest solution is to add the code in a clone block as described above.
|
146
|
+
|
133
147
|
```ruby
|
134
148
|
pirate.deep_clone include: :parrot do |original, kopy|
|
135
149
|
kopy.thumbnail = original.thumbnail
|
@@ -143,11 +157,52 @@ For ActiveStorage, you have two options: you can either make a full copy, or sha
|
|
143
157
|
##### Full copy example
|
144
158
|
|
145
159
|
```ruby
|
160
|
+
# Rails 5.2, has_one_attached example 1
|
161
|
+
pirate.deep_clone include: [:parrot, :avatar_attachment, :avatar_blob]
|
162
|
+
|
163
|
+
# Rails 5.2, has_one_attached example 2
|
164
|
+
pirate.deep_clone include: :parrot do |original, kopy|
|
165
|
+
if kopy.is_a?(Pirate) && original.avatar.attached?
|
166
|
+
attachment = original.avatar
|
167
|
+
kopy.avatar.attach \
|
168
|
+
:io => StringIO.new(attachment.download),
|
169
|
+
:filename => attachment.filename,
|
170
|
+
:content_type => attachment.content_type
|
171
|
+
end
|
172
|
+
end
|
173
|
+
|
174
|
+
# Rails 5.2, has_many_attached example 1 (attach one by one)
|
175
|
+
pirate.deep_clone include: :parrot do |original, kopy|
|
176
|
+
if kopy.is_a?(Pirate) && original.crew_members_images.attached?
|
177
|
+
original.crew_members_images.each do |attachment|
|
178
|
+
kopy.crew_members_images.attach \
|
179
|
+
:io => StringIO.new(attachment.download),
|
180
|
+
:filename => attachment.filename,
|
181
|
+
:content_type => attachment.content_type
|
182
|
+
end
|
183
|
+
end
|
184
|
+
end
|
185
|
+
|
186
|
+
# Rails 5.2, has_many_attached example 2 (attach bulk)
|
187
|
+
pirate.deep_clone include: :parrot do |original, kopy|
|
188
|
+
if kopy.is_a?(Pirate) && original.crew_members_images.attached?
|
189
|
+
all_attachments_arr = original.crew_members_images.map do |attachment|
|
190
|
+
{
|
191
|
+
:io => StringIO.new(attachment.download),
|
192
|
+
:filename => attachment.filename,
|
193
|
+
:content_type => attachment.content_type
|
194
|
+
}
|
195
|
+
end
|
196
|
+
kopy.crew_members_images.attach(all_attachments_arr) # attach all at once
|
197
|
+
end
|
198
|
+
end
|
199
|
+
|
200
|
+
# Rails 6
|
146
201
|
pirate.deep_clone include: :parrot do |original, kopy|
|
147
202
|
if kopy.is_a?(Pirate) && original.avatar.attached?
|
148
|
-
|
203
|
+
original.avatar.open do |tempfile|
|
149
204
|
kopy.avatar.attach({
|
150
|
-
io: tempfile,
|
205
|
+
io: File.open(tempfile.path),
|
151
206
|
filename: original.avatar.blob.filename,
|
152
207
|
content_type: original.avatar.blob.content_type
|
153
208
|
})
|
@@ -156,7 +211,6 @@ pirate.deep_clone include: :parrot do |original, kopy|
|
|
156
211
|
end
|
157
212
|
```
|
158
213
|
|
159
|
-
|
160
214
|
##### Shallow copy example
|
161
215
|
|
162
216
|
```ruby
|
@@ -175,14 +229,14 @@ pirate.deep_clone include: [:parrot, :rum], skip_missing_associations: true
|
|
175
229
|
|
176
230
|
### Note on Patches/Pull Requests
|
177
231
|
|
178
|
-
|
179
|
-
|
180
|
-
|
232
|
+
- Fork the project.
|
233
|
+
- Make your feature addition or bug fix.
|
234
|
+
- Add tests for it. This is important so I don't break it in a
|
181
235
|
future version unintentionally.
|
182
|
-
|
236
|
+
- Commit, do not mess with rakefile, version, or history.
|
183
237
|
(if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
|
184
|
-
|
238
|
+
- Send me a pull request. Bonus points for topic branches.
|
185
239
|
|
186
240
|
### Copyright
|
187
241
|
|
188
|
-
Copyright ©
|
242
|
+
Copyright © 2024 Reinier de Lange. See LICENSE for details.
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: deep_cloneable
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Reinier de Lange
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-11-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -19,7 +19,7 @@ dependencies:
|
|
19
19
|
version: 3.1.0
|
20
20
|
- - "<"
|
21
21
|
- !ruby/object:Gem::Version
|
22
|
-
version: '
|
22
|
+
version: '9'
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -29,60 +29,34 @@ dependencies:
|
|
29
29
|
version: 3.1.0
|
30
30
|
- - "<"
|
31
31
|
- !ruby/object:Gem::Version
|
32
|
-
version: '
|
33
|
-
description:
|
34
|
-
clone that includes user specified associations.
|
32
|
+
version: '9'
|
33
|
+
description: Extends the functionality of ActiveRecord::Base#dup to perform a deep
|
34
|
+
clone that includes user specified associations.
|
35
35
|
email: rjdelange@icloud.com
|
36
36
|
executables: []
|
37
37
|
extensions: []
|
38
38
|
extra_rdoc_files:
|
39
39
|
- LICENSE
|
40
40
|
files:
|
41
|
-
- ".document"
|
42
|
-
- ".rubocop.yml"
|
43
|
-
- ".travis.yml"
|
44
41
|
- Appraisals
|
45
42
|
- CHANGELOG.md
|
46
43
|
- Gemfile
|
47
44
|
- Gemfile.lock
|
48
45
|
- LICENSE
|
49
46
|
- Rakefile
|
50
|
-
- VERSION
|
51
47
|
- deep_cloneable.gemspec
|
52
|
-
- gemfiles/3.1.gemfile
|
53
|
-
- gemfiles/3.1.gemfile.lock
|
54
|
-
- gemfiles/3.2.gemfile
|
55
|
-
- gemfiles/3.2.gemfile.lock
|
56
|
-
- gemfiles/4.0.gemfile
|
57
|
-
- gemfiles/4.0.gemfile.lock
|
58
|
-
- gemfiles/4.1.gemfile
|
59
|
-
- gemfiles/4.1.gemfile.lock
|
60
|
-
- gemfiles/4.2.gemfile
|
61
|
-
- gemfiles/4.2.gemfile.lock
|
62
|
-
- gemfiles/5.0.gemfile
|
63
|
-
- gemfiles/5.0.gemfile.lock
|
64
|
-
- gemfiles/5.1.gemfile
|
65
|
-
- gemfiles/5.1.gemfile.lock
|
66
|
-
- gemfiles/5.2.gemfile
|
67
|
-
- gemfiles/5.2.gemfile.lock
|
68
|
-
- gemfiles/6.0.gemfile
|
69
|
-
- gemfiles/6.0.gemfile.lock
|
70
48
|
- init.rb
|
71
49
|
- lib/deep_cloneable.rb
|
72
50
|
- lib/deep_cloneable/association_not_found_exception.rb
|
73
51
|
- lib/deep_cloneable/deep_clone.rb
|
74
52
|
- lib/deep_cloneable/skip_validations.rb
|
53
|
+
- lib/deep_cloneable/version.rb
|
75
54
|
- readme.md
|
76
|
-
|
77
|
-
- test/models.rb
|
78
|
-
- test/schema.rb
|
79
|
-
- test/test_deep_cloneable.rb
|
80
|
-
- test/test_helper.rb
|
81
|
-
homepage: http://github.com/moiristo/deep_cloneable
|
55
|
+
homepage: https://github.com/moiristo/deep_cloneable
|
82
56
|
licenses:
|
83
57
|
- MIT
|
84
58
|
metadata: {}
|
85
|
-
post_install_message:
|
59
|
+
post_install_message:
|
86
60
|
rdoc_options: []
|
87
61
|
require_paths:
|
88
62
|
- lib
|
@@ -90,15 +64,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
90
64
|
requirements:
|
91
65
|
- - ">="
|
92
66
|
- !ruby/object:Gem::Version
|
93
|
-
version:
|
67
|
+
version: 1.9.3
|
94
68
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
95
69
|
requirements:
|
96
70
|
- - ">="
|
97
71
|
- !ruby/object:Gem::Version
|
98
72
|
version: '0'
|
99
73
|
requirements: []
|
100
|
-
rubygems_version: 3.
|
101
|
-
signing_key:
|
74
|
+
rubygems_version: 3.5.20
|
75
|
+
signing_key:
|
102
76
|
specification_version: 4
|
103
77
|
summary: This gem gives every ActiveRecord::Base object the possibility to do a deep
|
104
78
|
clone.
|
data/.document
DELETED
data/.rubocop.yml
DELETED
@@ -1,20 +0,0 @@
|
|
1
|
-
Metrics:
|
2
|
-
Enabled: false
|
3
|
-
|
4
|
-
Security/YAMLLoad:
|
5
|
-
Enabled: false
|
6
|
-
|
7
|
-
Style/ClassAndModuleChildren:
|
8
|
-
Enabled: false
|
9
|
-
|
10
|
-
Style/Documentation:
|
11
|
-
Enabled: false
|
12
|
-
|
13
|
-
Style/HashSyntax:
|
14
|
-
EnforcedStyle: hash_rockets
|
15
|
-
|
16
|
-
Style/Lambda:
|
17
|
-
EnforcedStyle: lambda
|
18
|
-
|
19
|
-
Style/SymbolArray:
|
20
|
-
EnforcedStyle: brackets
|
data/.travis.yml
DELETED
@@ -1,100 +0,0 @@
|
|
1
|
-
language: ruby
|
2
|
-
|
3
|
-
sudo: false
|
4
|
-
cache: bundler
|
5
|
-
|
6
|
-
rvm:
|
7
|
-
- 1.9.3
|
8
|
-
- 2.0.0
|
9
|
-
- 2.1.5
|
10
|
-
- 2.2.2
|
11
|
-
- 2.3.0
|
12
|
-
- 2.4.4
|
13
|
-
- 2.5.5
|
14
|
-
- 2.6.3
|
15
|
-
|
16
|
-
before_install:
|
17
|
-
- gem update --system 2.7.8
|
18
|
-
- gem install bundler -v 1.17.3
|
19
|
-
|
20
|
-
gemfile:
|
21
|
-
- gemfiles/3.1.gemfile
|
22
|
-
- gemfiles/3.2.gemfile
|
23
|
-
- gemfiles/4.0.gemfile
|
24
|
-
- gemfiles/4.1.gemfile
|
25
|
-
- gemfiles/4.2.gemfile
|
26
|
-
- gemfiles/5.0.gemfile
|
27
|
-
- gemfiles/5.1.gemfile
|
28
|
-
- gemfiles/5.2.gemfile
|
29
|
-
- gemfiles/6.0.gemfile
|
30
|
-
|
31
|
-
matrix:
|
32
|
-
exclude:
|
33
|
-
- rvm: 1.9.3
|
34
|
-
gemfile: gemfiles/5.0.gemfile
|
35
|
-
- rvm: 1.9.3
|
36
|
-
gemfile: gemfiles/5.1.gemfile
|
37
|
-
- rvm: 1.9.3
|
38
|
-
gemfile: gemfiles/5.2.gemfile
|
39
|
-
- rvm: 1.9.3
|
40
|
-
gemfile: gemfiles/6.0.gemfile
|
41
|
-
- rvm: 2.0.0
|
42
|
-
gemfile: gemfiles/5.0.gemfile
|
43
|
-
- rvm: 2.0.0
|
44
|
-
gemfile: gemfiles/5.1.gemfile
|
45
|
-
- rvm: 2.0.0
|
46
|
-
gemfile: gemfiles/5.2.gemfile
|
47
|
-
- rvm: 2.0.0
|
48
|
-
gemfile: gemfiles/6.0.gemfile
|
49
|
-
- rvm: 2.1.5
|
50
|
-
gemfile: gemfiles/5.0.gemfile
|
51
|
-
- rvm: 2.1.5
|
52
|
-
gemfile: gemfiles/5.1.gemfile
|
53
|
-
- rvm: 2.1.5
|
54
|
-
gemfile: gemfiles/5.2.gemfile
|
55
|
-
- rvm: 2.1.5
|
56
|
-
gemfile: gemfiles/6.0.gemfile
|
57
|
-
- rvm: 2.2.2
|
58
|
-
gemfile: gemfiles/3.1.gemfile
|
59
|
-
- rvm: 2.2.2
|
60
|
-
gemfile: gemfiles/4.2.gemfile
|
61
|
-
- rvm: 2.2.2
|
62
|
-
gemfile: gemfiles/6.0.gemfile
|
63
|
-
- rvm: 2.3.0
|
64
|
-
gemfile: gemfiles/3.1.gemfile
|
65
|
-
- rvm: 2.3.0
|
66
|
-
gemfile: gemfiles/4.2.gemfile
|
67
|
-
- rvm: 2.3.0
|
68
|
-
gemfile: gemfiles/6.0.gemfile
|
69
|
-
- rvm: 2.4.4
|
70
|
-
gemfile: gemfiles/3.1.gemfile
|
71
|
-
- rvm: 2.4.4
|
72
|
-
gemfile: gemfiles/3.2.gemfile
|
73
|
-
- rvm: 2.4.4
|
74
|
-
gemfile: gemfiles/4.0.gemfile
|
75
|
-
- rvm: 2.4.4
|
76
|
-
gemfile: gemfiles/4.1.gemfile
|
77
|
-
- rvm: 2.4.4
|
78
|
-
gemfile: gemfiles/4.2.gemfile
|
79
|
-
- rvm: 2.4.4
|
80
|
-
gemfile: gemfiles/6.0.gemfile
|
81
|
-
- rvm: 2.5.5
|
82
|
-
gemfile: gemfiles/3.1.gemfile
|
83
|
-
- rvm: 2.5.5
|
84
|
-
gemfile: gemfiles/3.2.gemfile
|
85
|
-
- rvm: 2.5.5
|
86
|
-
gemfile: gemfiles/4.0.gemfile
|
87
|
-
- rvm: 2.5.5
|
88
|
-
gemfile: gemfiles/4.1.gemfile
|
89
|
-
- rvm: 2.5.5
|
90
|
-
gemfile: gemfiles/4.2.gemfile
|
91
|
-
- rvm: 2.6.3
|
92
|
-
gemfile: gemfiles/3.1.gemfile
|
93
|
-
- rvm: 2.6.3
|
94
|
-
gemfile: gemfiles/3.2.gemfile
|
95
|
-
- rvm: 2.6.3
|
96
|
-
gemfile: gemfiles/4.0.gemfile
|
97
|
-
- rvm: 2.6.3
|
98
|
-
gemfile: gemfiles/4.1.gemfile
|
99
|
-
- rvm: 2.6.3
|
100
|
-
gemfile: gemfiles/4.2.gemfile
|
data/VERSION
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
3.0.0
|
data/gemfiles/3.1.gemfile
DELETED
@@ -1,17 +0,0 @@
|
|
1
|
-
# This file was generated by Appraisal
|
2
|
-
|
3
|
-
source 'http://rubygems.org'
|
4
|
-
|
5
|
-
gem 'activerecord', '~> 3.1.0'
|
6
|
-
gem 'addressable', '~> 2.3.8'
|
7
|
-
gem 'appraisal', :group => :test
|
8
|
-
gem 'git', '~> 1.2.9', :group => :test
|
9
|
-
gem 'highline', '~> 1.6.0', :group => :test
|
10
|
-
gem 'i18n', '~> 0.6.5'
|
11
|
-
gem 'jeweler', :group => :test
|
12
|
-
gem 'minitest', :group => :test
|
13
|
-
gem 'nokogiri', '~> 1.5.0', :group => :test
|
14
|
-
gem 'rack', '~> 1.6', :group => :test
|
15
|
-
gem 'rake', '~> 10.4', :group => :test
|
16
|
-
gem 'rdoc', '< 5', :group => :test
|
17
|
-
gem 'sqlite3', :group => :test
|