module DoesCopyErrors
  as_trait do |options|

    from = options[:from]
    to = options[:to]
    move = options[:move]

    transfer_errors = "#{move ? 'move' : 'copy'}_errors_from_#{from}_to_#{to}"

    after_validation transfer_errors.to_sym

    private

    define_method transfer_errors do
      messages = Array.wrap(errors[from])
      messages.each do |message|
        errors.add(to, message)
      end
      if move
        errors.delete(from)
      end
    end

  end
end
