Undo the actions performed by a generator. Rewind the action manifest and attempt to completely erase the results of each action.
# File lib/rails_generator/commands.rb, line 512 def complex_template(*args) # nothing should be done here end
Remove each directory in the given path from right to left. Remove each subdirectory if it exists and is a directory.
# File lib/rails_generator/commands.rb, line 476 def directory(relative_path) parts = relative_path.split('/') until parts.empty? partial = File.join(parts) path = destination_path(partial) if File.exist?(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 # I don't think git needs to remove directories?.. # or maybe they have special consideration... else FileUtils.rmdir(path) end end else logger.notempty partial end else logger.missing partial end parts.pop end end
Remove a file if it exists and is a file.
# File lib/rails_generator/commands.rb, line 431 def file(relative_source, relative_destination, file_options = {}) destination = destination_path(relative_destination) if File.exist?(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 elsif options[:git] if options[:git][:new][relative_destination] # file has been added, but not committed system("git reset HEAD #{relative_destination}") FileUtils.rm(destination) elsif options[:git][:modified][relative_destination] # file is committed and modified system("git rm -f #{relative_destination}") else # If the directory is not in the status list, it # has no modifications so we can simply remove it system("git rm #{relative_destination}") end else FileUtils.rm(destination) end end else logger.missing relative_destination return end end
When deleting a migration, it knows to delete every file named "[0-9]*_#{file_name}".
# File lib/rails_generator/commands.rb, line 517 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
# File lib/rails_generator/commands.rb, line 532 def route_resources(*resources) resource_list = resources.map { |r| r.to_sym.inspect }.join(', ') look_for = "\n map.resources #{resource_list}\n" logger.route "map.resources #{resource_list}" gsub_file 'config/routes.rb', /(#{look_for})/i, '' end
Templates are deleted just like files and the actions take the same parameters, so simply alias the file method.
Generated with the Darkfish Rdoc Generator 2.