aboutsummaryrefslogtreecommitdiffstats
path: root/railties/lib/rails_generator/commands.rb
diff options
context:
space:
mode:
Diffstat (limited to 'railties/lib/rails_generator/commands.rb')
-rw-r--r--railties/lib/rails_generator/commands.rb18
1 files changed, 13 insertions, 5 deletions
diff --git a/railties/lib/rails_generator/commands.rb b/railties/lib/rails_generator/commands.rb
index e6795efdb9..f8a7e706a3 100644
--- a/railties/lib/rails_generator/commands.rb
+++ b/railties/lib/rails_generator/commands.rb
@@ -144,12 +144,16 @@ module Rails
# Collisions are handled by checking whether the destination file
# exists and either skipping the file, forcing overwrite, or asking
# the user what to do.
- def file(relative_source, relative_destination, file_options = {})
+ def file(relative_source, relative_destination, file_options = {}, &block)
# Determine full paths for source and destination files.
source = source_path(relative_source)
destination = destination_path(relative_destination)
destination_exists = File.exists?(destination)
- return logger.identical(relative_destination) if destination_exists and identical?(source, destination)
+
+ # If source and destination are identical then we're done.
+ if destination_exists and identical?(source, destination, &block)
+ return logger.identical(relative_destination)
+ end
# Check for and resolve file collisions.
if destination_exists
@@ -209,9 +213,13 @@ module Rails
system("svn add #{destination}") if options[:svn]
end
- # Checks if the source and the destination file are identical.
- def identical?(source, destination)
- IO.read(source) == IO.read(destination)
+ # Checks if the source and the destination file are identical. If
+ # passed a block then the source file is a template that needs to first
+ # be evaluated before being compared to the destination.
+ def identical?(source, destination, &block)
+ source = block_given? ? File.open(source) {|sf| yield(sf)} : IO.read(source)
+ destination = IO.read(destination)
+ source == destination
end
# Generate a file for a Rails application using an ERuby template.