Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Merge pull request #1163 from amatsuda/sexier_migration_31

Sexier migrations
  • Loading branch information...
commit 0e407a90413d8a19002b85508d811ccdf2190783 2 parents 533a9f8 + 696c2ea
@tenderlove tenderlove authored
View
4 activerecord/lib/active_record/connection_adapters/abstract/schema_statements.rb
@@ -154,11 +154,11 @@ def column_exists?(table_name, column_name, type = nil, options = {})
# )
#
# See also TableDefinition#column for details on how to create columns.
- def create_table(table_name, options = {})
+ def create_table(table_name, options = {}, &blk)
td = table_definition
td.primary_key(options[:primary_key] || Base.get_primary_key(table_name.to_s.singularize)) unless options[:id] == false
- yield td if block_given?
+ td.instance_eval(&blk) if blk
if options[:force] && table_exists?(table_name)
drop_table(table_name)
View
18 activerecord/lib/active_record/connection_adapters/sqlite_adapter.rb
@@ -457,28 +457,30 @@ def move_table(from, to, options = {}, &block) #:nodoc:
drop_table(from)
end
- def copy_table(from, to, options = {}) #:nodoc:
- options = options.merge(:id => (!columns(from).detect{|c| c.name == 'id'}.nil? && 'id' == primary_key(from).to_s))
+ def copy_table(from, to, options = {}, &block) #:nodoc:
+ from_columns, from_primary_key = columns(from), primary_key(from)
+ options = options.merge(:id => (!from_columns.detect {|c| c.name == 'id'}.nil? && 'id' == primary_key(from).to_s))
+ table_definition = nil
create_table(to, options) do |definition|
- @definition = definition
- columns(from).each do |column|
+ table_definition = definition
+ from_columns.each do |column|
column_name = options[:rename] ?
(options[:rename][column.name] ||
options[:rename][column.name.to_sym] ||
column.name) : column.name
- @definition.column(column_name, column.type,
+ table_definition.column(column_name, column.type,
:limit => column.limit, :default => column.default,
:precision => column.precision, :scale => column.scale,
:null => column.null)
end
- @definition.primary_key(primary_key(from)) if primary_key(from)
- yield @definition if block_given?
+ table_definition.primary_key from_primary_key if from_primary_key
+ table_definition.instance_eval(&block) if block
end
copy_table_indexes(from, to, options[:rename] || {})
copy_table_contents(from, to,
- @definition.columns.map {|column| column.name},
+ table_definition.columns.map {|column| column.name},
options[:rename] || {})
end
View
7 activerecord/lib/active_record/session_store.rb
@@ -64,12 +64,13 @@ def drop_table!
end
def create_table!
+ id_col_name, data_col_name = session_id_column, data_column_name
connection_pool.clear_table_cache!(table_name)
connection.create_table(table_name) do |t|
- t.string session_id_column, :limit => 255
- t.text data_column_name
+ t.string id_col_name, :limit => 255
+ t.text data_col_name
end
- connection.add_index table_name, session_id_column, :unique => true
+ connection.add_index table_name, id_col_name, :unique => true
end
end
View
20 activerecord/test/cases/migration_test.rb
@@ -1712,6 +1712,26 @@ def with_new_table
end # SexyMigrationsTest
+ class SexierMigrationsTest < ActiveRecord::TestCase
+ def test_create_table_with_column_without_block_parameter
+ Person.connection.create_table :testings, :force => true do
+ column :foo, :string
+ end
+ assert Person.connection.column_exists?(:testings, :foo, :string)
+ ensure
+ Person.connection.drop_table :testings rescue nil
+ end
+
+ def test_create_table_with_sexy_column_without_block_parameter
+ Person.connection.create_table :testings, :force => true do
+ integer :bar
+ end
+ assert Person.connection.column_exists?(:testings, :bar, :integer)
+ ensure
+ Person.connection.drop_table :testings rescue nil
+ end
+ end # SexierMigrationsTest
+
class MigrationLoggerTest < ActiveRecord::TestCase
def test_migration_should_be_run_without_logger
previous_logger = ActiveRecord::Base.logger
Please sign in to comment.
Something went wrong with that request. Please try again.