From 10a9205c583a95ef35704aca93079b1700dd35f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Wed, 1 Jul 2009 11:50:06 +0200 Subject: Put migration methods into a separate folder and let just ActiveRecord dependency in ActiveRecord models. --- railties/lib/generators/migration.rb | 56 ++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 railties/lib/generators/migration.rb (limited to 'railties/lib/generators/migration.rb') diff --git a/railties/lib/generators/migration.rb b/railties/lib/generators/migration.rb new file mode 100644 index 0000000000..1981ea6a59 --- /dev/null +++ b/railties/lib/generators/migration.rb @@ -0,0 +1,56 @@ +module Rails + module Generators + # Holds common methods for migrations. It assumes that migrations has the + # [0-9]*_name format and can be used by another frameworks (like Sequel) + # just by implementing the next migration number method. + # + module Migration + + # Creates a migration template at the given destination. The difference + # to the default template method is that the migration number is appended + # to the destination file name. + # + # The migration number, migration file name, migration class name are + # available as instance variables in the template to be rendered. + # + # ==== Examples + # + # migration_template "migration.rb", "db/migrate/add_foo_to_bar.rb" + # + def migration_template(source, destination=nil, log_status=true) + destination = File.expand_path(destination || source, self.destination_root) + + migration_dir = File.dirname(destination) + @migration_number = next_migration_number(migration_dir) + @migration_file_name = File.basename(destination).sub(/\.rb$/, '') + @migration_class_name = @migration_file_name.camelize + + if existing = migration_exists?(migration_dir, @migration_file_name) + raise Rails::Generators::Error, "Another migration is already named #{@migration_file_name}: #{existing}" + end + + destination = File.join(migration_dir, "#{@migration_number}_#{@migration_file_name}.rb") + template(source, destination, log_status) + end + + protected + + def migration_lookup_at(dirname) #:nodoc: + Dir.glob("#{dirname}/[0-9]*_*.rb") + end + + def migration_exists?(dirname, file_name) #:nodoc: + migration_lookup_at(dirname).grep(/\d+_#{file_name}.rb$/).first + end + + def current_migration_number(dirname) #:nodoc: + migration_lookup_at(dirname).collect{ |f| f.split("_").first.to_i }.max + end + + def next_migration_number(dirname) #:nodoc: + raise NotImplementError + end + + end + end +end -- cgit v1.2.3 From 555a956a66628f0c14440e350fefe62125067058 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Wed, 1 Jul 2009 12:07:05 +0200 Subject: Ensure both migration and routes are removed on revoke. --- railties/lib/generators/migration.rb | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'railties/lib/generators/migration.rb') diff --git a/railties/lib/generators/migration.rb b/railties/lib/generators/migration.rb index 1981ea6a59..2eb7c0a964 100644 --- a/railties/lib/generators/migration.rb +++ b/railties/lib/generators/migration.rb @@ -25,11 +25,13 @@ module Rails @migration_file_name = File.basename(destination).sub(/\.rb$/, '') @migration_class_name = @migration_file_name.camelize - if existing = migration_exists?(migration_dir, @migration_file_name) - raise Rails::Generators::Error, "Another migration is already named #{@migration_file_name}: #{existing}" + destination = migration_exists?(migration_dir, @migration_file_name) + + if behavior == :invoke + raise Error, "Another migration is already named #{@migration_file_name}: #{destination}" if destination + destination = File.join(migration_dir, "#{@migration_number}_#{@migration_file_name}.rb") end - destination = File.join(migration_dir, "#{@migration_number}_#{@migration_file_name}.rb") template(source, destination, log_status) end -- cgit v1.2.3 From 25647f70215e38635d16038e71f47730f2717021 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Mon, 13 Jul 2009 20:42:25 +0200 Subject: Add some attribute readers to migration module. --- railties/lib/generators/migration.rb | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'railties/lib/generators/migration.rb') diff --git a/railties/lib/generators/migration.rb b/railties/lib/generators/migration.rb index 2eb7c0a964..5596cc274c 100644 --- a/railties/lib/generators/migration.rb +++ b/railties/lib/generators/migration.rb @@ -5,6 +5,11 @@ module Rails # just by implementing the next migration number method. # module Migration + def self.included(base) #:nodoc: + base.send :attr_reader, :migration_number, + :migration_file_name, + :migration_class_name + end # Creates a migration template at the given destination. The difference # to the default template method is that the migration number is appended -- cgit v1.2.3 From a5ab030ae4ca7496fc9167c9ffa4717be130b235 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Mon, 13 Jul 2009 22:26:58 +0200 Subject: Ensure non timestamped migrations are generated properly. --- railties/lib/generators/migration.rb | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'railties/lib/generators/migration.rb') diff --git a/railties/lib/generators/migration.rb b/railties/lib/generators/migration.rb index 5596cc274c..7014e6deda 100644 --- a/railties/lib/generators/migration.rb +++ b/railties/lib/generators/migration.rb @@ -51,7 +51,9 @@ module Rails end def current_migration_number(dirname) #:nodoc: - migration_lookup_at(dirname).collect{ |f| f.split("_").first.to_i }.max + migration_lookup_at(dirname).collect do |file| + File.basename(file).split("_").first.to_i + end.max.to_i end def next_migration_number(dirname) #:nodoc: -- cgit v1.2.3 From b4ef958de6b16294094de28d00ba25fe2f48accc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Wed, 15 Jul 2009 20:16:37 +0200 Subject: Change false to :verbose => false as in new Thor version. --- railties/lib/generators/migration.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'railties/lib/generators/migration.rb') diff --git a/railties/lib/generators/migration.rb b/railties/lib/generators/migration.rb index 7014e6deda..0a9151ecdf 100644 --- a/railties/lib/generators/migration.rb +++ b/railties/lib/generators/migration.rb @@ -22,7 +22,7 @@ module Rails # # migration_template "migration.rb", "db/migrate/add_foo_to_bar.rb" # - def migration_template(source, destination=nil, log_status=true) + def migration_template(source, destination=nil, config={}) destination = File.expand_path(destination || source, self.destination_root) migration_dir = File.dirname(destination) @@ -37,7 +37,7 @@ module Rails destination = File.join(migration_dir, "#{@migration_number}_#{@migration_file_name}.rb") end - template(source, destination, log_status) + template(source, destination, config) end protected -- cgit v1.2.3