rails_admin_clone 0.0.1 → 0.0.2

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.
@@ -17,8 +17,7 @@ module RailsAdmin
17
17
 
18
18
  register_instance_option :controller do
19
19
  Proc.new do
20
- action_config = RailsAdmin::Config::Actions.find(:clone, {controller: self, abstract_model: @abstract_model, object: @object })
21
- model_cloner = RailsAdminClone::ModelCloner.new(@object)
20
+ model_cloner = RailsAdminClone::ModelCloner.new(@object)
22
21
  custom_method = model_config.clone_config.custom_method
23
22
 
24
23
  if custom_method.present?
@@ -39,7 +38,6 @@ module RailsAdmin
39
38
  format.html { render @action.template_name }
40
39
  format.js { render @action.template_name, :layout => false }
41
40
  end
42
-
43
41
  end
44
42
  end
45
43
 
@@ -11,7 +11,15 @@ module RailsAdminClone
11
11
 
12
12
  def default_clone
13
13
  new_object = self.clone_object(self.original_model)
14
- self.clone_recursively(self.original_model, new_object)
14
+
15
+ self.clone_recursively!(self.original_model, new_object)
16
+ begin
17
+ self.clone_recursively!(self.original_model, new_object)
18
+ rescue Exception => e
19
+ Rails.logger.info "RailsAdminClone Exception on clone_recursively!:\n#{e}"
20
+ end
21
+
22
+ new_object
15
23
  end
16
24
 
17
25
  def method_clone(method)
@@ -20,10 +28,11 @@ module RailsAdminClone
20
28
 
21
29
  protected
22
30
 
23
- def clone_recursively(old_object, new_object)
31
+ def clone_recursively!(old_object, new_object)
24
32
  new_object = clone_has_one(old_object, new_object)
25
- new_object = clone_has_many(old_object, new_object)
26
33
  new_object = clone_habtm(old_object, new_object)
34
+ new_object = clone_has_many(old_object, new_object)
35
+
27
36
 
28
37
  new_object
29
38
  end
@@ -55,7 +64,7 @@ module RailsAdminClone
55
64
 
56
65
  new_object.send(:"build_#{association_name}").tap do |new_association|
57
66
  new_association.assign_attributes attributes, without_protection: true
58
- new_association = self.clone_recursively(old_association, new_association)
67
+ new_association = self.clone_recursively!(old_association, new_association)
59
68
  end
60
69
  end
61
70
  end
@@ -65,7 +74,10 @@ module RailsAdminClone
65
74
 
66
75
  # clone has_many associations
67
76
  def clone_has_many(old_object, new_object)
68
- old_object.class.reflect_on_all_associations(:has_many).each do |class_association|
77
+ associations = old_object.class.reflect_on_all_associations(:has_many)
78
+ .select{|a| !a.options.keys.include?(:through)}
79
+
80
+ associations.each do |class_association|
69
81
  association_name = class_association.name
70
82
  # primary_key = association_name.to_s.singularize.camelize.constantize.try(:primary_key) || 'id'
71
83
  primary_key = 'id'
@@ -77,7 +89,7 @@ module RailsAdminClone
77
89
 
78
90
  new_object.send(association_name).build.tap do |new_association|
79
91
  new_association.assign_attributes attributes, without_protection: true
80
- new_association = self.clone_recursively(old_association, new_association)
92
+ new_association = self.clone_recursively!(old_association, new_association)
81
93
  end
82
94
  end
83
95
  end
@@ -87,11 +99,17 @@ module RailsAdminClone
87
99
 
88
100
  # clone has_and_belongs_to_many associtations
89
101
  def clone_habtm(old_object, new_object)
90
- old_object.class.reflect_on_all_associations(:has_and_belongs_to_many).each do |class_association|
102
+ associations = old_object.class.reflect_on_all_associations.select do |a|
103
+ a.macro == :has_and_belongs_to_many || (a.macro == :has_many && a.options.keys.include?(:through))
104
+ end
105
+
106
+ associations.each do |class_association|
91
107
  association_name = class_association.name
92
108
  method_ids = "#{association_name.to_s.singularize.to_sym}_ids"
93
109
 
94
- new_object.send(method_ids, old_object.send(method_ids))
110
+ Rails.logger.info "**** association_name: #{association_name}"
111
+
112
+ new_object.send(:"#{method_ids}=", old_object.send(method_ids))
95
113
  end
96
114
 
97
115
  new_object
@@ -100,7 +118,6 @@ module RailsAdminClone
100
118
  def build_from(object)
101
119
  object.class.new
102
120
  end
103
-
104
121
  end
105
122
  end
106
123
 
@@ -1,3 +1,3 @@
1
1
  module RailsAdminClone
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rails_admin_clone
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-09-29 00:00:00.000000000 Z
12
+ date: 2013-10-14 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails