deep_copy 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.
@@ -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