class Clowne::Adapters::Base

ORM-independant adapter (just calls dup). Works with nullify/finalize.

Public Class Methods

dup_record(record) click to toggle source

Duplicate record and remember record <-> clone relationship in operation Cab be overrided in special adapter

record

Instance of record (ActiveRecord or Sequel)

# File lib/clowne/adapters/base.rb, line 22
def dup_record(record)
  record.dup.tap do |clone|
    operation = operation_class.current
    operation.add_mapping(record, clone)
  end
end
operation_class() click to toggle source

Operation class which using for cloning Cab be overrided in special adapter

# File lib/clowne/adapters/base.rb, line 31
def operation_class
  Clowne::Utils::Operation
end

Public Instance Methods

clone(source, plan, params: {}) click to toggle source

Using a plan make full duplicate of record

source

Instance of cloned object (ex: User.new(posts: posts))

plan

Array of Declarations

params

Custom params hash

# File lib/clowne/adapters/base.rb, line 40
def clone(source, plan, params: {})
  declarations = plan.declarations
  init_record = init_record(self.class.dup_record(source))

  declarations.inject(init_record) do |record, (type, declaration)|
    resolver_for(type).call(source, record, declaration, params: params, adapter: self)
  end
end
init_record(record) click to toggle source
# File lib/clowne/adapters/base.rb, line 49
def init_record(record)
  # Override in custom adapters
  record
end