Class | Rails::Generator::Commands::Destroy |
In: |
vendor/rails/railties/lib/rails_generator/commands.rb
|
Parent: | RewindBase |
Undo the actions performed by a generator. Rewind the action manifest and attempt to completely erase the results of each action.
# File vendor/rails/railties/lib/rails_generator/commands.rb, line 525 525: def complex_template(*args) 526: # nothing should be done here 527: end
Remove each directory in the given path from right to left. Remove each subdirectory if it exists and is a directory.
# File vendor/rails/railties/lib/rails_generator/commands.rb, line 489 489: def directory(relative_path) 490: parts = relative_path.split('/') 491: until parts.empty? 492: partial = File.join(parts) 493: path = destination_path(partial) 494: if File.exist?(path) 495: if Dir[File.join(path, '*')].empty? 496: logger.rmdir partial 497: unless options[:pretend] 498: if options[:svn] 499: # If the directory has been marked to be added 500: # but has not yet been checked in, revert and delete 501: if options[:svn][relative_path] 502: system("svn revert #{path}") 503: FileUtils.rmdir(path) 504: else 505: # If the directory is not in the status list, it 506: # has no modifications so we can simply remove it 507: system("svn rm #{path}") 508: end 509: # I don't think git needs to remove directories?.. 510: # or maybe they have special consideration... 511: else 512: FileUtils.rmdir(path) 513: end 514: end 515: else 516: logger.notempty partial 517: end 518: else 519: logger.missing partial 520: end 521: parts.pop 522: end 523: end
Remove a file if it exists and is a file.
# File vendor/rails/railties/lib/rails_generator/commands.rb, line 444 444: def file(relative_source, relative_destination, file_options = {}) 445: destination = destination_path(relative_destination) 446: if File.exist?(destination) 447: logger.rm relative_destination 448: unless options[:pretend] 449: if options[:svn] 450: # If the file has been marked to be added 451: # but has not yet been checked in, revert and delete 452: if options[:svn][relative_destination] 453: system("svn revert #{destination}") 454: FileUtils.rm(destination) 455: else 456: # If the directory is not in the status list, it 457: # has no modifications so we can simply remove it 458: system("svn rm #{destination}") 459: end 460: elsif options[:git] 461: if options[:git][:new][relative_destination] 462: # file has been added, but not committed 463: system("git reset HEAD #{relative_destination}") 464: FileUtils.rm(destination) 465: elsif options[:git][:modified][relative_destination] 466: # file is committed and modified 467: system("git rm -f #{relative_destination}") 468: else 469: # If the directory is not in the status list, it 470: # has no modifications so we can simply remove it 471: system("git rm #{relative_destination}") 472: end 473: else 474: FileUtils.rm(destination) 475: end 476: end 477: else 478: logger.missing relative_destination 479: return 480: end 481: end
When deleting a migration, it knows to delete every file named "[0-9]*_#{file_name}".
# File vendor/rails/railties/lib/rails_generator/commands.rb, line 530 530: def migration_template(relative_source, relative_destination, template_options = {}) 531: migration_directory relative_destination 532: 533: migration_file_name = template_options[:migration_file_name] || file_name 534: unless migration_exists?(migration_file_name) 535: puts "There is no migration named #{migration_file_name}" 536: return 537: end 538: 539: 540: existing_migrations(migration_file_name).each do |file_path| 541: file(relative_source, file_path, template_options) 542: end 543: end
# File vendor/rails/railties/lib/rails_generator/commands.rb, line 545 545: def route_resources(*resources) 546: resource_list = resources.map { |r| r.to_sym.inspect }.join(', ') 547: look_for = "\n map.resources #{resource_list}\n" 548: logger.route "map.resources #{resource_list}" 549: gsub_file 'config/routes.rb', /(#{look_for})/mi, '' 550: end