/**
  * Show migration infomation.
  *
  * @param \Jumilla\Versionia\Laravel\Migrator $migrator
  */
 protected function showMigrations(Migrator $migrator)
 {
     $this->line('<comment>Migrations</comment>');
     $groups = $migrator->migrationGroups();
     if (count($groups) > 0) {
         // get [$group => $items]
         $installed_migrations = $migrator->installedMigrationsByDesc();
         foreach ($groups as $group) {
             // [$items] to [$installed_versions]
             $installed_versions = $installed_migrations->get($group, collect())->pluck('version');
             // [$versions] to $latest_version
             $latest_installed_version = $installed_versions->get(0, Migrator::VERSION_NULL);
             // enum definition
             foreach ($migrator->migrationVersionsByDesc($group) as $version => $class) {
                 $installed = $installed_versions->contains($version);
                 if ($version === $latest_installed_version) {
                     $mark = '*';
                 } else {
                     $mark = $installed ? '-' : ' ';
                 }
                 if (!class_exists($class)) {
                     $this->line("{$mark} <info>[{$group}/{$version}]</info> <error>{$class}</error>");
                     $this->line('');
                     $this->error('Error: Class not found.');
                     continue;
                 }
                 $migration = new $class();
                 if (!$migration instanceof Migration) {
                     $this->line("{$mark} <info>[{$group}/{$version}]</info> <error>{$class}</error>");
                     $this->line('');
                     $this->error('Error: Must inherit from class "Illuminate\\Database\\Migrations\\Migration".');
                     continue;
                 }
                 $this->line("{$mark} <info>[{$group}/{$version}]</info> {$class}");
             }
             $this->line('');
         }
     } else {
         $this->info('Nothing.');
         $this->line('');
     }
 }
 /**
  * Execute rollback and upgrade one version.
  *
  * @param \Jumilla\Versionia\Laravel\Migrator $migrator
  * @param string                              $group
  */
 protected function doAgain(Migrator $migrator, $group)
 {
     // retreive installed versions
     $installed_migrations = $migrator->installedLatestMigrations();
     $installed_version = data_get($installed_migrations, $group . '.version', Migrator::VERSION_NULL);
     $definition_versions = $migrator->migrationVersionsByDesc($group);
     if (!$this->checkInstalledVersion($installed_version, $definition_versions)) {
         return;
     }
     // remove migration log
     $definition_latest_version = array_get(array_keys($definition_versions), 0, Migrator::VERSION_NULL);
     if ($migrator->compareMigrationVersion($installed_version, $definition_latest_version) >= 0) {
         $this->line("<info>Remove log [{$group}/{$installed_version}]</info>");
         $migrator->removeMigrationLog($group, $installed_version);
     }
     // downgrade & upgrade
     foreach ($definition_versions as $version => $class) {
         $this->infoDowngrade($group, $version, $class);
         $migrator->doDowngrade($group, $version, $class);
         $this->infoUpgrade($group, $version, $class);
         $migrator->doUpgrade($group, $version, $class);
         break;
     }
 }