declare_schema 0.10.0 → 0.10.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +8 -1
- data/Gemfile.lock +1 -1
- data/lib/declare_schema/model/foreign_key_definition.rb +4 -8
- data/lib/declare_schema/model/index_definition.rb +0 -19
- data/lib/declare_schema/schema_change/all.rb +22 -0
- data/lib/declare_schema/schema_change/base.rb +45 -0
- data/lib/declare_schema/schema_change/column_add.rb +27 -0
- data/lib/declare_schema/schema_change/column_change.rb +32 -0
- data/lib/declare_schema/schema_change/column_remove.rb +20 -0
- data/lib/declare_schema/schema_change/column_rename.rb +23 -0
- data/lib/declare_schema/schema_change/foreign_key_add.rb +25 -0
- data/lib/declare_schema/schema_change/foreign_key_remove.rb +20 -0
- data/lib/declare_schema/schema_change/index_add.rb +33 -0
- data/lib/declare_schema/schema_change/index_remove.rb +20 -0
- data/lib/declare_schema/schema_change/primary_key_change.rb +33 -0
- data/lib/declare_schema/schema_change/table_add.rb +37 -0
- data/lib/declare_schema/schema_change/table_change.rb +36 -0
- data/lib/declare_schema/schema_change/table_remove.rb +22 -0
- data/lib/declare_schema/schema_change/table_rename.rb +22 -0
- data/lib/declare_schema/version.rb +1 -1
- data/lib/generators/declare_schema/migration/migrator.rb +172 -174
- data/spec/lib/declare_schema/interactive_primary_key_spec.rb +52 -14
- data/spec/lib/declare_schema/migration_generator_spec.rb +175 -303
- data/spec/lib/declare_schema/model/foreign_key_definition_spec.rb +0 -12
- data/spec/lib/declare_schema/schema_change/base_spec.rb +75 -0
- data/spec/lib/declare_schema/schema_change/column_add_spec.rb +30 -0
- data/spec/lib/declare_schema/schema_change/column_change_spec.rb +33 -0
- data/spec/lib/declare_schema/schema_change/column_remove_spec.rb +30 -0
- data/spec/lib/declare_schema/schema_change/column_rename_spec.rb +28 -0
- data/spec/lib/declare_schema/schema_change/foreign_key_add_spec.rb +29 -0
- data/spec/lib/declare_schema/schema_change/foreign_key_remove_spec.rb +29 -0
- data/spec/lib/declare_schema/schema_change/index_add_spec.rb +56 -0
- data/spec/lib/declare_schema/schema_change/index_remove_spec.rb +29 -0
- data/spec/lib/declare_schema/schema_change/primary_key_change_spec.rb +69 -0
- data/spec/lib/declare_schema/schema_change/table_add_spec.rb +50 -0
- data/spec/lib/declare_schema/schema_change/table_change_spec.rb +30 -0
- data/spec/lib/declare_schema/schema_change/table_remove_spec.rb +27 -0
- data/spec/lib/declare_schema/schema_change/table_rename_spec.rb +27 -0
- data/spec/lib/generators/declare_schema/migration/migrator_spec.rb +59 -11
- data/spec/support/acceptance_spec_helpers.rb +2 -2
- metadata +34 -5
@@ -36,7 +36,32 @@ RSpec.describe 'DeclareSchema Migration Generator interactive primary key' do
|
|
36
36
|
|
37
37
|
nuke_model_class(Foo)
|
38
38
|
|
39
|
-
|
39
|
+
# The ActiveRecord sqlite3 driver has a bug where rename_column recreates the entire table, but forgets to set the primary key:
|
40
|
+
#
|
41
|
+
# [7] pry(#<RSpec::ExampleGroups::DeclareSchemaMigrationGeneratorInteractivePrimaryKey>)> u = 'rename_column :foos, :foo_id, :id'
|
42
|
+
# => "rename_column :foos, :foo_id, :id"
|
43
|
+
# [8] pry(#<RSpec::ExampleGroups::DeclareSchemaMigrationGeneratorInteractivePrimaryKey>)> ActiveRecord::Migration.class_eval(u)
|
44
|
+
# (0.0ms) begin transaction
|
45
|
+
# (pry):17
|
46
|
+
# (0.2ms) CREATE TEMPORARY TABLE "afoos" ("id" integer NOT NULL)
|
47
|
+
# (pry):17
|
48
|
+
# (0.1ms) INSERT INTO "afoos" ("id")
|
49
|
+
#
|
50
|
+
# (pry):17
|
51
|
+
# (0.4ms) DROP TABLE "foos"
|
52
|
+
# (pry):17
|
53
|
+
# (0.1ms) CREATE TABLE "foos" ("id" integer NOT NULL)
|
54
|
+
# (pry):17
|
55
|
+
# (0.1ms) INSERT INTO "foos" ("id")
|
56
|
+
#
|
57
|
+
# (pry):17
|
58
|
+
# (0.1ms) DROP TABLE "afoos"
|
59
|
+
# (pry):17
|
60
|
+
# (0.9ms) commit transaction
|
61
|
+
if defined?(SQLite3)
|
62
|
+
ActiveRecord::Base.connection.execute("drop table foos")
|
63
|
+
ActiveRecord::Base.connection.execute("CREATE TABLE foos (id integer PRIMARY KEY AUTOINCREMENT NOT NULL)")
|
64
|
+
end
|
40
65
|
|
41
66
|
if Rails::VERSION::MAJOR >= 5 && !defined?(Mysql2) # TODO TECH-4814 Put this test back for Mysql2
|
42
67
|
# replace custom primary_key
|
@@ -49,12 +74,6 @@ RSpec.describe 'DeclareSchema Migration Generator interactive primary key' do
|
|
49
74
|
allow_any_instance_of(DeclareSchema::Support::ThorShell).to receive(:ask).with(/one of the rename choices or press enter to keep/) { 'drop id' }
|
50
75
|
generate_migrations '-n', '-m'
|
51
76
|
expect(Foo._defined_primary_key).to eq('foo_id')
|
52
|
-
|
53
|
-
### ensure it doesn't cause further migrations
|
54
|
-
|
55
|
-
# check no further migrations
|
56
|
-
up = Generators::DeclareSchema::Migration::Migrator.run.first
|
57
|
-
expect(up).to eq("")
|
58
77
|
end
|
59
78
|
end
|
60
79
|
end
|
@@ -85,7 +104,32 @@ RSpec.describe 'DeclareSchema Migration Generator interactive primary key' do
|
|
85
104
|
|
86
105
|
nuke_model_class(Foo)
|
87
106
|
|
88
|
-
|
107
|
+
# The ActiveRecord sqlite3 driver has a bug where rename_column recreates the entire table, but forgets to set the primary key:
|
108
|
+
#
|
109
|
+
# [7] pry(#<RSpec::ExampleGroups::DeclareSchemaMigrationGeneratorInteractivePrimaryKey>)> u = 'rename_column :foos, :foo_id, :id'
|
110
|
+
# => "rename_column :foos, :foo_id, :id"
|
111
|
+
# [8] pry(#<RSpec::ExampleGroups::DeclareSchemaMigrationGeneratorInteractivePrimaryKey>)> ActiveRecord::Migration.class_eval(u)
|
112
|
+
# (0.0ms) begin transaction
|
113
|
+
# (pry):17
|
114
|
+
# (0.2ms) CREATE TEMPORARY TABLE "afoos" ("id" integer NOT NULL)
|
115
|
+
# (pry):17
|
116
|
+
# (0.1ms) INSERT INTO "afoos" ("id")
|
117
|
+
#
|
118
|
+
# (pry):17
|
119
|
+
# (0.4ms) DROP TABLE "foos"
|
120
|
+
# (pry):17
|
121
|
+
# (0.1ms) CREATE TABLE "foos" ("id" integer NOT NULL)
|
122
|
+
# (pry):17
|
123
|
+
# (0.1ms) INSERT INTO "foos" ("id")
|
124
|
+
#
|
125
|
+
# (pry):17
|
126
|
+
# (0.1ms) DROP TABLE "afoos"
|
127
|
+
# (pry):17
|
128
|
+
# (0.9ms) commit transaction
|
129
|
+
if defined?(SQLite3)
|
130
|
+
ActiveRecord::Base.connection.execute("drop table foos")
|
131
|
+
ActiveRecord::Base.connection.execute("CREATE TABLE foos (id integer PRIMARY KEY AUTOINCREMENT NOT NULL)")
|
132
|
+
end
|
89
133
|
|
90
134
|
if Rails::VERSION::MAJOR >= 5 && !defined?(Mysql2) # TODO TECH-4814 Put this test back for Mysql2
|
91
135
|
# replace custom primary_key
|
@@ -99,12 +143,6 @@ RSpec.describe 'DeclareSchema Migration Generator interactive primary key' do
|
|
99
143
|
allow_any_instance_of(DeclareSchema::Support::ThorShell).to receive(:ask).with(/one of the rename choices or press enter to keep/) { 'drop id' }
|
100
144
|
generate_migrations '-n', '-m'
|
101
145
|
expect(Foo.primary_key).to eq('foo_id')
|
102
|
-
|
103
|
-
### ensure it doesn't cause further migrations
|
104
|
-
|
105
|
-
# check no further migrations
|
106
|
-
up = Generators::DeclareSchema::Migration::Migrator.run.first
|
107
|
-
expect(up).to eq("")
|
108
146
|
end
|
109
147
|
end
|
110
148
|
end
|
@@ -10,16 +10,6 @@ RSpec.describe 'DeclareSchema Migration Generator' do
|
|
10
10
|
before do
|
11
11
|
load File.expand_path('prepare_testapp.rb', __dir__)
|
12
12
|
end
|
13
|
-
|
14
|
-
let(:charset_alter_table) do
|
15
|
-
if defined?(Mysql2)
|
16
|
-
<<~EOS
|
17
|
-
|
18
|
-
|
19
|
-
execute "ALTER TABLE `adverts` CHARACTER SET utf8mb4 COLLATE utf8mb4_bin"
|
20
|
-
EOS
|
21
|
-
end
|
22
|
-
end
|
23
13
|
let(:text_limit) do
|
24
14
|
if defined?(Mysql2)
|
25
15
|
", limit: 4294967295"
|
@@ -30,6 +20,11 @@ RSpec.describe 'DeclareSchema Migration Generator' do
|
|
30
20
|
', charset: "utf8mb4", collation: "utf8mb4_bin"'
|
31
21
|
end
|
32
22
|
end
|
23
|
+
let(:create_table_charset_and_collation) do
|
24
|
+
if defined?(Mysql2)
|
25
|
+
", options: \"CHARACTER SET utf8mb4 COLLATE utf8mb4_bin\""
|
26
|
+
end
|
27
|
+
end
|
33
28
|
let(:datetime_precision) do
|
34
29
|
if defined?(Mysql2) && Rails::VERSION::MAJOR >= 5
|
35
30
|
', precision: 0'
|
@@ -81,9 +76,9 @@ RSpec.describe 'DeclareSchema Migration Generator' do
|
|
81
76
|
up, _ = Generators::DeclareSchema::Migration::Migrator.run.tap do |migrations|
|
82
77
|
expect(migrations).to(
|
83
78
|
migrate_up(<<~EOS.strip)
|
84
|
-
create_table :adverts, id: :bigint do |t|
|
79
|
+
create_table :adverts, id: :bigint#{create_table_charset_and_collation} do |t|
|
85
80
|
t.string :name, limit: 250, null: true#{charset_and_collation}
|
86
|
-
end
|
81
|
+
end
|
87
82
|
EOS
|
88
83
|
.and migrate_down("drop_table :adverts")
|
89
84
|
)
|
@@ -119,8 +114,8 @@ RSpec.describe 'DeclareSchema Migration Generator' do
|
|
119
114
|
add_column :adverts, :published_at, :datetime, null: true
|
120
115
|
EOS
|
121
116
|
.and migrate_down(<<~EOS.strip)
|
122
|
-
remove_column :adverts, :body
|
123
117
|
remove_column :adverts, :published_at
|
118
|
+
remove_column :adverts, :body
|
124
119
|
EOS
|
125
120
|
)
|
126
121
|
|
@@ -152,8 +147,8 @@ RSpec.describe 'DeclareSchema Migration Generator' do
|
|
152
147
|
remove_column :adverts, :name
|
153
148
|
EOS
|
154
149
|
.and migrate_down(<<~EOS.strip)
|
155
|
-
remove_column :adverts, :title
|
156
150
|
add_column :adverts, :name, :string, limit: 250, null: true#{charset_and_collation}
|
151
|
+
remove_column :adverts, :title
|
157
152
|
EOS
|
158
153
|
)
|
159
154
|
|
@@ -370,17 +365,13 @@ RSpec.describe 'DeclareSchema Migration Generator' do
|
|
370
365
|
expect(Generators::DeclareSchema::Migration::Migrator.run).to(
|
371
366
|
migrate_up(<<~EOS.strip)
|
372
367
|
add_column :adverts, :category_id, :integer, limit: 8, null: false
|
373
|
-
|
374
|
-
|
375
|
-
|
376
|
-
#{"add_foreign_key(\"adverts\", \"categories\", column: \"category_id\", name: \"on_category_id\")\n" if defined?(Mysql2)}
|
368
|
+
add_index :adverts, [:category_id], name: :on_category_id
|
369
|
+
#{"add_foreign_key :adverts, :categories, column: :category_id, name: :on_category_id" if defined?(Mysql2)}
|
377
370
|
EOS
|
378
371
|
.and migrate_down(<<~EOS.strip)
|
372
|
+
#{"remove_foreign_key :adverts, name: :on_category_id" if defined?(Mysql2)}
|
373
|
+
remove_index :adverts, name: :on_category_id
|
379
374
|
remove_column :adverts, :category_id
|
380
|
-
|
381
|
-
remove_index :adverts, name: :on_category_id rescue ActiveRecord::StatementInvalid
|
382
|
-
|
383
|
-
#{"remove_foreign_key(\"adverts\", name: \"on_category_id\")\n" if defined?(Mysql2)}
|
384
375
|
EOS
|
385
376
|
)
|
386
377
|
|
@@ -398,11 +389,9 @@ RSpec.describe 'DeclareSchema Migration Generator' do
|
|
398
389
|
expect(Generators::DeclareSchema::Migration::Migrator.run).to(
|
399
390
|
migrate_up(<<~EOS.strip)
|
400
391
|
add_column :adverts, :c_id, :integer, limit: 8, null: false
|
401
|
-
|
402
|
-
|
403
|
-
|
404
|
-
#{"add_foreign_key(\"adverts\", \"categories\", column: \"category_id\", name: \"on_category_id\")\n" +
|
405
|
-
"add_foreign_key(\"adverts\", \"categories\", column: \"c_id\", name: \"on_c_id\")" if defined?(Mysql2)}
|
392
|
+
add_index :adverts, [:c_id], name: :on_c_id
|
393
|
+
#{"add_foreign_key :adverts, :categories, column: :category_id, name: :on_category_id\n" +
|
394
|
+
"add_foreign_key :adverts, :categories, column: :c_id, name: :on_c_id" if defined?(Mysql2)}
|
406
395
|
EOS
|
407
396
|
)
|
408
397
|
|
@@ -420,9 +409,8 @@ RSpec.describe 'DeclareSchema Migration Generator' do
|
|
420
409
|
expect(Generators::DeclareSchema::Migration::Migrator.run).to(
|
421
410
|
migrate_up(<<~EOS.strip)
|
422
411
|
add_column :adverts, :category_id, :integer, limit: 8, null: false
|
423
|
-
|
424
|
-
|
425
|
-
"add_foreign_key(\"adverts\", \"categories\", column: \"c_id\", name: \"on_c_id\")" if defined?(Mysql2)}
|
412
|
+
#{"add_foreign_key :adverts, :categories, column: :category_id, name: :on_category_id\n" +
|
413
|
+
"add_foreign_key :adverts, :categories, column: :c_id, name: :on_c_id" if defined?(Mysql2)}
|
426
414
|
EOS
|
427
415
|
)
|
428
416
|
|
@@ -440,11 +428,9 @@ RSpec.describe 'DeclareSchema Migration Generator' do
|
|
440
428
|
expect(Generators::DeclareSchema::Migration::Migrator.run).to(
|
441
429
|
migrate_up(<<~EOS.strip)
|
442
430
|
add_column :adverts, :category_id, :integer, limit: 8, null: false
|
443
|
-
|
444
|
-
|
445
|
-
|
446
|
-
#{"add_foreign_key(\"adverts\", \"categories\", column: \"category_id\", name: \"on_category_id\")\n" +
|
447
|
-
"add_foreign_key(\"adverts\", \"categories\", column: \"c_id\", name: \"on_c_id\")" if defined?(Mysql2)}
|
431
|
+
add_index :adverts, [:category_id], name: :my_index
|
432
|
+
#{"add_foreign_key :adverts, :categories, column: :category_id, name: :on_category_id\n" +
|
433
|
+
"add_foreign_key :adverts, :categories, column: :c_id, name: :on_c_id" if defined?(Mysql2)}
|
448
434
|
EOS
|
449
435
|
)
|
450
436
|
|
@@ -468,17 +454,15 @@ RSpec.describe 'DeclareSchema Migration Generator' do
|
|
468
454
|
add_column :adverts, :created_at, :datetime, null: true
|
469
455
|
add_column :adverts, :updated_at, :datetime, null: true
|
470
456
|
add_column :adverts, :lock_version, :integer#{lock_version_limit}, null: false, default: 1
|
471
|
-
|
472
|
-
|
473
|
-
"add_foreign_key(\"adverts\", \"categories\", column: \"c_id\", name: \"on_c_id\")" if defined?(Mysql2)}
|
457
|
+
#{"add_foreign_key :adverts, :categories, column: :category_id, name: :on_category_id\n" +
|
458
|
+
"add_foreign_key :adverts, :categories, column: :c_id, name: :on_c_id" if defined?(Mysql2)}
|
474
459
|
EOS
|
475
460
|
.and migrate_down(<<~EOS.strip)
|
476
|
-
|
477
|
-
|
461
|
+
#{"remove_foreign_key :adverts, name: :on_c_id\n" +
|
462
|
+
"remove_foreign_key :adverts, name: :on_category_id" if defined?(Mysql2)}
|
478
463
|
remove_column :adverts, :lock_version
|
479
|
-
|
480
|
-
|
481
|
-
"remove_foreign_key(\"adverts\", name: \"on_c_id\")" if defined?(Mysql2)}
|
464
|
+
remove_column :adverts, :updated_at
|
465
|
+
remove_column :adverts, :created_at
|
482
466
|
EOS
|
483
467
|
)
|
484
468
|
|
@@ -499,11 +483,9 @@ RSpec.describe 'DeclareSchema Migration Generator' do
|
|
499
483
|
expect(Generators::DeclareSchema::Migration::Migrator.run).to(
|
500
484
|
migrate_up(<<~EOS.strip)
|
501
485
|
add_column :adverts, :title, :string, limit: 250, null: true#{charset_and_collation}
|
502
|
-
|
503
|
-
|
504
|
-
|
505
|
-
#{"add_foreign_key(\"adverts\", \"categories\", column: \"category_id\", name: \"on_category_id\")\n" +
|
506
|
-
"add_foreign_key(\"adverts\", \"categories\", column: \"c_id\", name: \"on_c_id\")" if defined?(Mysql2)}
|
486
|
+
add_index :adverts, [:title], name: :on_title
|
487
|
+
#{"add_foreign_key :adverts, :categories, column: :category_id, name: :on_category_id\n" +
|
488
|
+
"add_foreign_key :adverts, :categories, column: :c_id, name: :on_c_id" if defined?(Mysql2)}
|
507
489
|
EOS
|
508
490
|
)
|
509
491
|
|
@@ -520,11 +502,9 @@ RSpec.describe 'DeclareSchema Migration Generator' do
|
|
520
502
|
expect(Generators::DeclareSchema::Migration::Migrator.run).to(
|
521
503
|
migrate_up(<<~EOS.strip)
|
522
504
|
add_column :adverts, :title, :string, limit: 250, null: true#{charset_and_collation}
|
523
|
-
|
524
|
-
|
525
|
-
|
526
|
-
#{"add_foreign_key(\"adverts\", \"categories\", column: \"category_id\", name: \"on_category_id\")\n" +
|
527
|
-
"add_foreign_key(\"adverts\", \"categories\", column: \"c_id\", name: \"on_c_id\")" if defined?(Mysql2)}
|
505
|
+
add_index :adverts, [:title], name: :on_title, unique: true
|
506
|
+
#{"add_foreign_key :adverts, :categories, column: :category_id, name: :on_category_id\n" +
|
507
|
+
"add_foreign_key :adverts, :categories, column: :c_id, name: :on_c_id" if defined?(Mysql2)}
|
528
508
|
EOS
|
529
509
|
)
|
530
510
|
|
@@ -541,11 +521,9 @@ RSpec.describe 'DeclareSchema Migration Generator' do
|
|
541
521
|
expect(Generators::DeclareSchema::Migration::Migrator.run).to(
|
542
522
|
migrate_up(<<~EOS.strip)
|
543
523
|
add_column :adverts, :title, :string, limit: 250, null: true#{charset_and_collation}
|
544
|
-
|
545
|
-
|
546
|
-
|
547
|
-
#{"add_foreign_key(\"adverts\", \"categories\", column: \"category_id\", name: \"on_category_id\")\n" +
|
548
|
-
"add_foreign_key(\"adverts\", \"categories\", column: \"c_id\", name: \"on_c_id\")" if defined?(Mysql2)}
|
524
|
+
add_index :adverts, [:title], name: :my_index
|
525
|
+
#{"add_foreign_key :adverts, :categories, column: :category_id, name: :on_category_id\n" +
|
526
|
+
"add_foreign_key :adverts, :categories, column: :c_id, name: :on_c_id" if defined?(Mysql2)}
|
549
527
|
EOS
|
550
528
|
)
|
551
529
|
|
@@ -560,11 +538,9 @@ RSpec.describe 'DeclareSchema Migration Generator' do
|
|
560
538
|
expect(Generators::DeclareSchema::Migration::Migrator.run).to(
|
561
539
|
migrate_up(<<~EOS.strip)
|
562
540
|
add_column :adverts, :title, :string, limit: 250, null: true#{charset_and_collation}
|
563
|
-
|
564
|
-
|
565
|
-
|
566
|
-
#{"add_foreign_key(\"adverts\", \"categories\", column: \"category_id\", name: \"on_category_id\")\n" +
|
567
|
-
"add_foreign_key(\"adverts\", \"categories\", column: \"c_id\", name: \"on_c_id\")" if defined?(Mysql2)}
|
541
|
+
add_index :adverts, [:title], name: :on_title
|
542
|
+
#{"add_foreign_key :adverts, :categories, column: :category_id, name: :on_category_id\n" +
|
543
|
+
"add_foreign_key :adverts, :categories, column: :c_id, name: :on_c_id" if defined?(Mysql2)}
|
568
544
|
EOS
|
569
545
|
)
|
570
546
|
|
@@ -579,11 +555,9 @@ RSpec.describe 'DeclareSchema Migration Generator' do
|
|
579
555
|
expect(Generators::DeclareSchema::Migration::Migrator.run).to(
|
580
556
|
migrate_up(<<~EOS.strip)
|
581
557
|
add_column :adverts, :title, :string, limit: 250, null: true#{charset_and_collation}
|
582
|
-
|
583
|
-
|
584
|
-
|
585
|
-
#{"add_foreign_key(\"adverts\", \"categories\", column: \"category_id\", name: \"on_category_id\")\n" +
|
586
|
-
"add_foreign_key(\"adverts\", \"categories\", column: \"c_id\", name: \"on_c_id\")" if defined?(Mysql2)}
|
558
|
+
add_index :adverts, [:title], name: :my_index, unique: true
|
559
|
+
#{"add_foreign_key :adverts, :categories, column: :category_id, name: :on_category_id\n" +
|
560
|
+
"add_foreign_key :adverts, :categories, column: :c_id, name: :on_c_id" if defined?(Mysql2)}
|
587
561
|
EOS
|
588
562
|
)
|
589
563
|
|
@@ -598,11 +572,9 @@ RSpec.describe 'DeclareSchema Migration Generator' do
|
|
598
572
|
expect(Generators::DeclareSchema::Migration::Migrator.run).to(
|
599
573
|
migrate_up(<<~EOS.strip)
|
600
574
|
add_column :adverts, :title, :string, limit: 250, null: true#{charset_and_collation}
|
601
|
-
|
602
|
-
|
603
|
-
|
604
|
-
#{"add_foreign_key(\"adverts\", \"categories\", column: \"category_id\", name: \"on_category_id\")\n" +
|
605
|
-
"add_foreign_key(\"adverts\", \"categories\", column: \"c_id\", name: \"on_c_id\")" if defined?(Mysql2)}
|
575
|
+
add_index :adverts, [:title, :category_id], name: :on_title_and_category_id
|
576
|
+
#{"add_foreign_key :adverts, :categories, column: :category_id, name: :on_category_id\n" +
|
577
|
+
"add_foreign_key :adverts, :categories, column: :c_id, name: :on_c_id" if defined?(Mysql2)}
|
606
578
|
EOS
|
607
579
|
)
|
608
580
|
|
@@ -614,7 +586,8 @@ RSpec.describe 'DeclareSchema Migration Generator' do
|
|
614
586
|
|
615
587
|
### Rename a table
|
616
588
|
|
617
|
-
# The migration generator respects the `set_table_name` declaration, although as before,
|
589
|
+
# The migration generator respects the `set_table_name` declaration, although as before,
|
590
|
+
# we need to explicitly tell the generator that we want a rename rather than a create and a drop.
|
618
591
|
|
619
592
|
class Advert < ActiveRecord::Base
|
620
593
|
self.table_name = "ads"
|
@@ -630,31 +603,21 @@ RSpec.describe 'DeclareSchema Migration Generator' do
|
|
630
603
|
expect(Generators::DeclareSchema::Migration::Migrator.run("adverts" => "ads")).to(
|
631
604
|
migrate_up(<<~EOS.strip)
|
632
605
|
rename_table :adverts, :ads
|
633
|
-
|
634
606
|
add_column :ads, :title, :string, limit: 250, null: true#{charset_and_collation}
|
635
607
|
add_column :ads, :body, :text#{', limit: 4294967295' if defined?(Mysql2)}, null: true#{charset_and_collation}
|
636
|
-
|
637
|
-
|
638
|
-
"
|
639
|
-
elsif defined?(Mysql2)
|
640
|
-
"execute \"ALTER TABLE ads DROP PRIMARY KEY, ADD PRIMARY KEY (id)\"\n\n" +
|
641
|
-
"add_foreign_key(\"adverts\", \"categories\", column: \"category_id\", name: \"on_category_id\")\n" +
|
642
|
-
"add_foreign_key(\"adverts\", \"categories\", column: \"c_id\", name: \"on_c_id\")"
|
608
|
+
#{if defined?(Mysql2)
|
609
|
+
"add_foreign_key :adverts, :categories, column: :category_id, name: :on_category_id\n" +
|
610
|
+
"add_foreign_key :adverts, :categories, column: :c_id, name: :on_c_id"
|
643
611
|
end}
|
644
612
|
EOS
|
645
613
|
.and migrate_down(<<~EOS.strip)
|
646
|
-
|
614
|
+
#{if defined?(Mysql2)
|
615
|
+
"remove_foreign_key :adverts, name: :on_c_id\n" +
|
616
|
+
"remove_foreign_key :adverts, name: :on_category_id"
|
617
|
+
end}
|
647
618
|
remove_column :ads, :body
|
648
|
-
|
619
|
+
remove_column :ads, :title
|
649
620
|
rename_table :ads, :adverts
|
650
|
-
|
651
|
-
#{if defined?(SQLite3)
|
652
|
-
"add_index :adverts, [:id], unique: true, name: 'PRIMARY'\n"
|
653
|
-
elsif defined?(Mysql2)
|
654
|
-
"execute \"ALTER TABLE adverts DROP PRIMARY KEY, ADD PRIMARY KEY (id)\"\n\n" +
|
655
|
-
"remove_foreign_key(\"adverts\", name: \"on_category_id\")\n" +
|
656
|
-
"remove_foreign_key(\"adverts\", name: \"on_c_id\")"
|
657
|
-
end}
|
658
621
|
EOS
|
659
622
|
)
|
660
623
|
|
@@ -684,29 +647,15 @@ RSpec.describe 'DeclareSchema Migration Generator' do
|
|
684
647
|
expect(Generators::DeclareSchema::Migration::Migrator.run("adverts" => "advertisements")).to(
|
685
648
|
migrate_up(<<~EOS.strip)
|
686
649
|
rename_table :adverts, :advertisements
|
687
|
-
|
688
650
|
add_column :advertisements, :title, :string, limit: 250, null: true#{charset_and_collation}
|
689
651
|
add_column :advertisements, :body, :text#{', limit: 4294967295' if defined?(Mysql2)}, null: true#{charset_and_collation}
|
690
652
|
remove_column :advertisements, :name
|
691
|
-
|
692
|
-
#{if defined?(SQLite3)
|
693
|
-
"add_index :advertisements, [:id], unique: true, name: 'PRIMARY'"
|
694
|
-
elsif defined?(Mysql2)
|
695
|
-
"execute \"ALTER TABLE advertisements DROP PRIMARY KEY, ADD PRIMARY KEY (id)\""
|
696
|
-
end}
|
697
653
|
EOS
|
698
654
|
.and migrate_down(<<~EOS.strip)
|
699
|
-
|
655
|
+
add_column :advertisements, :name, :string, limit: 250, null: true#{charset_and_collation}
|
700
656
|
remove_column :advertisements, :body
|
701
|
-
|
702
|
-
|
657
|
+
remove_column :advertisements, :title
|
703
658
|
rename_table :advertisements, :adverts
|
704
|
-
|
705
|
-
#{if defined?(SQLite3)
|
706
|
-
"add_index :adverts, [:id], unique: true, name: 'PRIMARY'"
|
707
|
-
elsif defined?(Mysql2)
|
708
|
-
"execute \"ALTER TABLE adverts DROP PRIMARY KEY, ADD PRIMARY KEY (id)\""
|
709
|
-
end}
|
710
659
|
EOS
|
711
660
|
)
|
712
661
|
|
@@ -753,13 +702,11 @@ RSpec.describe 'DeclareSchema Migration Generator' do
|
|
753
702
|
expect(migrations).to(
|
754
703
|
migrate_up(<<~EOS.strip)
|
755
704
|
add_column :adverts, :type, :string, limit: 250, null: true#{charset_and_collation}
|
756
|
-
|
757
|
-
add_index :adverts, [:type], name: 'on_type'
|
705
|
+
add_index :adverts, [:type], name: :on_type
|
758
706
|
EOS
|
759
707
|
.and migrate_down(<<~EOS.strip)
|
760
708
|
remove_column :adverts, :type
|
761
|
-
|
762
|
-
remove_index :adverts, name: :on_type rescue ActiveRecord::StatementInvalid
|
709
|
+
remove_index :adverts, name: :on_type
|
763
710
|
EOS
|
764
711
|
)
|
765
712
|
end
|
@@ -802,8 +749,8 @@ RSpec.describe 'DeclareSchema Migration Generator' do
|
|
802
749
|
change_column :adverts, :name, :string, limit: 250, null: true, default: "No Name"#{charset_and_collation}
|
803
750
|
EOS
|
804
751
|
.and migrate_down(<<~EOS.strip)
|
752
|
+
change_column :adverts, :name, :string, limit: 250, null: true, default: "Untitled"#{charset_and_collation}
|
805
753
|
rename_column :adverts, :name, :title
|
806
|
-
change_column :adverts, :title, :string, limit: 250, null: true, default: "Untitled"#{charset_and_collation}
|
807
754
|
EOS
|
808
755
|
)
|
809
756
|
|
@@ -821,15 +768,8 @@ RSpec.describe 'DeclareSchema Migration Generator' do
|
|
821
768
|
expect(Generators::DeclareSchema::Migration::Migrator.run(adverts: :ads)).to(
|
822
769
|
migrate_up(<<~EOS.strip)
|
823
770
|
rename_table :adverts, :ads
|
824
|
-
|
825
771
|
add_column :ads, :created_at, :datetime, null: false
|
826
772
|
change_column :ads, :title, :string, limit: 250, null: false, default: \"Untitled\"#{charset_and_collation}
|
827
|
-
|
828
|
-
#{if defined?(SQLite3)
|
829
|
-
"add_index :ads, [:id], unique: true, name: 'PRIMARY'"
|
830
|
-
elsif defined?(Mysql2)
|
831
|
-
'execute "ALTER TABLE ads DROP PRIMARY KEY, ADD PRIMARY KEY (id)"'
|
832
|
-
end}
|
833
773
|
EOS
|
834
774
|
)
|
835
775
|
|
@@ -856,12 +796,6 @@ RSpec.describe 'DeclareSchema Migration Generator' do
|
|
856
796
|
expect(Generators::DeclareSchema::Migration::Migrator.run(adverts: { id: :advert_id })).to(
|
857
797
|
migrate_up(<<~EOS.strip)
|
858
798
|
rename_column :adverts, :id, :advert_id
|
859
|
-
|
860
|
-
#{if defined?(SQLite3)
|
861
|
-
"add_index :adverts, [:advert_id], unique: true, name: 'PRIMARY'"
|
862
|
-
elsif defined?(Mysql2)
|
863
|
-
'execute "ALTER TABLE adverts DROP PRIMARY KEY, ADD PRIMARY KEY (advert_id)"'
|
864
|
-
end}
|
865
799
|
EOS
|
866
800
|
)
|
867
801
|
|
@@ -1252,12 +1186,12 @@ RSpec.describe 'DeclareSchema Migration Generator' do
|
|
1252
1186
|
|
1253
1187
|
up, _ = Generators::DeclareSchema::Migration::Migrator.run.tap do |migrations|
|
1254
1188
|
expect(migrations).to(
|
1255
|
-
|
1256
|
-
create_table :adverts, id: :bigint do |t|
|
1189
|
+
migrate_up(<<~EOS.strip)
|
1190
|
+
create_table :adverts, id: :bigint#{create_table_charset_and_collation} do |t|
|
1257
1191
|
t.string :name, limit: 250, null: true#{charset_and_collation}
|
1258
|
-
end
|
1259
|
-
|
1260
|
-
|
1192
|
+
end
|
1193
|
+
EOS
|
1194
|
+
.and migrate_down("drop_table :adverts")
|
1261
1195
|
)
|
1262
1196
|
end
|
1263
1197
|
|
@@ -1286,14 +1220,14 @@ RSpec.describe 'DeclareSchema Migration Generator' do
|
|
1286
1220
|
Advert.reset_column_information
|
1287
1221
|
|
1288
1222
|
expect(migrate).to(
|
1289
|
-
|
1223
|
+
migrate_up(<<~EOS.strip)
|
1290
1224
|
add_column :adverts, :body, :text#{text_limit}, null: true#{charset_and_collation}
|
1291
1225
|
add_column :adverts, :published_at, :datetime, null: true
|
1292
|
-
|
1293
|
-
|
1294
|
-
remove_column :adverts, :body
|
1226
|
+
EOS
|
1227
|
+
.and migrate_down(<<~EOS.strip)
|
1295
1228
|
remove_column :adverts, :published_at
|
1296
|
-
|
1229
|
+
remove_column :adverts, :body
|
1230
|
+
EOS
|
1297
1231
|
)
|
1298
1232
|
|
1299
1233
|
Advert.field_specs.clear # not normally needed
|
@@ -1319,14 +1253,14 @@ RSpec.describe 'DeclareSchema Migration Generator' do
|
|
1319
1253
|
end
|
1320
1254
|
|
1321
1255
|
expect(Generators::DeclareSchema::Migration::Migrator.run).to(
|
1322
|
-
|
1256
|
+
migrate_up(<<~EOS.strip)
|
1323
1257
|
add_column :adverts, :title, :string, limit: 250, null: true#{charset_and_collation}
|
1324
1258
|
remove_column :adverts, :name
|
1325
|
-
|
1326
|
-
|
1327
|
-
remove_column :adverts, :title
|
1259
|
+
EOS
|
1260
|
+
.and migrate_down(<<~EOS.strip)
|
1328
1261
|
add_column :adverts, :name, :string, limit: 250, null: true#{charset_and_collation}
|
1329
|
-
|
1262
|
+
remove_column :adverts, :title
|
1263
|
+
EOS
|
1330
1264
|
)
|
1331
1265
|
|
1332
1266
|
expect(Generators::DeclareSchema::Migration::Migrator.run(adverts: { name: :title })).to(
|
@@ -1540,20 +1474,16 @@ RSpec.describe 'DeclareSchema Migration Generator' do
|
|
1540
1474
|
end
|
1541
1475
|
|
1542
1476
|
expect(Generators::DeclareSchema::Migration::Migrator.run).to(
|
1543
|
-
|
1477
|
+
migrate_up(<<~EOS.strip)
|
1544
1478
|
add_column :adverts, :category_id, :integer, limit: 8, null: false
|
1545
|
-
|
1546
|
-
|
1547
|
-
|
1548
|
-
|
1549
|
-
|
1550
|
-
|
1479
|
+
add_index :adverts, [:category_id], name: :on_category_id
|
1480
|
+
#{"add_foreign_key :adverts, :categories, column: :category_id, name: :on_category_id\n" if defined?(Mysql2)}
|
1481
|
+
EOS
|
1482
|
+
.and migrate_down(<<~EOS.strip)
|
1483
|
+
#{"remove_foreign_key :adverts, name: :on_category_id" if defined?(Mysql2)}
|
1484
|
+
remove_index :adverts, name: :on_category_id
|
1551
1485
|
remove_column :adverts, :category_id
|
1552
|
-
|
1553
|
-
remove_index :adverts, name: :on_category_id rescue ActiveRecord::StatementInvalid
|
1554
|
-
|
1555
|
-
#{"remove_foreign_key(\"adverts\", name: \"on_category_id\")\n" if defined?(Mysql2)}
|
1556
|
-
EOS
|
1486
|
+
EOS
|
1557
1487
|
)
|
1558
1488
|
|
1559
1489
|
Advert.field_specs.delete(:category_id)
|
@@ -1568,14 +1498,12 @@ RSpec.describe 'DeclareSchema Migration Generator' do
|
|
1568
1498
|
end
|
1569
1499
|
|
1570
1500
|
expect(Generators::DeclareSchema::Migration::Migrator.run).to(
|
1571
|
-
|
1501
|
+
migrate_up(<<~EOS.strip)
|
1572
1502
|
add_column :adverts, :c_id, :integer, limit: 8, null: false
|
1573
|
-
|
1574
|
-
|
1575
|
-
|
1576
|
-
|
1577
|
-
"add_foreign_key(\"adverts\", \"categories\", column: \"c_id\", name: \"on_c_id\")" if defined?(Mysql2)}
|
1578
|
-
EOS
|
1503
|
+
add_index :adverts, [:c_id], name: :on_c_id
|
1504
|
+
#{"add_foreign_key :adverts, :categories, column: :category_id, name: :on_category_id\n" +
|
1505
|
+
"add_foreign_key :adverts, :categories, column: :c_id, name: :on_c_id" if defined?(Mysql2)}
|
1506
|
+
EOS
|
1579
1507
|
)
|
1580
1508
|
|
1581
1509
|
Advert.field_specs.delete(:c_id)
|
@@ -1590,12 +1518,11 @@ RSpec.describe 'DeclareSchema Migration Generator' do
|
|
1590
1518
|
end
|
1591
1519
|
|
1592
1520
|
expect(Generators::DeclareSchema::Migration::Migrator.run).to(
|
1593
|
-
|
1521
|
+
migrate_up(<<~EOS.strip)
|
1594
1522
|
add_column :adverts, :category_id, :integer, limit: 8, null: false
|
1595
|
-
|
1596
|
-
|
1597
|
-
|
1598
|
-
EOS
|
1523
|
+
#{"add_foreign_key :adverts, :categories, column: :category_id, name: :on_category_id\n" +
|
1524
|
+
"add_foreign_key :adverts, :categories, column: :c_id, name: :on_c_id" if defined?(Mysql2)}
|
1525
|
+
EOS
|
1599
1526
|
)
|
1600
1527
|
|
1601
1528
|
Advert.field_specs.delete(:category_id)
|
@@ -1610,14 +1537,12 @@ RSpec.describe 'DeclareSchema Migration Generator' do
|
|
1610
1537
|
end
|
1611
1538
|
|
1612
1539
|
expect(Generators::DeclareSchema::Migration::Migrator.run).to(
|
1613
|
-
|
1540
|
+
migrate_up(<<~EOS.strip)
|
1614
1541
|
add_column :adverts, :category_id, :integer, limit: 8, null: false
|
1615
|
-
|
1616
|
-
|
1617
|
-
|
1618
|
-
|
1619
|
-
"add_foreign_key(\"adverts\", \"categories\", column: \"c_id\", name: \"on_c_id\")" if defined?(Mysql2)}
|
1620
|
-
EOS
|
1542
|
+
add_index :adverts, [:category_id], name: :my_index
|
1543
|
+
#{"add_foreign_key :adverts, :categories, column: :category_id, name: :on_category_id\n" +
|
1544
|
+
"add_foreign_key :adverts, :categories, column: :c_id, name: :on_c_id" if defined?(Mysql2)}
|
1545
|
+
EOS
|
1621
1546
|
)
|
1622
1547
|
|
1623
1548
|
Advert.field_specs.delete(:category_id)
|
@@ -1636,22 +1561,20 @@ RSpec.describe 'DeclareSchema Migration Generator' do
|
|
1636
1561
|
end
|
1637
1562
|
|
1638
1563
|
expect(Generators::DeclareSchema::Migration::Migrator.run).to(
|
1639
|
-
|
1564
|
+
migrate_up(<<~EOS.strip)
|
1640
1565
|
add_column :adverts, :created_at, :datetime, null: true
|
1641
1566
|
add_column :adverts, :updated_at, :datetime, null: true
|
1642
1567
|
add_column :adverts, :lock_version, :integer#{lock_version_limit}, null: false, default: 1
|
1643
|
-
|
1644
|
-
|
1645
|
-
|
1646
|
-
|
1647
|
-
|
1648
|
-
|
1649
|
-
remove_column :adverts, :updated_at
|
1568
|
+
#{"add_foreign_key :adverts, :categories, column: :category_id, name: :on_category_id\n" +
|
1569
|
+
"add_foreign_key :adverts, :categories, column: :c_id, name: :on_c_id" if defined?(Mysql2)}
|
1570
|
+
EOS
|
1571
|
+
.and migrate_down(<<~EOS.strip)
|
1572
|
+
#{"remove_foreign_key :adverts, name: :on_c_id\n" +
|
1573
|
+
"remove_foreign_key :adverts, name: :on_category_id" if defined?(Mysql2)}
|
1650
1574
|
remove_column :adverts, :lock_version
|
1651
|
-
|
1652
|
-
|
1653
|
-
|
1654
|
-
EOS
|
1575
|
+
remove_column :adverts, :updated_at
|
1576
|
+
remove_column :adverts, :created_at
|
1577
|
+
EOS
|
1655
1578
|
)
|
1656
1579
|
|
1657
1580
|
Advert.field_specs.delete(:updated_at)
|
@@ -1669,14 +1592,12 @@ RSpec.describe 'DeclareSchema Migration Generator' do
|
|
1669
1592
|
end
|
1670
1593
|
|
1671
1594
|
expect(Generators::DeclareSchema::Migration::Migrator.run).to(
|
1672
|
-
|
1595
|
+
migrate_up(<<~EOS.strip)
|
1673
1596
|
add_column :adverts, :title, :string, limit: 250, null: true#{charset_and_collation}
|
1674
|
-
|
1675
|
-
|
1676
|
-
|
1677
|
-
|
1678
|
-
"add_foreign_key(\"adverts\", \"categories\", column: \"c_id\", name: \"on_c_id\")" if defined?(Mysql2)}
|
1679
|
-
EOS
|
1597
|
+
add_index :adverts, [:title], name: :on_title
|
1598
|
+
#{"add_foreign_key :adverts, :categories, column: :category_id, name: :on_category_id\n" +
|
1599
|
+
"add_foreign_key :adverts, :categories, column: :c_id, name: :on_c_id" if defined?(Mysql2)}
|
1600
|
+
EOS
|
1680
1601
|
)
|
1681
1602
|
|
1682
1603
|
Advert.index_definitions.delete_if { |spec| spec.fields==["title"] }
|
@@ -1690,14 +1611,12 @@ RSpec.describe 'DeclareSchema Migration Generator' do
|
|
1690
1611
|
end
|
1691
1612
|
|
1692
1613
|
expect(Generators::DeclareSchema::Migration::Migrator.run).to(
|
1693
|
-
|
1614
|
+
migrate_up(<<~EOS.strip)
|
1694
1615
|
add_column :adverts, :title, :string, limit: 250, null: true#{charset_and_collation}
|
1695
|
-
|
1696
|
-
|
1697
|
-
|
1698
|
-
|
1699
|
-
"add_foreign_key(\"adverts\", \"categories\", column: \"c_id\", name: \"on_c_id\")" if defined?(Mysql2)}
|
1700
|
-
EOS
|
1616
|
+
add_index :adverts, [:title], name: :on_title, unique: true
|
1617
|
+
#{"add_foreign_key :adverts, :categories, column: :category_id, name: :on_category_id\n" +
|
1618
|
+
"add_foreign_key :adverts, :categories, column: :c_id, name: :on_c_id" if defined?(Mysql2)}
|
1619
|
+
EOS
|
1701
1620
|
)
|
1702
1621
|
|
1703
1622
|
Advert.index_definitions.delete_if { |spec| spec.fields == ["title"] }
|
@@ -1711,14 +1630,12 @@ RSpec.describe 'DeclareSchema Migration Generator' do
|
|
1711
1630
|
end
|
1712
1631
|
|
1713
1632
|
expect(Generators::DeclareSchema::Migration::Migrator.run).to(
|
1714
|
-
|
1633
|
+
migrate_up(<<~EOS.strip)
|
1715
1634
|
add_column :adverts, :title, :string, limit: 250, null: true#{charset_and_collation}
|
1716
|
-
|
1717
|
-
|
1718
|
-
|
1719
|
-
|
1720
|
-
"add_foreign_key(\"adverts\", \"categories\", column: \"c_id\", name: \"on_c_id\")" if defined?(Mysql2)}
|
1721
|
-
EOS
|
1635
|
+
add_index :adverts, [:title], name: :my_index
|
1636
|
+
#{"add_foreign_key :adverts, :categories, column: :category_id, name: :on_category_id\n" +
|
1637
|
+
"add_foreign_key :adverts, :categories, column: :c_id, name: :on_c_id" if defined?(Mysql2)}
|
1638
|
+
EOS
|
1722
1639
|
)
|
1723
1640
|
|
1724
1641
|
Advert.index_definitions.delete_if { |spec| spec.fields==["title"] }
|
@@ -1730,14 +1647,12 @@ RSpec.describe 'DeclareSchema Migration Generator' do
|
|
1730
1647
|
end
|
1731
1648
|
|
1732
1649
|
expect(Generators::DeclareSchema::Migration::Migrator.run).to(
|
1733
|
-
|
1650
|
+
migrate_up(<<~EOS.strip)
|
1734
1651
|
add_column :adverts, :title, :string, limit: 250, null: true#{charset_and_collation}
|
1735
|
-
|
1736
|
-
|
1737
|
-
|
1738
|
-
|
1739
|
-
"add_foreign_key(\"adverts\", \"categories\", column: \"c_id\", name: \"on_c_id\")" if defined?(Mysql2)}
|
1740
|
-
EOS
|
1652
|
+
add_index :adverts, [:title], name: :on_title
|
1653
|
+
#{"add_foreign_key :adverts, :categories, column: :category_id, name: :on_category_id\n" +
|
1654
|
+
"add_foreign_key :adverts, :categories, column: :c_id, name: :on_c_id" if defined?(Mysql2)}
|
1655
|
+
EOS
|
1741
1656
|
)
|
1742
1657
|
|
1743
1658
|
Advert.index_definitions.delete_if { |spec| spec.fields == ["title"] }
|
@@ -1749,14 +1664,12 @@ RSpec.describe 'DeclareSchema Migration Generator' do
|
|
1749
1664
|
end
|
1750
1665
|
|
1751
1666
|
expect(Generators::DeclareSchema::Migration::Migrator.run).to(
|
1752
|
-
|
1667
|
+
migrate_up(<<~EOS.strip)
|
1753
1668
|
add_column :adverts, :title, :string, limit: 250, null: true#{charset_and_collation}
|
1754
|
-
|
1755
|
-
|
1756
|
-
|
1757
|
-
|
1758
|
-
"add_foreign_key(\"adverts\", \"categories\", column: \"c_id\", name: \"on_c_id\")" if defined?(Mysql2)}
|
1759
|
-
EOS
|
1669
|
+
add_index :adverts, [:title], name: :my_index, unique: true
|
1670
|
+
#{"add_foreign_key :adverts, :categories, column: :category_id, name: :on_category_id\n" +
|
1671
|
+
"add_foreign_key :adverts, :categories, column: :c_id, name: :on_c_id" if defined?(Mysql2)}
|
1672
|
+
EOS
|
1760
1673
|
)
|
1761
1674
|
|
1762
1675
|
Advert.index_definitions.delete_if { |spec| spec.fields == ["title"] }
|
@@ -1768,14 +1681,12 @@ RSpec.describe 'DeclareSchema Migration Generator' do
|
|
1768
1681
|
end
|
1769
1682
|
|
1770
1683
|
expect(Generators::DeclareSchema::Migration::Migrator.run).to(
|
1771
|
-
|
1684
|
+
migrate_up(<<~EOS.strip)
|
1772
1685
|
add_column :adverts, :title, :string, limit: 250, null: true#{charset_and_collation}
|
1773
|
-
|
1774
|
-
|
1775
|
-
|
1776
|
-
|
1777
|
-
"add_foreign_key(\"adverts\", \"categories\", column: \"c_id\", name: \"on_c_id\")" if defined?(Mysql2)}
|
1778
|
-
EOS
|
1686
|
+
add_index :adverts, [:title, :category_id], name: :on_title_and_category_id
|
1687
|
+
#{"add_foreign_key :adverts, :categories, column: :category_id, name: :on_category_id\n" +
|
1688
|
+
"add_foreign_key :adverts, :categories, column: :c_id, name: :on_c_id" if defined?(Mysql2)}
|
1689
|
+
EOS
|
1779
1690
|
)
|
1780
1691
|
|
1781
1692
|
Advert.index_definitions.delete_if { |spec| spec.fields==["title", "category_id"] }
|
@@ -1800,34 +1711,24 @@ RSpec.describe 'DeclareSchema Migration Generator' do
|
|
1800
1711
|
Advert.reset_column_information
|
1801
1712
|
|
1802
1713
|
expect(Generators::DeclareSchema::Migration::Migrator.run("adverts" => "ads")).to(
|
1803
|
-
|
1714
|
+
migrate_up(<<~EOS.strip)
|
1804
1715
|
rename_table :adverts, :ads
|
1805
|
-
|
1806
1716
|
add_column :ads, :title, :string, limit: 250, null: true#{charset_and_collation}
|
1807
1717
|
add_column :ads, :body, :text#{', limit: 4294967295' if defined?(Mysql2)}, null: true#{charset_and_collation}
|
1808
|
-
|
1809
|
-
|
1810
|
-
|
1811
|
-
elsif defined?(Mysql2)
|
1812
|
-
"execute \"ALTER TABLE ads DROP PRIMARY KEY, ADD PRIMARY KEY (id)\"\n\n" +
|
1813
|
-
"add_foreign_key(\"adverts\", \"categories\", column: \"category_id\", name: \"on_category_id\")\n" +
|
1814
|
-
"add_foreign_key(\"adverts\", \"categories\", column: \"c_id\", name: \"on_c_id\")"
|
1718
|
+
#{if defined?(Mysql2)
|
1719
|
+
"add_foreign_key :adverts, :categories, column: :category_id, name: :on_category_id\n" +
|
1720
|
+
"add_foreign_key :adverts, :categories, column: :c_id, name: :on_c_id"
|
1815
1721
|
end}
|
1816
1722
|
EOS
|
1817
|
-
|
1818
|
-
|
1819
|
-
|
1820
|
-
|
1821
|
-
|
1822
|
-
|
1823
|
-
|
1824
|
-
|
1825
|
-
|
1826
|
-
"execute \"ALTER TABLE adverts DROP PRIMARY KEY, ADD PRIMARY KEY (id)\"\n\n" +
|
1827
|
-
"remove_foreign_key(\"adverts\", name: \"on_category_id\")\n" +
|
1828
|
-
"remove_foreign_key(\"adverts\", name: \"on_c_id\")"
|
1829
|
-
end}
|
1830
|
-
EOS
|
1723
|
+
.and migrate_down(<<~EOS.strip)
|
1724
|
+
#{if defined?(Mysql2)
|
1725
|
+
"remove_foreign_key :adverts, name: :on_c_id\n" +
|
1726
|
+
"remove_foreign_key :adverts, name: :on_category_id"
|
1727
|
+
end}
|
1728
|
+
remove_column :ads, :body
|
1729
|
+
remove_column :ads, :title
|
1730
|
+
rename_table :ads, :adverts
|
1731
|
+
EOS
|
1831
1732
|
)
|
1832
1733
|
|
1833
1734
|
# Set the table name back to what it should be and confirm we're in sync:
|
@@ -1854,32 +1755,18 @@ RSpec.describe 'DeclareSchema Migration Generator' do
|
|
1854
1755
|
end
|
1855
1756
|
|
1856
1757
|
expect(Generators::DeclareSchema::Migration::Migrator.run("adverts" => "advertisements")).to(
|
1857
|
-
|
1758
|
+
migrate_up(<<~EOS.strip)
|
1858
1759
|
rename_table :adverts, :advertisements
|
1859
|
-
|
1860
1760
|
add_column :advertisements, :title, :string, limit: 250, null: true#{charset_and_collation}
|
1861
1761
|
add_column :advertisements, :body, :text#{', limit: 4294967295' if defined?(Mysql2)}, null: true#{charset_and_collation}
|
1862
1762
|
remove_column :advertisements, :name
|
1863
|
-
|
1864
|
-
|
1865
|
-
|
1866
|
-
elsif defined?(Mysql2)
|
1867
|
-
"execute \"ALTER TABLE advertisements DROP PRIMARY KEY, ADD PRIMARY KEY (id)\""
|
1868
|
-
end}
|
1869
|
-
EOS
|
1870
|
-
.and migrate_down(<<~EOS.strip)
|
1871
|
-
remove_column :advertisements, :title
|
1763
|
+
EOS
|
1764
|
+
.and migrate_down(<<~EOS.strip)
|
1765
|
+
add_column :advertisements, :name, :string, limit: 250, null: true#{charset_and_collation}
|
1872
1766
|
remove_column :advertisements, :body
|
1873
|
-
|
1874
|
-
|
1767
|
+
remove_column :advertisements, :title
|
1875
1768
|
rename_table :advertisements, :adverts
|
1876
|
-
|
1877
|
-
#{if defined?(SQLite3)
|
1878
|
-
"add_index :adverts, [:id], unique: true, name: 'PRIMARY'"
|
1879
|
-
elsif defined?(Mysql2)
|
1880
|
-
"execute \"ALTER TABLE adverts DROP PRIMARY KEY, ADD PRIMARY KEY (id)\""
|
1881
|
-
end}
|
1882
|
-
EOS
|
1769
|
+
EOS
|
1883
1770
|
)
|
1884
1771
|
|
1885
1772
|
### Drop a table
|
@@ -1891,14 +1778,14 @@ RSpec.describe 'DeclareSchema Migration Generator' do
|
|
1891
1778
|
# Dropping tables is where the automatic down-migration really comes in handy:
|
1892
1779
|
|
1893
1780
|
expect(Generators::DeclareSchema::Migration::Migrator.run).to(
|
1894
|
-
|
1781
|
+
migrate_up(<<~EOS.strip)
|
1895
1782
|
drop_table :adverts
|
1896
|
-
|
1897
|
-
|
1783
|
+
EOS
|
1784
|
+
.and migrate_down(<<~EOS.strip)
|
1898
1785
|
create_table "adverts"#{table_options}, force: :cascade do |t|
|
1899
1786
|
t.string "name", limit: 250#{charset_and_collation}
|
1900
1787
|
end
|
1901
|
-
|
1788
|
+
EOS
|
1902
1789
|
)
|
1903
1790
|
|
1904
1791
|
## STI
|
@@ -1923,16 +1810,14 @@ RSpec.describe 'DeclareSchema Migration Generator' do
|
|
1923
1810
|
|
1924
1811
|
up, _ = Generators::DeclareSchema::Migration::Migrator.run do |migrations|
|
1925
1812
|
expect(migrations).to(
|
1926
|
-
|
1813
|
+
migrate_up(<<~EOS.strip)
|
1927
1814
|
add_column :adverts, :type, :string, limit: 250, null: true#{charset_and_collation}
|
1928
|
-
|
1929
|
-
|
1930
|
-
|
1931
|
-
|
1815
|
+
add_index :adverts, [:type], name: :on_type
|
1816
|
+
EOS
|
1817
|
+
.and migrate_down(<<~EOS.strip)
|
1818
|
+
remove_index :adverts, name: :on_type
|
1932
1819
|
remove_column :adverts, :type
|
1933
|
-
|
1934
|
-
remove_index :adverts, name: :on_type rescue ActiveRecord::StatementInvalid
|
1935
|
-
EOS
|
1820
|
+
EOS
|
1936
1821
|
)
|
1937
1822
|
end
|
1938
1823
|
|
@@ -1969,14 +1854,14 @@ RSpec.describe 'DeclareSchema Migration Generator' do
|
|
1969
1854
|
end
|
1970
1855
|
|
1971
1856
|
expect(Generators::DeclareSchema::Migration::Migrator.run(adverts: { title: :name })).to(
|
1972
|
-
|
1857
|
+
migrate_up(<<~EOS.strip)
|
1973
1858
|
rename_column :adverts, :title, :name
|
1974
1859
|
change_column :adverts, :name, :string, limit: 250, null: true, default: "No Name"#{charset_and_collation}
|
1975
|
-
|
1976
|
-
|
1860
|
+
EOS
|
1861
|
+
.and migrate_down(<<~EOS.strip)
|
1862
|
+
change_column :adverts, :name, :string, limit: 250, null: true, default: "Untitled"#{charset_and_collation}
|
1977
1863
|
rename_column :adverts, :name, :title
|
1978
|
-
|
1979
|
-
EOS
|
1864
|
+
EOS
|
1980
1865
|
)
|
1981
1866
|
|
1982
1867
|
### Rename a table and add a column
|
@@ -1991,18 +1876,11 @@ RSpec.describe 'DeclareSchema Migration Generator' do
|
|
1991
1876
|
end
|
1992
1877
|
|
1993
1878
|
expect(Generators::DeclareSchema::Migration::Migrator.run(adverts: :ads)).to(
|
1994
|
-
|
1879
|
+
migrate_up(<<~EOS.strip)
|
1995
1880
|
rename_table :adverts, :ads
|
1996
|
-
|
1997
1881
|
add_column :ads, :created_at, :datetime, null: false
|
1998
1882
|
change_column :ads, :title, :string, limit: 250, null: false, default: \"Untitled\"#{charset_and_collation}
|
1999
|
-
|
2000
|
-
#{if defined?(SQLite3)
|
2001
|
-
"add_index :ads, [:id], unique: true, name: 'PRIMARY'"
|
2002
|
-
elsif defined?(Mysql2)
|
2003
|
-
'execute "ALTER TABLE ads DROP PRIMARY KEY, ADD PRIMARY KEY (id)"'
|
2004
|
-
end}
|
2005
|
-
EOS
|
1883
|
+
EOS
|
2006
1884
|
)
|
2007
1885
|
|
2008
1886
|
class Advert < ActiveRecord::Base
|
@@ -2026,15 +1904,9 @@ RSpec.describe 'DeclareSchema Migration Generator' do
|
|
2026
1904
|
end
|
2027
1905
|
|
2028
1906
|
expect(Generators::DeclareSchema::Migration::Migrator.run(adverts: { id: :advert_id })).to(
|
2029
|
-
|
1907
|
+
migrate_up(<<~EOS.strip)
|
2030
1908
|
rename_column :adverts, :id, :advert_id
|
2031
|
-
|
2032
|
-
#{if defined?(SQLite3)
|
2033
|
-
"add_index :adverts, [:advert_id], unique: true, name: 'PRIMARY'"
|
2034
|
-
elsif defined?(Mysql2)
|
2035
|
-
'execute "ALTER TABLE adverts DROP PRIMARY KEY, ADD PRIMARY KEY (advert_id)"'
|
2036
|
-
end}
|
2037
|
-
EOS
|
1909
|
+
EOS
|
2038
1910
|
)
|
2039
1911
|
|
2040
1912
|
nuke_model_class(Advert)
|