aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeremy Kemper <jeremy@bitsweat.net>2005-11-20 04:21:06 +0000
committerJeremy Kemper <jeremy@bitsweat.net>2005-11-20 04:21:06 +0000
commit9b9578fa4799f911edbc01ae5b7d30ee874812a0 (patch)
treecaec4877a26001fad87ef35fd19e9249f4bfdc8c
parent81c5242f43cb45d97b2a56409f8b39b0dba75ac3 (diff)
downloadrails-9b9578fa4799f911edbc01ae5b7d30ee874812a0.tar.gz
rails-9b9578fa4799f911edbc01ae5b7d30ee874812a0.tar.bz2
rails-9b9578fa4799f911edbc01ae5b7d30ee874812a0.zip
Introducing the session_migration generator. Creates an add_session_table migration. References #2958.
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@3098 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
-rw-r--r--railties/CHANGELOG2
-rw-r--r--railties/lib/rails_generator/commands.rb48
-rw-r--r--railties/lib/rails_generator/generators/components/migration/migration_generator.rb50
-rw-r--r--railties/lib/rails_generator/generators/components/session_migration/USAGE15
-rw-r--r--railties/lib/rails_generator/generators/components/session_migration/session_migration_generator.rb13
-rw-r--r--railties/lib/rails_generator/generators/components/session_migration/templates/migration.rb15
6 files changed, 90 insertions, 53 deletions
diff --git a/railties/CHANGELOG b/railties/CHANGELOG
index 2db221f579..96f423f1bb 100644
--- a/railties/CHANGELOG
+++ b/railties/CHANGELOG
@@ -1,5 +1,7 @@
*SVN*
+* Introducing the session_migration generator. Creates an add_session_table migration. #2958 [Rick Olson]
+
* Update to Prototype 1.4.0_rc4. Closes #2943 (old Array.prototype.reverse behavior can be obtained by passing false as an argument). [Sam Stephenson]
* script/console uses RAILS_ENV environment variable if present. #2932 [Blair Zajac <blair@orcaware.com>
diff --git a/railties/lib/rails_generator/commands.rb b/railties/lib/rails_generator/commands.rb
index 2038bb5fec..97b23fbf5e 100644
--- a/railties/lib/rails_generator/commands.rb
+++ b/railties/lib/rails_generator/commands.rb
@@ -55,6 +55,30 @@ module Rails
def readme(*args)
end
+ protected
+ def existing_migrations(file_name)
+ Dir.glob("db/migrate/[0-9]*_#{file_name}.rb")
+ end
+
+ def migration_exists?(file_name)
+ not existing_migrations(file_name).empty?
+ end
+
+ def current_migration_number
+ Dir.glob('db/migrate/[0-9]*.rb').inject(0) do |max, file_path|
+ n = File.basename(file_path).split('_', 2).first.to_i
+ if n > max then n else max end
+ end
+ end
+
+ def next_migration_number
+ current_migration_number + 1
+ end
+
+ def next_migration_string(padding = 3)
+ "%.#{padding}d" % next_migration_number
+ end
+
private
# Ask the user interactively whether to force collision.
def force_file_collision?(destination)
@@ -84,10 +108,10 @@ module Rails
begin_mark = template_part_mark(template_options[:begin_mark], template_options[:mark_id])
end_mark = template_part_mark(template_options[:end_mark], template_options[:mark_id])
begin_mark + rendered_part + end_mark
- end
+ end
- def template_part_mark(name, id)
- "<!--[#{name}:#{id}]-->\n"
+ def template_part_mark(name, id)
+ "<!--[#{name}:#{id}]-->\n"
end
end
@@ -279,6 +303,12 @@ module Rails
end
end
+ # When creating a migration, it knows to find the first available file in db/migrate and use the migration.rb template.
+ def migration_template(relative_source, relative_destination, template_options = {})
+ raise "Another migration is already named #{file_name}: #{existing_migrations(file_name).first}" if migration_exists?(file_name)
+ template(relative_source, "#{relative_destination}/#{next_migration_string}_#{file_name}.rb", template_options)
+ end
+
private
# Raise a usage error with an informative WordNet suggestion.
# Thanks to Florian Gross (flgr).
@@ -385,6 +415,14 @@ end_message
def complex_template(*args)
# nothing should be done here
end
+
+ # When deleting a migration, it knows to delete every file named "[0-9]*_#{file_name}".
+ def migration_template(relative_source, relative_destination, template_options = {})
+ raise "There is no migration named #{file_name}" unless migration_exists?(file_name)
+ existing_migrations(file_name).each do |file_path|
+ file(relative_source, file_path, template_options)
+ end
+ end
end
@@ -417,6 +455,10 @@ end_message
def readme(*args)
logger.readme args.join(', ')
end
+
+ def migration_template(relative_source, relative_destination, options = {})
+ logger.migration_template file_name
+ end
end
# Update generator's action manifest.
diff --git a/railties/lib/rails_generator/generators/components/migration/migration_generator.rb b/railties/lib/rails_generator/generators/components/migration/migration_generator.rb
index 09674261da..95652139f9 100644
--- a/railties/lib/rails_generator/generators/components/migration/migration_generator.rb
+++ b/railties/lib/rails_generator/generators/components/migration/migration_generator.rb
@@ -5,54 +5,4 @@ class MigrationGenerator < Rails::Generator::NamedBase
m.migration_template 'migration.rb', 'db/migrate'
end
end
-
- protected
- def existing_migrations(file_name)
- Dir.glob("db/migrate/[0-9]*_#{file_name}.rb")
- end
-
- def migration_exists?(file_name)
- not existing_migrations(file_name).empty?
- end
-
- def current_migration_number
- Dir.glob('db/migrate/[0-9]*.rb').inject(0) do |max, file_path|
- n = File.basename(file_path).split('_', 2).first.to_i
- if n > max then n else max end
- end
- end
-
- def next_migration_number
- current_migration_number + 1
- end
-
- def next_migration_string(padding = 3)
- "%.#{padding}d" % next_migration_number
- end
-end
-
-module Rails::Generator::Commands
- # When creating, it knows to find the first available file in db/migrate and use the migration.rb template.
- class Create
- def migration_template(relative_source, relative_destination, template_options = {})
- raise "Another migration is already named #{file_name}: #{existing_migrations(file_name).first}" if migration_exists?(file_name)
- template(relative_source, "#{relative_destination}/#{next_migration_string}_#{file_name}.rb", template_options)
- end
- end
-
- # When deleting, it knows to delete every file named "[0-9]*_#{file_name}".
- class Destroy
- def migration_template(relative_source, relative_destination, template_options = {})
- raise "There is no migration named #{file_name}" unless migration_exists?(file_name)
- existing_migrations(file_name).each do |file_path|
- file(relative_source, file_path, template_options)
- end
- end
- end
-
- class List
- def migration_template(relative_source, relative_destination, options = {})
- logger.migration_template file_name
- end
- end
end
diff --git a/railties/lib/rails_generator/generators/components/session_migration/USAGE b/railties/lib/rails_generator/generators/components/session_migration/USAGE
new file mode 100644
index 0000000000..43e4e54c97
--- /dev/null
+++ b/railties/lib/rails_generator/generators/components/session_migration/USAGE
@@ -0,0 +1,15 @@
+Description:
+ The session table migration generator creates a migration for adding a session table
+ used by CGI::Session::ActiveRecordStore.
+
+ The generator takes a migration name as its argument. The migration name may be
+ given in CamelCase or under_score.
+
+ The generator creates a migration class in db/migrate prefixed by its number
+ in the queue.
+
+Example:
+ ./script/generate session_migration AddSessionTable
+
+ With 4 existing migrations, this will create an AddSessionTable migration in the
+ file db/migrate/5_add_session_table.rb \ No newline at end of file
diff --git a/railties/lib/rails_generator/generators/components/session_migration/session_migration_generator.rb b/railties/lib/rails_generator/generators/components/session_migration/session_migration_generator.rb
new file mode 100644
index 0000000000..12802858f6
--- /dev/null
+++ b/railties/lib/rails_generator/generators/components/session_migration/session_migration_generator.rb
@@ -0,0 +1,13 @@
+class SessionMigrationGenerator < Rails::Generator::NamedBase
+ def initialize(runtime_args, runtime_options = {})
+ runtime_args << 'add_session_table' if runtime_args.empty?
+ super
+ end
+
+ def manifest
+ record do |m|
+ m.directory 'db/migrate'
+ m.migration_template 'migration.rb', 'db/migrate'
+ end
+ end
+end
diff --git a/railties/lib/rails_generator/generators/components/session_migration/templates/migration.rb b/railties/lib/rails_generator/generators/components/session_migration/templates/migration.rb
new file mode 100644
index 0000000000..0ab7fcb1e9
--- /dev/null
+++ b/railties/lib/rails_generator/generators/components/session_migration/templates/migration.rb
@@ -0,0 +1,15 @@
+class <%= class_name %> < ActiveRecord::Migration
+ def self.up
+ create_table :sessions do |t|
+ t.column :session_id, :string
+ t.column :data, :text
+ t.column :updated_at, :datetime
+ end
+
+ add_index :sessions, :session_id
+ end
+
+ def self.down
+ drop_table :sessions
+ end
+end