Popularity
2.8
Growing
Activity
3.4
-
257
4
15

Description

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

Programming language: Ruby
License: MIT License
Latest version: v1.2.0

Clowne alternatives and similar gems

Based on the "Abstraction" category

Do you think we are missing an alternative of Clowne or a related project?

Add another 'Abstraction' Gem

README

Gem Version Build Status Test Coverage Maintainability 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

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

class Profile < ActiveRecord::Base
  # create_table :profiles do |t|
  #   t.string :name
  # end
end

class Post < ActiveRecord::Base
  # create_table :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 id: 1, login: 'clown', email: 'clown@circus.example.com'>

operation = UserCloner.call(user, email: "fake@example.com")
# => <#Clowne::Utils::Operation...>

operation.to_record
# => <#User id: nil, login: nil, email: 'fake@example.com'>

operation.persist!
# => true

cloned = operation.to_record
# => <#User id: 2, login: nil, email: 'fake@example.com'>

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 1:M M:M
Active Record has_one belongs_to 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.


*Note that all licence references and agreements mentioned in the Clowne README section above are relevant to that project's source code only.