class Copyable::Declarations::Columns
Public Class Methods
execute(column_list, original_model, new_model, overrides)
click to toggle source
this is the algorithm for copying columns from the original record to the brand new copy of the record according to the instructions given in the copyable declaration
# File lib/copyable/declarations/columns.rb, line 8 def self.execute(column_list, original_model, new_model, overrides) column_list.each do |column, advice| # when create_copy! is called, you can pass in a hash of # overrides that trumps the instructions in the copyable # declaration if overrides[column.to_sym].present? value = overrides[column.to_sym] elsif overrides[column.to_s].present? value = overrides[column.to_s] elsif advice == :copy value = original_model.send(column) elsif advice == :do_not_copy value = nil elsif advice.is_a? Proc value = advice.call(original_model) else message = "Error in copyable:columns of #{original_model.class.name}: " message << "the column '#{column}' must be :copy, :do_not_copy, or a lambda." raise ColumnError.new(message) end new_model.send("#{column}=", value) end end