1:  2:  3:  4:  5:  6:  7:  8:  9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 
<?php
    namespace Deliverist\Builder\Commands;
    use Deliverist\Builder\Builder;
    use Deliverist\Builder\CommandException;
    use Deliverist\Builder\ICommand;
    class Rename implements ICommand
    {
        
        public function run(Builder $builder, $from = NULL, $to = NULL)
        {
            if (!isset($from)) {
                throw new RenameException("Missing parameter 'from'.");
            }
            $paths = array();
            if (is_array($from)) {
                $paths = $from;
            } else {
                if ($to === NULL) {
                    throw new RenameException("Missing parameter 'to'.");
                }
                $paths[$from] = $to;
            }
            foreach ($paths as $fromPath => $toPath) {
                $builder->log("Renaming '$fromPath' to '$toPath'.");
                $fromReal = $builder->getPath($fromPath);
                $toReal = $builder->getPath($toPath);
                @mkdir(dirname($toReal), 0777, TRUE); 
                $res = @rename($fromReal, $toReal);
                if ($res === FALSE) {
                    throw new RenameException("Renaming of '$fromPath' to '$toPath' failed.");
                }
            }
        }
    }
    class RenameException extends CommandException
    {
    }