Skip to content

seku/deep_cloneable

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

This gem gives every ActiveRecord::Base object the possibility to do a deep clone. It is a rails3 upgrade of the deep_cloning plugin (github.com/openminds/deep_cloning).

  • Activerecord, tested with Rails 3.

  • Install by adding the gem to your Gemfile

    gem ‘deep_cloneable’

  • Rails 2:

    gem install deep_cloneable

And include the gem in your apps config

config.gem 'deep_cloneable'
  • Or install as a plugin if you must:

    ./script/plugin install git://github.com/moiristo/deep_cloneable.git

pirate.clone :include => :mateys
pirate.clone :include => [:mateys, :treasures]
pirate.clone :include => {:treasures => :gold_pieces}
pirate.clone :include => [:mateys, {:treasures => :gold_pieces}]

A dictionary ensures that models are not cloned multiple times when it is associated to nested models. When using a dictionary, ensure recurring associations are cloned first:

pirate.clone :include => [:mateys, {:treasures => [:matey, :gold_pieces], :use_dictionary => true }]

If this is not an option for you, it is also possible to populate the dictionary manually in advance:

dict = { :mateys => {} }
pirate.mateys.each{|m| dict[:mateys][m] = m.clone }
pirate.clone :include => [:mateys, {:treasures => [:matey, :gold_pieces], :dictionary => dict }]
pirate.clone :except => :name
pirate.clone :except => [:name, :nick_name]
pirate.clone :include => :parrot, :except => [:name, { :parrot => [:name] }]
  • Fork the project.

  • Make your feature addition or bug fix.

  • Add tests for it. This is important so I don’t break it in a future version unintentionally.

  • Commit, do not mess with rakefile, version, or history. (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)

  • Send me a pull request. Bonus points for topic branches.

Copyright © 2010 Reinier de Lange. See LICENSE for details.

About

Extends the functionality of ActiveRecord::Base#clone to perform a deep clone that includes user specified associations.

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages

  • Ruby 100.0%