/**
  * Reset the migration.
  *
  * @param Migration $migration
  */
 public function reset(Migration $migration)
 {
     $this->input->read($migration);
     if (!($stream = $migration->getStream())) {
         return;
     }
     $assignments = $migration->getAssignments();
     $stream = $this->streams->findBySlugAndNamespace(array_get($stream, 'slug'), array_get($stream, 'namespace'));
     if (!$stream) {
         return;
     }
     foreach ($assignments as $assignment) {
         /*
          * If there is no field to be
          * found then the assignment
          * needs to be cleaned out.
          *
          * @var FieldInterface
          */
         if (!($field = $this->fields->findBySlugAndNamespace($assignment['field'], $stream->getNamespace()))) {
             continue;
         }
         $assignment['field'] = $field;
         $assignment['stream'] = $stream;
         /*
          * Check if the field is already
          * assigned to the stream and
          * then go ahead and delete.
          */
         if ($assignment = $this->assignments->findByStreamAndField($stream, $field)) {
             $this->assignments->delete($assignment);
         }
     }
 }
 /**
  * Handle the command.
  *
  * @param FieldRepositoryInterface      $fields
  * @param StreamRepositoryInterface     $streams
  * @param AssignmentRepositoryInterface $assignments
  */
 public function handle(FieldRepositoryInterface $fields, StreamRepositoryInterface $streams, AssignmentRepositoryInterface $assignments)
 {
     $addon = $this->migration->getAddon();
     $stream = $this->migration->getStream();
     $namespace = array_get($stream, 'namespace', $this->migration->getNamespace());
     $slug = array_get($stream, 'slug', $addon ? $addon->getSlug() : null);
     $stream = $streams->findBySlugAndNamespace($slug, $namespace);
     foreach ($this->migration->getAssignments() as $field => $assignment) {
         if (is_numeric($field)) {
             $field = $assignment;
         }
         if ($stream && ($field = $fields->findBySlugAndNamespace($field, $namespace))) {
             if ($assignment = $assignments->findByStreamAndField($stream, $field)) {
                 $assignments->delete($assignment);
             }
         }
     }
     $assignments->cleanup();
 }
 /**
  * Handle the command.
  *
  * @param AssignmentRepositoryInterface $assignments
  */
 public function handle(AssignmentRepositoryInterface $assignments)
 {
     foreach ($this->field->getAssignments() as $assignment) {
         $assignments->delete($assignment);
     }
 }
 /**
  * Handle the command.
  *
  * @param  UnassignField $command
  */
 public function handle(UnassignField $command)
 {
     if ($assignment = $this->assignments->findByStreamAndField($command->getStream(), $command->getField())) {
         $this->assignments->delete($assignment);
     }
 }