deep_copy 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- deep_copy (0.0.1)
4
+ deep_copy (0.0.2)
5
5
  activerecord (>= 2.3)
6
6
 
7
7
  GEM
data/README.md CHANGED
@@ -1,3 +1,24 @@
1
- Deep copy method for ActiveRecord
1
+ # Deep copy
2
+
3
+ Deep copy allows you to clone Active Record objects including its associations.
4
+
5
+ ## Installation
6
+
7
+ Just require the "deep_copy" gem on your project. On Rails 2.3, that is:
8
+ config.gem "deep_copy"
9
+ on your environment.rb
10
+
11
+ ## Usage
12
+
13
+ Pick any Active Record object and call _deep\_copy_ on it. You can also include associations and except fields, like this:
14
+ new_user = user.deep_copy :include => :car, :exclude => [:name, {:car => [:number_of_wheels, :number_of_accidents]}]
15
+ In this example we're cloning a user, including its car. However, we're not cloning the user's name nor are we cloning his car's _number\_of\_wheels_ and _number\_of\_accidents_.
16
+
17
+ You can also go deeper (bad pun intended). In this example, we'll clone a lot of people (excluding their names):
18
+ new_son = son.deep_copy :include => [{:parent => grand_parent}, :siblings], :exclude => [:name, {:parent => [:name, :grand_parent => :name]}, {:siblings => :name}]
19
+
20
+ ### Acknowledgements
21
+
22
+ This gem was inspired in Jan De Poorter's [deep_cloning](http://github.com/DefV/deep_cloning) plugin. All of this work is his, except for the gem part and the field exceptions in associations.
2
23
 
3
24
  Copyright (c) 2010 Gonçalo Silva
@@ -2,13 +2,13 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = "deep_copy"
5
- s.version = "0.0.1"
5
+ s.version = "0.0.2"
6
6
  s.platform = Gem::Platform::RUBY
7
7
  s.authors = ["Gonçalo Silva", "Jan De Poorter"]
8
8
  s.email = ["goncalossilva@gmail.com", "github@defv.be"]
9
9
  s.homepage = "http://github.com/goncalossilva/deep_copy"
10
- s.summary = "Deep copy for Active Record"
11
- s.description = "A method to deep copy AR objects, including its associations"
10
+ s.summary = "Deep copy for Active Record objects"
11
+ s.description = "A method to deep copy AR objects, including their associations"
12
12
  s.rubyforge_project = s.name
13
13
 
14
14
  s.required_rubygems_version = ">= 1.3.7"
@@ -9,37 +9,32 @@ module DeepCopy
9
9
 
10
10
  if exceptions
11
11
  Array(exceptions).each do |attribute|
12
- unless attribute.is_a?(Hash)
13
- kopy.write_attribute(attribute, attributes_from_column_definition[attribute.to_s])
14
- exceptions.delete(attribute)
15
- end
12
+ kopy.write_attribute(attribute, attributes_from_column_definition[attribute.to_s])
13
+ #exceptions.delete(attribute) if exceptions.is_a?(Array)
16
14
  end
17
15
  end
18
16
 
19
17
  if inclusions
20
18
  Array(inclusions).each do |association, deep_associations|
21
- if(association.kind_of? Hash)
19
+ if(association.is_a?(Hash))
22
20
  deep_associations = association[association.keys.first]
23
21
  association = association.keys.first
24
22
  end
25
-
26
- puts "EXCEPTIONS: "
27
- puts exceptions
28
- puts association
23
+ association = association.to_sym
29
24
 
30
25
  deeper_exceptions = if exceptions.is_a?(Hash)
31
26
  exceptions[association]
32
27
  elsif exceptions.is_a?(Array)
33
- exceptions.find { |el| el.keys.first == association}
28
+ data = exceptions.find { |el| el.keys.first.to_sym == association if el.is_a?(Hash)}
29
+ data.nil? ? {} : data[association]
34
30
  end
35
31
 
36
32
  opts = deep_associations.blank? ? {} : {:include => deep_associations}
37
- opts.merge(:except => deeper_exceptions) unless deeper_exceptions.blank?
33
+ opts.merge!(:except => deeper_exceptions) unless deeper_exceptions.blank?
38
34
 
39
- puts "OPTS: "
40
- puts opts
35
+ association_reflection = self.class.reflect_on_association(association)
36
+ next if association_reflection.nil? # invalid association
41
37
 
42
- association_reflection = self.class.reflect_on_association(association.to_sym)
43
38
  cloned_object = case association_reflection.macro
44
39
  when :belongs_to, :has_one
45
40
  self.send(association) && self.send(association).deep_copy(opts)
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 0
8
- - 1
9
- version: 0.0.1
8
+ - 2
9
+ version: 0.0.2
10
10
  platform: ruby
11
11
  authors:
12
12
  - "Gon\xC3\xA7alo Silva"
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-09-28 00:00:00 +01:00
18
+ date: 2010-10-12 00:00:00 +01:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -32,7 +32,7 @@ dependencies:
32
32
  type: :runtime
33
33
  prerelease: false
34
34
  version_requirements: *id001
35
- description: A method to deep copy AR objects, including its associations
35
+ description: A method to deep copy AR objects, including their associations
36
36
  email:
37
37
  - goncalossilva@gmail.com
38
38
  - github@defv.be
@@ -67,7 +67,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
67
67
  requirements:
68
68
  - - ">="
69
69
  - !ruby/object:Gem::Version
70
- hash: 325022159
70
+ hash: 529805745
71
71
  segments:
72
72
  - 0
73
73
  version: "0"
@@ -87,6 +87,6 @@ rubyforge_project: deep_copy
87
87
  rubygems_version: 1.3.7
88
88
  signing_key:
89
89
  specification_version: 3
90
- summary: Deep copy for Active Record
90
+ summary: Deep copy for Active Record objects
91
91
  test_files: []
92
92