UNPKG

@openveo/api

Version:
87 lines (72 loc) 2.11 kB
'use strict'; /** * @module grunt/renameTask */ var fs = require('fs'); var async = require('async'); var fsApi = process.requireApi('lib/fileSystem.js'); /** * Defines a grunt task to rename a file or a directory. * * @example * // Register task * var openVeoApi = require('@openveo/api'); * grunt.registerMultiTask('rename', openVeoApi.grunt.renameTask(grunt)); * * // Configure task * grunt.initConfig({ * rename: { * renameDirectory: { * src: 'directoryToRename', * dest: 'some/sub/directories/directoryRenamed' * }, * renameFile: { * src: 'fileToRename.txt', * dest: 'some/sub/directories/fileRenamed.txt' * } * } * }); * * @method * @static * @param {Object} grunt Grunt instance * @return {Function} Task function */ module.exports = function(grunt) { return function() { var done = this.async(); var asyncFunctions = []; var rename = function(src, dest, callback) { grunt.verbose.writeln('Copy ' + src + ' to ' + dest); // Copy source fsApi.copy(src, dest, function(error) { if (error) return callback(error); grunt.verbose.writeln('Copy succeeded'); grunt.verbose.writeln('Remove ' + src); // Remove original source var removeFunction = grunt.file.isDir(src) ? fsApi.rmdir : fs.unlink; removeFunction(src, function(error) { if (error) return callback(error); grunt.verbose.writeln('Remove succeeded'); grunt.log.oklns(src + ' renamed into ' + dest); callback(); }); }); }; // Iterates through src-dest pairs this.files.forEach(function(srcDestFile) { if (srcDestFile.src.length > 1) grunt.fail.fatal(new Error('Only one source can be renamed into ' + srcDestFile.dest)); asyncFunctions.push(function(callback) { rename(srcDestFile.src[0], srcDestFile.dest, callback); }); }); async.series(asyncFunctions, function(error) { if (error) grunt.fail.fatal(error); done(); }); }; };