Class: Rails::Generator::Commands::Destroy

Inherits:
RewindBase show all
Defined in:
lib/rails_generator/commands.rb

Overview

Undo the actions performed by a generator. Rewind the action manifest and attempt to completely erase the results of each action.

Instance Attribute Summary

Attributes inherited from Base

#args, #destination_root, #source_root

Attributes included from Options

#options

Instance Method Summary collapse

Methods inherited from RewindBase

#invoke!

Methods inherited from Base

#class_collisions, #dependency, #invoke!, #readme

Methods inherited from Base

#destination_path, #initialize, #manifest, #source_path

Methods included from Options

append_features

Constructor Details

This class inherits a constructor from Rails::Generator::Base

Instance Method Details

#complex_template(*args) ⇒ Object



422
423
424
# File 'lib/rails_generator/commands.rb', line 422

def complex_template(*args)
  # nothing should be done here
end

#directory(relative_path) ⇒ Object

Remove each directory in the given path from right to left. Remove each subdirectory if it exists and is a directory.



388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
# File 'lib/rails_generator/commands.rb', line 388

def directory(relative_path)
  parts = relative_path.split('/')
  until parts.empty?
    partial = File.join(parts)
    path = destination_path(partial)
    if File.exists?(path)
      if Dir[File.join(path, '*')].empty?
        logger.rmdir partial
        unless options[:pretend]
          if options[:svn]
            # If the directory has been marked to be added
            # but has not yet been checked in, revert and delete
            if options[:svn][relative_path]
              system("svn revert #{path}")
              FileUtils.rmdir(path)
            else
            # If the directory is not in the status list, it
            # has no modifications so we can simply remove it
              system("svn rm #{path}")
            end
          else
            FileUtils.rmdir(path)
          end
        end
      else
        logger.notempty partial
      end
    else
      logger.missing partial
    end
    parts.pop
  end
end

#file(relative_source, relative_destination, file_options = {}) ⇒ Object Also known as: template

Remove a file if it exists and is a file.



356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
# File 'lib/rails_generator/commands.rb', line 356

def file(relative_source, relative_destination, file_options = {})
  destination = destination_path(relative_destination)
  if File.exists?(destination)
    logger.rm relative_destination
    unless options[:pretend]
      if options[:svn]
        # If the file has been marked to be added
        # but has not yet been checked in, revert and delete
        if options[:svn][relative_destination]
          system("svn revert #{destination}")
          FileUtils.rm(destination)
        else
        # If the directory is not in the status list, it
        # has no modifications so we can simply remove it
          system("svn rm #{destination}")
        end  
      else
        FileUtils.rm(destination)
      end
    end
  else
    logger.missing relative_destination
    return
  end
end

#migration_template(relative_source, relative_destination, template_options = {}) ⇒ Object

When deleting a migration, it knows to delete every file named “[0-9]*_#file_name”.



427
428
429
430
431
432
433
434
435
436
437
438
439
440
# File 'lib/rails_generator/commands.rb', line 427

def migration_template(relative_source, relative_destination, template_options = {})
  migration_directory relative_destination

  migration_file_name = template_options[:migration_file_name] || file_name
  unless migration_exists?(migration_file_name)
    puts "There is no migration named #{migration_file_name}"
    return
  end


  existing_migrations(migration_file_name).each do |file_path|
    file(relative_source, file_path, template_options)
  end
end