rails_admin_clone 0.0.4 → 0.0.5

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: aa57d13af298c619e7345fff78301a1a22368b53
4
- data.tar.gz: efaa6d8f629b8e905fec35d2763e0a8379be9024
3
+ metadata.gz: 9236ea8e86153f83d0f1f39ed873248cc3bc167f
4
+ data.tar.gz: bb7319860cf320b5564a1c40a7ba3c7aa391417d
5
5
  SHA512:
6
- metadata.gz: 3afcce23646b72277c7e4367dc47f084d6483be6f34b0dd8381db8bf6cc2f779c385b491740b40855e27a24258f6ce215127225f64fe419948bbbf0ec502d7d5
7
- data.tar.gz: 6a272d0f7a20bcb9ad71ab2e6f7bb96594c278ca44ab812d55212b022bd1261e60e6a448234ae918dcb1352c54f76b481211c57e0477e0b6ec83a1b6e89b8f77
6
+ metadata.gz: caf3ee7fd37599ae2e751860a1b9b07d6d7393f99193e19992c189d53cc139c5570980443b0c28e3fa0573ff4d8221b5c9ed0bc17481f557298c4c74ea465107
7
+ data.tar.gz: 7e92b2bae810e3c46df799ffb036fdf3003d433d4340cabff3adc5dc37b07b08e64c4707b2fcff291e0794df8213fbdca1dfc28ffc43a366efd6278f5ff2418f
data/README.md CHANGED
@@ -40,14 +40,33 @@ end
40
40
  You can specify a custom model method to clone objects with the following configuration:
41
41
  ```ruby
42
42
  RailsAdmin.config do |config|
43
- config.model 'Team' do
43
+ config.model 'Post' do
44
44
  clone_config do
45
- custom_method :your_model_method
45
+ custom_method :my_custom_clone_method
46
46
  end
47
47
  end
48
48
  end
49
49
  ```
50
50
 
51
+ Here an implementation example for a clone `custom_method`:
52
+ ```ruby
53
+ require 'rails_admin_clone/model_cloner'
54
+
55
+ class Post < ActiveRecord::Base
56
+
57
+ ...
58
+
59
+ def my_custom_clone_method
60
+ RailsAdminClone::ModelCloner.new(self).default_clone.tap do |post|
61
+ post.status = :draft
62
+ post.slug = nil
63
+ post.title = "Copy of #{self.title}"
64
+ end
65
+ end
66
+
67
+ end
68
+ ```
69
+
51
70
  ## Contributing
52
71
  Submitting a Pull Request:
53
72
 
@@ -64,6 +64,11 @@ module RailsAdminClone
64
64
  end
65
65
  end
66
66
 
67
+ def assign_association(association, old_association, new_association)
68
+ assign_attributes_for(new_association, get_association_attributes_from(old_association, association))
69
+ new_association = clone_recursively!(old_association, new_association)
70
+ end
71
+
67
72
  # deep clone
68
73
  def clone_recursively!(old_object, new_object)
69
74
  new_object = clone_has_one old_object, new_object
@@ -84,17 +89,23 @@ module RailsAdminClone
84
89
  # clone has_one associations
85
90
  def clone_has_one(old_object, new_object)
86
91
  old_object.class.reflect_on_all_associations(:has_one).each do |association|
87
- if old_association = old_object.send(association.name)
88
- new_object.send(:"build_#{association.name}").tap do |new_association|
89
- assign_attributes_for(new_association, get_association_attributes_from(old_association, association))
90
- new_association = clone_recursively!(old_association, new_association)
91
- end
92
- end
92
+ old_association = old_object.send(association.name)
93
+ build_has_one(new_object, association, old_association) if build_has_one?(old_object, association)
93
94
  end
94
95
 
95
96
  new_object
96
97
  end
97
98
 
99
+ def build_has_one?(object, association)
100
+ object.send(association.name) && association.options[:through].blank?
101
+ end
102
+
103
+ def build_has_one(new_object, association, old_association)
104
+ new_object.send(:"build_#{association.name}").tap do |new_association|
105
+ assign_association(association, old_association, new_association)
106
+ end
107
+ end
108
+
98
109
  # clone has_many associations
99
110
  def clone_has_many(old_object, new_object)
100
111
  associations = old_object.class.reflect_on_all_associations(:has_many)
@@ -103,8 +114,7 @@ module RailsAdminClone
103
114
  associations.each do |association|
104
115
  old_object.send(association.name).each do |old_association|
105
116
  new_object.send(association.name).build.tap do |new_association|
106
- assign_attributes_for(new_association, get_association_attributes_from(old_association, association))
107
- new_association = clone_recursively!(old_association, new_association)
117
+ assign_association(association, old_association, new_association)
108
118
  end
109
119
  end
110
120
  end
@@ -119,7 +129,7 @@ module RailsAdminClone
119
129
  end
120
130
 
121
131
  associations.each do |association|
122
- method_ids = "#{association.name.to_s.singularize.to_sym}_ids"
132
+ method_ids = "#{association.name.to_s.singularize.to_sym}_ids"
123
133
  new_object.send(:"#{method_ids}=", old_object.send(method_ids))
124
134
  end
125
135
 
@@ -1,3 +1,3 @@
1
1
  module RailsAdminClone
2
- VERSION = "0.0.4"
2
+ VERSION = "0.0.5"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rails_admin_clone
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrea Dal Ponte
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-02-05 00:00:00.000000000 Z
11
+ date: 2014-02-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '3.2'
19
+ version: 3.2.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '3.2'
26
+ version: 3.2.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rails_admin
29
29
  requirement: !ruby/object:Gem::Requirement