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 500 500: def complex_template(*args) 501: # nothing should be done here 502: 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 464 464: def directory(relative_path) 465: parts = relative_path.split('/') 466: until parts.empty? 467: partial = File.join(parts) 468: path = destination_path(partial) 469: if File.exist?(path) 470: if Dir[File.join(path, '*')].empty? 471: logger.rmdir partial 472: unless options[:pretend] 473: if options[:svn] 474: # If the directory has been marked to be added 475: # but has not yet been checked in, revert and delete 476: if options[:svn][relative_path] 477: system("svn revert #{path}") 478: FileUtils.rmdir(path) 479: else 480: # If the directory is not in the status list, it 481: # has no modifications so we can simply remove it 482: system("svn rm #{path}") 483: end 484: # I don't think git needs to remove directories?.. 485: # or maybe they have special consideration... 486: else 487: FileUtils.rmdir(path) 488: end 489: end 490: else 491: logger.notempty partial 492: end 493: else 494: logger.missing partial 495: end 496: parts.pop 497: end 498: end
Remove a file if it exists and is a file.
# File vendor/rails/railties/lib/rails_generator/commands.rb, line 419 419: def file(relative_source, relative_destination, file_options = {}) 420: destination = destination_path(relative_destination) 421: if File.exist?(destination) 422: logger.rm relative_destination 423: unless options[:pretend] 424: if options[:svn] 425: # If the file has been marked to be added 426: # but has not yet been checked in, revert and delete 427: if options[:svn][relative_destination] 428: system("svn revert #{destination}") 429: FileUtils.rm(destination) 430: else 431: # If the directory is not in the status list, it 432: # has no modifications so we can simply remove it 433: system("svn rm #{destination}") 434: end 435: elsif options[:git] 436: if options[:git][:new][relative_destination] 437: # file has been added, but not committed 438: system("git reset HEAD #{relative_destination}") 439: FileUtils.rm(destination) 440: elsif options[:git][:modified][relative_destination] 441: # file is committed and modified 442: system("git rm -f #{relative_destination}") 443: else 444: # If the directory is not in the status list, it 445: # has no modifications so we can simply remove it 446: system("git rm #{relative_destination}") 447: end 448: else 449: FileUtils.rm(destination) 450: end 451: end 452: else 453: logger.missing relative_destination 454: return 455: end 456: 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 505 505: def migration_template(relative_source, relative_destination, template_options = {}) 506: migration_directory relative_destination 507: 508: migration_file_name = template_options[:migration_file_name] || file_name 509: unless migration_exists?(migration_file_name) 510: puts "There is no migration named #{migration_file_name}" 511: return 512: end 513: 514: 515: existing_migrations(migration_file_name).each do |file_path| 516: file(relative_source, file_path, template_options) 517: end 518: end
# File vendor/rails/railties/lib/rails_generator/commands.rb, line 520 520: def route_resources(*resources) 521: resource_list = resources.map { |r| r.to_sym.inspect }.join(', ') 522: look_for = "\n map.resources #{resource_list}\n" 523: logger.route "map.resources #{resource_list}" 524: gsub_file 'config/routes.rb', /(#{look_for})/mi, '' 525: end