A flexible gem for cloning models
Switch branches/tags
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
bin
docs
gemfiles
lib
spec
.codeclimate.yml
.gitattributes
.gitignore
.rspec
.rubocop.yml
.rufo
.travis.yml
CHANGELOG.md
Gemfile
LICENSE.txt
README.md
Rakefile
clowne.gemspec

README.md

Gem Version Build Status Test Coverage Docs

Clowne

A flexible gem for cloning your models. Clowne focuses on ease of use and provides the ability to connect various ORM adapters.

📖 Read Evil Martians Chronicles to learn about possible use cases.

📑 Documentation

Sponsored by Evil Martians

Installation

To install Clowne with RubyGems:

gem install clowne

Or add this line to your application's Gemfile:

gem 'clowne'

Quick Start

Assume that you have the following model:

class User < ActiveRecord::Base
  # create_table :users do |t|
  #  t.string :login
  #  t.string :email
  #  t.timestamps null: false
  # end

  has_one :profile
  has_many :posts
end

Let's declare our cloners first:

class UserCloner < Clowne::Cloner
  adapter :active_record

  include_association :profile, clone_with: SpecialProfileCloner
  include_association :posts

  nullify :login

  # params here is an arbitrary Hash passed into cloner
  finalize do |_source, record, params|
    record.email = params[:email]
  end
end

class SpecialProfileCloner < Clowne::Cloner
  adapter :active_record

  nullify :name
end

Now you can use UserCloner to clone existing records:

user = User.last
#=> <#User(login: 'clown', email: 'clown@circus.example.com')>

cloned = UserCloner.call(user, email: 'fake@example.com')
cloned.persisted?
# => false

cloned.save!
cloned.login
# => nil
cloned.email
# => "fake@example.com"

# associations:
cloned.posts.count == user.posts.count
# => true
cloned.profile.name
# => nil

Take a look at our documentation for more info!

Supported ORM adapters

Adapter 1:1 1:M M:M
Active Record has_one has_many has_and_belongs_to
Sequel one_to_one one_to_many many_to_many

Maintainers

License

The gem is available as open source under the terms of the MIT License.