declare_schema 1.5.0.pre.1 → 2.1.0.pre.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (71) hide show
  1. checksums.yaml +4 -4
  2. data/.devcontainer/Dockerfile +19 -0
  3. data/.devcontainer/boot.sh +1 -0
  4. data/.devcontainer/devcontainer.json +55 -0
  5. data/.devcontainer/docker-compose.yml +40 -0
  6. data/.github/workflows/declare_schema_build.yml +35 -11
  7. data/Appraisals +2 -10
  8. data/CHANGELOG.md +8 -1
  9. data/CODE-OF-CONDUCT.md +16 -0
  10. data/CONTRIBUTING.md +46 -0
  11. data/Gemfile +6 -1
  12. data/Gemfile.lock +88 -78
  13. data/README.md +38 -14
  14. data/Rakefile +5 -15
  15. data/catalog-info.yaml +35 -0
  16. data/config/brakeman.ignore +2 -2
  17. data/declare_schema.gemspec +1 -1
  18. data/gemfiles/{rails_6_1_sqlite3.gemfile → rails_6_1.gemfile} +3 -0
  19. data/gemfiles/{rails_7_0_sqlite3.gemfile → rails_7_0.gemfile} +3 -0
  20. data/gemfiles/{rails_7_1_sqlite3.gemfile → rails_7_1.gemfile} +3 -0
  21. data/gemfiles/{rails_7_0_mysql2.gemfile → rails_7_2.gemfile} +4 -1
  22. data/lib/declare_schema/command.rb +2 -8
  23. data/lib/declare_schema/model/column.rb +1 -1
  24. data/lib/declare_schema/model/foreign_key_definition.rb +9 -12
  25. data/lib/declare_schema/model/index_definition.rb +16 -8
  26. data/lib/declare_schema/model.rb +10 -14
  27. data/lib/declare_schema/schema_change/base.rb +4 -0
  28. data/lib/declare_schema/schema_change/primary_key_change.rb +19 -6
  29. data/lib/declare_schema/version.rb +1 -1
  30. data/lib/declare_schema.rb +20 -8
  31. data/lib/generators/declare_schema/migration/migration_generator.rb +17 -8
  32. data/lib/generators/declare_schema/migration/migrator.rb +16 -9
  33. data/spec/fixtures/migrations/mysql2/will_generate_unique_constraint_names_rails_6.txt +15 -0
  34. data/spec/fixtures/migrations/mysql2/will_generate_unique_constraint_names_rails_7.txt +15 -0
  35. data/spec/fixtures/migrations/postgresql/will_generate_unique_constraint_names_rails_6.txt +15 -0
  36. data/spec/fixtures/migrations/postgresql/will_generate_unique_constraint_names_rails_7.txt +15 -0
  37. data/spec/fixtures/migrations/sqlite3/will_generate_unique_constraint_names_rails_6.txt +15 -0
  38. data/spec/fixtures/migrations/sqlite3/will_generate_unique_constraint_names_rails_7.txt +15 -0
  39. data/spec/lib/declare_schema/api_spec.rb +1 -7
  40. data/spec/lib/declare_schema/field_declaration_dsl_spec.rb +3 -3
  41. data/spec/lib/declare_schema/field_spec_spec.rb +68 -45
  42. data/spec/lib/declare_schema/generator_spec.rb +29 -71
  43. data/spec/lib/declare_schema/interactive_primary_key_spec.rb +3 -10
  44. data/spec/lib/declare_schema/migration_generator_spec.rb +249 -255
  45. data/spec/lib/declare_schema/model/column_spec.rb +89 -41
  46. data/spec/lib/declare_schema/model/foreign_key_definition_spec.rb +14 -8
  47. data/spec/lib/declare_schema/model/habtm_model_shim_spec.rb +4 -9
  48. data/spec/lib/declare_schema/model/index_definition_spec.rb +18 -10
  49. data/spec/lib/declare_schema/model/table_options_definition_spec.rb +11 -11
  50. data/spec/lib/declare_schema/schema_change/base_spec.rb +5 -7
  51. data/spec/lib/declare_schema/schema_change/column_add_spec.rb +1 -3
  52. data/spec/lib/declare_schema/schema_change/column_change_spec.rb +1 -3
  53. data/spec/lib/declare_schema/schema_change/column_remove_spec.rb +1 -3
  54. data/spec/lib/declare_schema/schema_change/column_rename_spec.rb +1 -3
  55. data/spec/lib/declare_schema/schema_change/foreign_key_add_spec.rb +1 -3
  56. data/spec/lib/declare_schema/schema_change/foreign_key_remove_spec.rb +1 -3
  57. data/spec/lib/declare_schema/schema_change/index_add_spec.rb +1 -3
  58. data/spec/lib/declare_schema/schema_change/index_remove_spec.rb +1 -3
  59. data/spec/lib/declare_schema/schema_change/primary_key_change_spec.rb +39 -15
  60. data/spec/lib/declare_schema/schema_change/table_add_spec.rb +1 -3
  61. data/spec/lib/declare_schema/schema_change/table_change_spec.rb +1 -3
  62. data/spec/lib/declare_schema/schema_change/table_remove_spec.rb +1 -3
  63. data/spec/lib/declare_schema/schema_change/table_rename_spec.rb +1 -3
  64. data/spec/lib/generators/declare_schema/migration/migrator_spec.rb +0 -4
  65. data/spec/spec_helper.rb +3 -0
  66. data/spec/support/adapter_specific_test_helpers.rb +25 -0
  67. data/spec/{lib/declare_schema → support}/prepare_testapp.rb +3 -1
  68. data/spec/support/test_app_spec_helpers.rb +7 -0
  69. metadata +24 -11
  70. data/gemfiles/rails_6_1_mysql2.gemfile +0 -23
  71. data/gemfiles/rails_7_1_mysql2.gemfile +0 -23
@@ -1,58 +1,52 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- begin
4
- require 'mysql2'
5
- rescue LoadError
6
- end
7
-
8
- begin
9
- require 'sqlite3'
10
- rescue LoadError
11
- end
12
-
13
3
  RSpec.describe 'DeclareSchema Migration Generator' do
14
- before do
15
- load File.expand_path('prepare_testapp.rb', __dir__)
16
- end
4
+ include_context 'prepare test app'
5
+
17
6
  let(:text_limit) do
18
- if defined?(Mysql2)
7
+ if current_adapter == 'mysql2'
19
8
  ", limit: 4294967295"
20
9
  end
21
10
  end
22
11
  let(:charset_and_collation) do
23
- if defined?(Mysql2)
12
+ if current_adapter == 'mysql2'
24
13
  ', charset: "utf8mb4", collation: "utf8mb4_bin"'
25
14
  end
26
15
  end
16
+ let(:primary_key_type) do
17
+ if current_adapter == 'postgresql'
18
+ ':bigserial'
19
+ else
20
+ ':bigint'
21
+ end
22
+ end
27
23
  let(:create_table_charset_and_collation) do
28
- if defined?(Mysql2)
24
+ if current_adapter == 'mysql2'
29
25
  ", options: \"CHARACTER SET utf8mb4 COLLATE utf8mb4_bin\""
30
26
  end
31
27
  end
32
28
  let(:datetime_precision) do
33
29
  if ActiveSupport::VERSION::MAJOR >= 7
34
30
  ', precision: 6'
35
- elsif defined?(Mysql2)
31
+ elsif current_adapter == 'mysql2'
36
32
  ', precision: 0'
37
33
  end
38
34
  end
39
35
  let(:table_options) do
40
- if defined?(Mysql2)
41
- ", options: \"#{'ENGINE=InnoDB ' if ActiveSupport::VERSION::MAJOR == 5}DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin\"" +
42
- if ActiveSupport::VERSION::MAJOR >= 6
43
- ', charset: "utf8mb4", collation: "utf8mb4_bin"'
44
- else
45
- ''
46
- end
36
+ case current_adapter
37
+ when 'mysql2'
38
+ ', options: "DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin", charset: "utf8mb4", collation: "utf8mb4_bin"'
39
+ when 'postgresql'
40
+ ""
47
41
  else
48
42
  ", id: :integer"
49
43
  end
50
44
  end
51
45
  let(:lock_version_limit) do
52
- if defined?(Mysql2)
53
- ", limit: 4"
54
- else
46
+ if current_adapter == 'sqlite3'
55
47
  ''
48
+ else
49
+ ', limit: 4'
56
50
  end
57
51
  end
58
52
 
@@ -63,8 +57,7 @@ RSpec.describe 'DeclareSchema Migration Generator' do
63
57
 
64
58
  expect(Generators::DeclareSchema::Migration::Migrator.run).to migrate_up("").and migrate_down("")
65
59
 
66
- class Advert < ActiveRecord::Base
67
- end
60
+ class Advert < ActiveRecord::Base; end # rubocop:disable Lint/ConstantDefinitionInBlock
68
61
 
69
62
  expect(Generators::DeclareSchema::Migration::Migrator.run).to migrate_up("").and migrate_down("")
70
63
 
@@ -73,7 +66,7 @@ RSpec.describe 'DeclareSchema Migration Generator' do
73
66
  Advert.connection.schema_cache.clear!
74
67
  Advert.reset_column_information
75
68
 
76
- class Advert < ActiveRecord::Base
69
+ class Advert < ActiveRecord::Base # rubocop:disable Lint/ConstantDefinitionInBlock
77
70
  declare_schema do
78
71
  string :name, limit: 250, null: true
79
72
  end
@@ -82,18 +75,18 @@ RSpec.describe 'DeclareSchema Migration Generator' do
82
75
  up, _ = Generators::DeclareSchema::Migration::Migrator.run.tap do |migrations|
83
76
  expect(migrations).to(
84
77
  migrate_up(<<~EOS.strip)
85
- create_table :adverts, id: :bigint#{create_table_charset_and_collation} do |t|
78
+ create_table :adverts, id: #{primary_key_type}#{create_table_charset_and_collation} do |t|
86
79
  t.string :name, limit: 250, null: true#{charset_and_collation}
87
80
  end
88
81
  EOS
89
- .and migrate_down("drop_table :adverts")
82
+ .and(migrate_down("drop_table :adverts"))
90
83
  )
91
84
  end
92
85
 
93
86
  ActiveRecord::Migration.class_eval(up)
94
87
  expect(Advert.columns.map(&:name)).to eq(["id", "name"])
95
88
 
96
- class Advert < ActiveRecord::Base
89
+ class Advert < ActiveRecord::Base # rubocop:disable Lint/ConstantDefinitionInBlock
97
90
  declare_schema do
98
91
  string :name, limit: 250, null: true
99
92
  text :body, null: true
@@ -109,14 +102,14 @@ RSpec.describe 'DeclareSchema Migration Generator' do
109
102
  add_column :adverts, :body, :text#{text_limit}, null: true#{charset_and_collation}
110
103
  add_column :adverts, :published_at, :datetime, null: true
111
104
  EOS
112
- .and migrate_down(<<~EOS.strip)
113
- remove_column :adverts, :published_at
114
- remove_column :adverts, :body
105
+ .and(migrate_down(<<~EOS.strip))
106
+ remove_column :adverts, :published_at
107
+ remove_column :adverts, :body
115
108
  EOS
116
109
  )
117
110
 
118
111
  Advert.field_specs.clear # not normally needed
119
- class Advert < ActiveRecord::Base
112
+ class Advert < ActiveRecord::Base # rubocop:disable Lint/ConstantDefinitionInBlock
120
113
  declare_schema do
121
114
  string :name, limit: 250, null: true
122
115
  text :body, null: true
@@ -124,13 +117,13 @@ RSpec.describe 'DeclareSchema Migration Generator' do
124
117
  end
125
118
 
126
119
  expect(migrate).to(
127
- migrate_up("remove_column :adverts, :published_at").and(
128
- migrate_down("add_column :adverts, :published_at, :datetime#{datetime_precision}, null: true")
129
- )
120
+ migrate_up("remove_column :adverts, :published_at").and(
121
+ migrate_down("add_column :adverts, :published_at, :datetime#{datetime_precision}, null: true")
122
+ )
130
123
  )
131
124
 
132
125
  nuke_model_class(Advert)
133
- class Advert < ActiveRecord::Base
126
+ class Advert < ActiveRecord::Base # rubocop:disable Lint/ConstantDefinitionInBlock
134
127
  declare_schema do
135
128
  string :title, limit: 250, null: true
136
129
  text :body, null: true
@@ -142,21 +135,21 @@ RSpec.describe 'DeclareSchema Migration Generator' do
142
135
  add_column :adverts, :title, :string, limit: 250, null: true#{charset_and_collation}
143
136
  remove_column :adverts, :name
144
137
  EOS
145
- .and migrate_down(<<~EOS.strip)
146
- add_column :adverts, :name, :string, limit: 250, null: true#{charset_and_collation}
147
- remove_column :adverts, :title
138
+ .and(migrate_down(<<~EOS.strip))
139
+ add_column :adverts, :name, :string, limit: 250, null: true#{charset_and_collation}
140
+ remove_column :adverts, :title
148
141
  EOS
149
142
  )
150
143
 
151
144
  expect(Generators::DeclareSchema::Migration::Migrator.run(adverts: { name: :title })).to(
152
- migrate_up("rename_column :adverts, :name, :title").and(
153
- migrate_down("rename_column :adverts, :title, :name")
154
- )
145
+ migrate_up("rename_column :adverts, :name, :title").and(
146
+ migrate_down("rename_column :adverts, :title, :name")
147
+ )
155
148
  )
156
149
 
157
150
  migrate
158
151
 
159
- class Advert < ActiveRecord::Base
152
+ class Advert < ActiveRecord::Base # rubocop:disable Lint/ConstantDefinitionInBlock
160
153
  declare_schema do
161
154
  text :title, null: true
162
155
  text :body, null: true
@@ -164,12 +157,12 @@ RSpec.describe 'DeclareSchema Migration Generator' do
164
157
  end
165
158
 
166
159
  expect(Generators::DeclareSchema::Migration::Migrator.run).to(
167
- migrate_up("change_column :adverts, :title, :text#{text_limit}, null: true#{charset_and_collation}").and(
168
- migrate_down("change_column :adverts, :title, :string, limit: 250, null: true#{charset_and_collation}")
169
- )
160
+ migrate_up("change_column :adverts, :title, :text#{text_limit}, null: true#{charset_and_collation}").and(
161
+ migrate_down("change_column :adverts, :title, :string, limit: 250, null: true#{charset_and_collation}")
162
+ )
170
163
  )
171
164
 
172
- class Advert < ActiveRecord::Base
165
+ class Advert < ActiveRecord::Base # rubocop:disable Lint/ConstantDefinitionInBlock
173
166
  declare_schema do
174
167
  string :title, default: "Untitled", limit: 250, null: true
175
168
  text :body, null: true
@@ -177,17 +170,17 @@ RSpec.describe 'DeclareSchema Migration Generator' do
177
170
  end
178
171
 
179
172
  expect(migrate).to(
180
- migrate_up(<<~EOS.strip)
173
+ migrate_up(<<~EOS.strip)
181
174
  change_column :adverts, :title, :string, limit: 250, null: true, default: "Untitled"#{charset_and_collation}
182
- EOS
183
- .and migrate_down(<<~EOS.strip)
184
- change_column :adverts, :title, :string, limit: 250, null: true#{charset_and_collation}
185
- EOS
175
+ EOS
176
+ .and(migrate_down(<<~EOS.strip))
177
+ change_column :adverts, :title, :string, limit: 250, null: true#{charset_and_collation}
178
+ EOS
186
179
  )
187
180
 
188
181
  ### Limits
189
182
 
190
- class Advert < ActiveRecord::Base
183
+ class Advert < ActiveRecord::Base # rubocop:disable Lint/ConstantDefinitionInBlock
191
184
  declare_schema do
192
185
  integer :price, null: true, limit: 2
193
186
  end
@@ -200,23 +193,23 @@ RSpec.describe 'DeclareSchema Migration Generator' do
200
193
  # Now run the migration, then change the limit:
201
194
 
202
195
  ActiveRecord::Migration.class_eval(up)
203
- class Advert < ActiveRecord::Base
196
+ class Advert < ActiveRecord::Base # rubocop:disable Lint/ConstantDefinitionInBlock
204
197
  declare_schema do
205
198
  integer :price, null: true, limit: 3
206
199
  end
207
200
  end
208
201
 
209
202
  expect(Generators::DeclareSchema::Migration::Migrator.run).to(
210
- migrate_up(<<~EOS.strip)
203
+ migrate_up(<<~EOS.strip)
211
204
  change_column :adverts, :price, :integer, limit: 3, null: true
212
- EOS
213
- .and migrate_down(<<~EOS.strip)
214
- change_column :adverts, :price, :integer, limit: 2, null: true
215
- EOS
205
+ EOS
206
+ .and(migrate_down(<<~EOS.strip))
207
+ change_column :adverts, :price, :integer, limit: 2, null: true
208
+ EOS
216
209
  )
217
210
 
218
- ActiveRecord::Migration.class_eval("remove_column :adverts, :price")
219
- class Advert < ActiveRecord::Base
211
+ ActiveRecord::Migration.class_eval("remove_column :adverts, :price", __FILE__, __LINE__)
212
+ class Advert < ActiveRecord::Base # rubocop:disable Lint/ConstantDefinitionInBlock
220
213
  declare_schema do
221
214
  decimal :price, precision: 4, scale: 1, null: true
222
215
  end
@@ -227,11 +220,11 @@ RSpec.describe 'DeclareSchema Migration Generator' do
227
220
  # If a `limit` is given, it will only be used in MySQL, to choose the smallest TEXT field that will accommodate
228
221
  # that limit (0xff for TINYTEXT, 0xffff for TEXT, 0xffffff for MEDIUMTEXT, 0xffffffff for LONGTEXT).
229
222
 
230
- if defined?(SQLite3)
223
+ if current_adapter == 'sqlite3'
231
224
  expect(::DeclareSchema::Model::FieldSpec.mysql_text_limits?).to be_falsey
232
225
  end
233
226
 
234
- class Advert < ActiveRecord::Base
227
+ class Advert < ActiveRecord::Base # rubocop:disable Lint/ConstantDefinitionInBlock
235
228
  declare_schema do
236
229
  text :notes
237
230
  text :description, limit: 30000
@@ -239,11 +232,11 @@ RSpec.describe 'DeclareSchema Migration Generator' do
239
232
  end
240
233
 
241
234
  expect(Generators::DeclareSchema::Migration::Migrator.run).to(
242
- migrate_up(<<~EOS.strip)
235
+ migrate_up(<<~EOS.strip)
243
236
  add_column :adverts, :price, :decimal, precision: 4, scale: 1, null: true
244
237
  add_column :adverts, :notes, :text#{text_limit}, null: false#{charset_and_collation}
245
- add_column :adverts, :description, :text#{', limit: 65535' if defined?(Mysql2)}, null: false#{charset_and_collation}
246
- EOS
238
+ add_column :adverts, :description, :text#{', limit: 65535' if current_adapter == 'mysql2'}, null: false#{charset_and_collation}
239
+ EOS
247
240
  )
248
241
 
249
242
  Advert.field_specs.delete :price
@@ -252,7 +245,7 @@ RSpec.describe 'DeclareSchema Migration Generator' do
252
245
 
253
246
  # In MySQL, limits are applied, rounded up:
254
247
 
255
- if defined?(Mysql2)
248
+ if current_adapter == 'mysql2'
256
249
  expect(::DeclareSchema::Model::FieldSpec.mysql_text_limits?).to be_truthy
257
250
 
258
251
  class Advert < ActiveRecord::Base
@@ -263,10 +256,10 @@ RSpec.describe 'DeclareSchema Migration Generator' do
263
256
  end
264
257
 
265
258
  expect(Generators::DeclareSchema::Migration::Migrator.run).to(
266
- migrate_up(<<~EOS.strip)
259
+ migrate_up(<<~EOS.strip)
267
260
  add_column :adverts, :notes, :text, limit: 4294967295, null: false#{charset_and_collation}
268
261
  add_column :adverts, :description, :text, limit: 255, null: false#{charset_and_collation}
269
- EOS
262
+ EOS
270
263
  )
271
264
 
272
265
  Advert.field_specs.delete :notes
@@ -274,7 +267,7 @@ RSpec.describe 'DeclareSchema Migration Generator' do
274
267
  # Limits that are too high for MySQL will raise an exception.
275
268
 
276
269
  expect do
277
- class Advert < ActiveRecord::Base
270
+ class Advert < ActiveRecord::Base # rubocop:disable Lint/ConstantDefinitionInBlock
278
271
  declare_schema do
279
272
  text :notes
280
273
  text :description, limit: 0x1_0000_0000
@@ -291,8 +284,7 @@ RSpec.describe 'DeclareSchema Migration Generator' do
291
284
  Advert.connection.execute "ALTER TABLE adverts ADD COLUMN description TINYTEXT"
292
285
  Advert.connection.schema_cache.clear!
293
286
  Advert.reset_column_information
294
- expect(Advert.connection.tables - Generators::DeclareSchema::Migration::Migrator.always_ignore_tables).
295
- to eq(["adverts"])
287
+ expect(Advert.connection.tables - Generators::DeclareSchema::Migration::Migrator.always_ignore_tables).to eq(["adverts"])
296
288
  expect(Advert.columns.map(&:name)).to eq(["id", "body", "title", "description"])
297
289
 
298
290
  # Now migrate to an unstated text limit:
@@ -304,12 +296,12 @@ RSpec.describe 'DeclareSchema Migration Generator' do
304
296
  end
305
297
 
306
298
  expect(Generators::DeclareSchema::Migration::Migrator.run).to(
307
- migrate_up(<<~EOS.strip)
299
+ migrate_up(<<~EOS.strip)
308
300
  change_column :adverts, :description, :text, limit: 4294967295, null: false#{charset_and_collation}
309
- EOS
310
- .and migrate_down(<<~EOS.strip)
311
- change_column :adverts, :description, :text#{', limit: 255' if defined?(Mysql2)}, null: true#{charset_and_collation}
312
- EOS
301
+ EOS
302
+ .and(migrate_down(<<~EOS.strip))
303
+ change_column :adverts, :description, :text#{', limit: 255' if current_adapter == 'mysql2'}, null: true#{charset_and_collation}
304
+ EOS
313
305
  )
314
306
 
315
307
  # And migrate to a stated text limit that is the same as the unstated one:
@@ -321,19 +313,20 @@ RSpec.describe 'DeclareSchema Migration Generator' do
321
313
  end
322
314
 
323
315
  expect(Generators::DeclareSchema::Migration::Migrator.run).to(
324
- migrate_up(<<~EOS.strip)
316
+ migrate_up(<<~EOS.strip)
325
317
  change_column :adverts, :description, :text, limit: 4294967295, null: false#{charset_and_collation}
326
- EOS
327
- .and migrate_down(<<~EOS.strip)
328
- change_column :adverts, :description, :text#{', limit: 255' if defined?(Mysql2)}, null: true#{charset_and_collation}
329
- EOS
318
+ EOS
319
+ .and(migrate_down(<<~EOS.strip))
320
+ change_column :adverts, :description, :text#{', limit: 255' if current_adapter == 'mysql2'}, null: true#{charset_and_collation}
321
+ EOS
330
322
  )
331
323
  end
332
324
 
333
325
  Advert.field_specs.clear
334
326
  Advert.connection.schema_cache.clear!
335
327
  Advert.reset_column_information
336
- class Advert < ActiveRecord::Base
328
+
329
+ class Advert < ActiveRecord::Base # rubocop:disable Lint/ConstantDefinitionInBlock
337
330
  declare_schema do
338
331
  string :name, limit: 250, null: true
339
332
  end
@@ -350,8 +343,8 @@ RSpec.describe 'DeclareSchema Migration Generator' do
350
343
  # DeclareSchema extends the `belongs_to` macro so that it also declares the
351
344
  # foreign-key field. It also generates an index on the field.
352
345
 
353
- class Category < ActiveRecord::Base; end
354
- class Advert < ActiveRecord::Base
346
+ class Category < ActiveRecord::Base; end # rubocop:disable Lint/ConstantDefinitionInBlock
347
+ class Advert < ActiveRecord::Base # rubocop:disable Lint/ConstantDefinitionInBlock
355
348
  declare_schema do
356
349
  string :name, limit: 250, null: true
357
350
  end
@@ -362,12 +355,12 @@ RSpec.describe 'DeclareSchema Migration Generator' do
362
355
  migrate_up(<<~EOS.strip)
363
356
  add_column :adverts, :category_id, :integer, limit: 8, null: false
364
357
  add_index :adverts, [:category_id], name: :index_adverts_on_category_id
365
- #{"add_foreign_key :adverts, :categories, column: :category_id, name: :index_adverts_on_category_id\n" if defined?(Mysql2)}
358
+ #{"add_foreign_key :adverts, :categories, column: :category_id, name: :index_adverts_on_category_id\n" unless current_adapter == 'sqlite3'}
366
359
  EOS
367
- .and migrate_down(<<~EOS.strip)
368
- #{"remove_foreign_key :adverts, name: :index_adverts_on_category_id" if defined?(Mysql2)}
369
- remove_index :adverts, name: :index_adverts_on_category_id
370
- remove_column :adverts, :category_id
360
+ .and(migrate_down(<<~EOS.strip))
361
+ #{'remove_foreign_key :adverts, name: :index_adverts_on_category_id' unless current_adapter == 'sqlite3'}
362
+ remove_index :adverts, name: :index_adverts_on_category_id
363
+ remove_column :adverts, :category_id
371
364
  EOS
372
365
  )
373
366
 
@@ -376,8 +369,9 @@ RSpec.describe 'DeclareSchema Migration Generator' do
376
369
 
377
370
  # If you specify a custom foreign key, the migration generator observes that:
378
371
 
379
- class Category < ActiveRecord::Base; end
380
- class Advert < ActiveRecord::Base
372
+ class Category < ActiveRecord::Base; end # rubocop:disable Lint/ConstantDefinitionInBlock
373
+
374
+ class Advert < ActiveRecord::Base # rubocop:disable Lint/ConstantDefinitionInBlock
381
375
  declare_schema { }
382
376
  belongs_to :category, foreign_key: "c_id", class_name: 'Category'
383
377
  end
@@ -386,8 +380,10 @@ RSpec.describe 'DeclareSchema Migration Generator' do
386
380
  migrate_up(<<~EOS.strip)
387
381
  add_column :adverts, :c_id, :integer, limit: 8, null: false
388
382
  add_index :adverts, [:c_id], name: :index_adverts_on_c_id
389
- #{"add_foreign_key :adverts, :categories, column: :category_id, name: :index_adverts_on_category_id\n" +
390
- "add_foreign_key :adverts, :categories, column: :c_id, name: :index_adverts_on_c_id" if defined?(Mysql2)}
383
+ #{unless current_adapter == 'sqlite3'
384
+ "add_foreign_key :adverts, :categories, column: :category_id, name: :index_adverts_on_category_id\n" \
385
+ 'add_foreign_key :adverts, :categories, column: :c_id, name: :index_adverts_on_c_id'
386
+ end}
391
387
  EOS
392
388
  )
393
389
 
@@ -397,8 +393,9 @@ RSpec.describe 'DeclareSchema Migration Generator' do
397
393
 
398
394
  # You can avoid generating the index by specifying `index: false`
399
395
 
400
- class Category < ActiveRecord::Base; end
401
- class Advert < ActiveRecord::Base
396
+ class Category < ActiveRecord::Base; end # rubocop:disable Lint/ConstantDefinitionInBlock
397
+
398
+ class Advert < ActiveRecord::Base # rubocop:disable Lint/ConstantDefinitionInBlock
402
399
  declare_schema { }
403
400
  belongs_to :category, index: false
404
401
  end
@@ -406,8 +403,8 @@ RSpec.describe 'DeclareSchema Migration Generator' do
406
403
  expect(Generators::DeclareSchema::Migration::Migrator.run).to(
407
404
  migrate_up(<<~EOS.strip)
408
405
  add_column :adverts, :category_id, :integer, limit: 8, null: false
409
- #{"add_foreign_key :adverts, :categories, column: :category_id, name: :index_adverts_on_category_id" if defined?(Mysql2)}
410
- EOS
406
+ #{'add_foreign_key :adverts, :categories, column: :category_id, name: :index_adverts_on_category_id' unless current_adapter == 'sqlite3'}
407
+ EOS
411
408
  )
412
409
 
413
410
  Advert.field_specs.delete(:category_id)
@@ -416,10 +413,13 @@ RSpec.describe 'DeclareSchema Migration Generator' do
416
413
 
417
414
  # You can specify the index name with index: 'name' [deprecated]
418
415
 
419
- expect(ActiveSupport::Deprecation).to receive(:warn).with(/belongs_to :category, index: 'name' is deprecated; use index: \{ name: 'name' \} instead/i)
416
+ expect(DeclareSchema.deprecator).to(
417
+ receive(:warn).with(/belongs_to :category, index: 'name' is deprecated; use index: \{ name: 'name' \} instead/i)
418
+ )
419
+
420
+ class Category < ActiveRecord::Base; end # rubocop:disable Lint/ConstantDefinitionInBlock
420
421
 
421
- class Category < ActiveRecord::Base; end
422
- class Advert < ActiveRecord::Base
422
+ class Advert < ActiveRecord::Base # rubocop:disable Lint/ConstantDefinitionInBlock
423
423
  declare_schema { }
424
424
  belongs_to :category, index: 'my_index'
425
425
  end
@@ -428,7 +428,7 @@ RSpec.describe 'DeclareSchema Migration Generator' do
428
428
  migrate_up(<<~EOS.strip)
429
429
  add_column :adverts, :category_id, :integer, limit: 8, null: false
430
430
  add_index :adverts, [:category_id], name: :my_index
431
- #{"add_foreign_key :adverts, :categories, column: :category_id, name: :my_index" if defined?(Mysql2)}
431
+ #{'add_foreign_key :adverts, :categories, column: :category_id, name: :my_index' unless current_adapter == 'sqlite3'}
432
432
  EOS
433
433
  )
434
434
 
@@ -438,8 +438,9 @@ RSpec.describe 'DeclareSchema Migration Generator' do
438
438
 
439
439
  # You can specify the index name with index: { name: }'name', unique: true|false }
440
440
 
441
- class Category < ActiveRecord::Base; end
442
- class Advert < ActiveRecord::Base
441
+ class Category < ActiveRecord::Base; end # rubocop:disable Lint/ConstantDefinitionInBlock
442
+
443
+ class Advert < ActiveRecord::Base # rubocop:disable Lint/ConstantDefinitionInBlock
443
444
  declare_schema { }
444
445
  belongs_to :category, index: { name: 'my_index', unique: false }
445
446
  end
@@ -448,7 +449,7 @@ RSpec.describe 'DeclareSchema Migration Generator' do
448
449
  migrate_up(<<~EOS.strip)
449
450
  add_column :adverts, :category_id, :integer, limit: 8, null: false
450
451
  add_index :adverts, [:category_id], name: :my_index
451
- #{"add_foreign_key :adverts, :categories, column: :category_id, name: :my_index" if defined?(Mysql2)}
452
+ #{'add_foreign_key :adverts, :categories, column: :category_id, name: :my_index' unless current_adapter == 'sqlite3'}
452
453
  EOS
453
454
  )
454
455
 
@@ -461,7 +462,7 @@ RSpec.describe 'DeclareSchema Migration Generator' do
461
462
  # `updated_at` and `created_at` can be declared with the shorthand `timestamps`.
462
463
  # Similarly, `lock_version` can be declared with the "shorthand" `optimimistic_lock`.
463
464
 
464
- class Advert < ActiveRecord::Base
465
+ class Advert < ActiveRecord::Base # rubocop:disable Lint/ConstantDefinitionInBlock
465
466
  declare_schema do
466
467
  timestamps
467
468
  optimistic_lock
@@ -474,10 +475,10 @@ RSpec.describe 'DeclareSchema Migration Generator' do
474
475
  add_column :adverts, :updated_at, :datetime, null: true
475
476
  add_column :adverts, :lock_version, :integer#{lock_version_limit}, null: false, default: 1
476
477
  EOS
477
- .and migrate_down(<<~EOS.strip)
478
- remove_column :adverts, :lock_version
479
- remove_column :adverts, :updated_at
480
- remove_column :adverts, :created_at
478
+ .and(migrate_down(<<~EOS.strip))
479
+ remove_column :adverts, :lock_version
480
+ remove_column :adverts, :updated_at
481
+ remove_column :adverts, :created_at
481
482
  EOS
482
483
  )
483
484
 
@@ -489,10 +490,14 @@ RSpec.describe 'DeclareSchema Migration Generator' do
489
490
 
490
491
  # You can add an index to a field definition
491
492
 
492
- expect(ActiveSupport::Deprecation).to receive(:warn).with(/belongs_to :category, index: 'name' is deprecated; use index: \{ name: 'name' \} instead/i)
493
- expect(ActiveSupport::Deprecation).to receive(:warn).with(/belongs_to :category, unique: true\|false is deprecated; use index: \{ unique: true\|false \} instead/i)
493
+ expect(DeclareSchema.deprecator).to(
494
+ receive(:warn).with(/belongs_to :category, index: 'name' is deprecated; use index: \{ name: 'name' \} instead/i)
495
+ )
496
+ expect(DeclareSchema.deprecator).to(
497
+ receive(:warn).with(/belongs_to :category, unique: true\|false is deprecated; use index: \{ unique: true\|false \} instead/i)
498
+ )
494
499
 
495
- class Advert < ActiveRecord::Base
500
+ class Advert < ActiveRecord::Base # rubocop:disable Lint/ConstantDefinitionInBlock
496
501
  declare_schema do
497
502
  string :title, index: true, limit: 250, null: true
498
503
  end
@@ -505,7 +510,7 @@ RSpec.describe 'DeclareSchema Migration Generator' do
505
510
  add_column :adverts, :category_id, :integer, limit: 8, null: false
506
511
  add_index :adverts, [:title], name: :index_adverts_on_title
507
512
  add_index :adverts, [:category_id], name: :my_index
508
- #{"add_foreign_key :adverts, :categories, column: :category_id, name: :my_index" if defined?(Mysql2)}
513
+ #{'add_foreign_key :adverts, :categories, column: :category_id, name: :my_index' unless current_adapter == 'sqlite3'}
509
514
  EOS
510
515
  )
511
516
 
@@ -515,7 +520,7 @@ RSpec.describe 'DeclareSchema Migration Generator' do
515
520
 
516
521
  # You can ask for a unique index (deprecated syntax; use index: { unique: true } instead).
517
522
 
518
- class Advert < ActiveRecord::Base
523
+ class Advert < ActiveRecord::Base # rubocop:disable Lint/ConstantDefinitionInBlock
519
524
  declare_schema do
520
525
  string :title, index: true, unique: true, null: true, limit: 250
521
526
  end
@@ -532,7 +537,7 @@ RSpec.describe 'DeclareSchema Migration Generator' do
532
537
 
533
538
  # You can specify the name for the index
534
539
 
535
- class Advert < ActiveRecord::Base
540
+ class Advert < ActiveRecord::Base # rubocop:disable Lint/ConstantDefinitionInBlock
536
541
  declare_schema do
537
542
  string :title, index: 'my_index', limit: 250, null: true
538
543
  end
@@ -549,7 +554,7 @@ RSpec.describe 'DeclareSchema Migration Generator' do
549
554
 
550
555
  # You can ask for an index outside of the fields block
551
556
 
552
- class Advert < ActiveRecord::Base
557
+ class Advert < ActiveRecord::Base # rubocop:disable Lint/ConstantDefinitionInBlock
553
558
  declare_schema do
554
559
  string :title, limit: 250, null: true
555
560
  end
@@ -567,7 +572,7 @@ RSpec.describe 'DeclareSchema Migration Generator' do
567
572
 
568
573
  # The available options for the index function are :unique, :name, :where, and :length.
569
574
 
570
- class Advert < ActiveRecord::Base
575
+ class Advert < ActiveRecord::Base # rubocop:disable Lint/ConstantDefinitionInBlock
571
576
  index :title, unique: false, name: 'my_index', length: 10
572
577
  end
573
578
 
@@ -582,7 +587,7 @@ RSpec.describe 'DeclareSchema Migration Generator' do
582
587
 
583
588
  # You can create an index on more than one field
584
589
 
585
- class Advert < ActiveRecord::Base
590
+ class Advert < ActiveRecord::Base # rubocop:disable Lint/ConstantDefinitionInBlock
586
591
  index [:title, :category_id]
587
592
  end
588
593
 
@@ -603,7 +608,7 @@ RSpec.describe 'DeclareSchema Migration Generator' do
603
608
 
604
609
  # The migration generator respects the `set_table_name` declaration, although as before, we need to explicitly tell the generator that we want a rename rather than a create and a drop.
605
610
 
606
- class Advert < ActiveRecord::Base
611
+ class Advert < ActiveRecord::Base # rubocop:disable Lint/ConstantDefinitionInBlock
607
612
  self.table_name = "ads"
608
613
  declare_schema do
609
614
  string :title, limit: 250, null: true
@@ -618,20 +623,20 @@ RSpec.describe 'DeclareSchema Migration Generator' do
618
623
  migrate_up(<<~EOS.strip)
619
624
  rename_table :adverts, :ads
620
625
  add_column :ads, :title, :string, limit: 250, null: true#{charset_and_collation}
621
- add_column :ads, :body, :text#{', limit: 4294967295' if defined?(Mysql2)}, null: true#{charset_and_collation}
626
+ add_column :ads, :body, :text#{', limit: 4294967295' if current_adapter == 'mysql2'}, null: true#{charset_and_collation}
627
+ EOS
628
+ .and(migrate_down(<<~EOS.strip))
629
+ remove_column :ads, :body
630
+ remove_column :ads, :title
631
+ rename_table :ads, :adverts
622
632
  EOS
623
- .and migrate_down(<<~EOS.strip)
624
- remove_column :ads, :body
625
- remove_column :ads, :title
626
- rename_table :ads, :adverts
627
- EOS
628
633
  )
629
634
 
630
635
  # Set the table name back to what it should be and confirm we're in sync:
631
636
 
632
637
  nuke_model_class(Advert)
633
638
 
634
- class Advert < ActiveRecord::Base
639
+ class Advert < ActiveRecord::Base # rubocop:disable Lint/ConstantDefinitionInBlock
635
640
  self.table_name = "adverts"
636
641
  end
637
642
 
@@ -643,7 +648,7 @@ RSpec.describe 'DeclareSchema Migration Generator' do
643
648
 
644
649
  nuke_model_class(Advert)
645
650
 
646
- class Advertisement < ActiveRecord::Base
651
+ class Advertisement < ActiveRecord::Base # rubocop:disable Lint/ConstantDefinitionInBlock
647
652
  declare_schema do
648
653
  string :title, limit: 250, null: true
649
654
  text :body, null: true
@@ -654,14 +659,14 @@ RSpec.describe 'DeclareSchema Migration Generator' do
654
659
  migrate_up(<<~EOS.strip)
655
660
  rename_table :adverts, :advertisements
656
661
  add_column :advertisements, :title, :string, limit: 250, null: true#{charset_and_collation}
657
- add_column :advertisements, :body, :text#{', limit: 4294967295' if defined?(Mysql2)}, null: true#{charset_and_collation}
662
+ add_column :advertisements, :body, :text#{', limit: 4294967295' if current_adapter == 'mysql2'}, null: true#{charset_and_collation}
658
663
  remove_column :advertisements, :name
659
664
  EOS
660
- .and migrate_down(<<~EOS.strip)
661
- add_column :advertisements, :name, :string, limit: 250, null: true#{charset_and_collation}
662
- remove_column :advertisements, :body
663
- remove_column :advertisements, :title
664
- rename_table :advertisements, :adverts
665
+ .and(migrate_down(<<~EOS.strip))
666
+ add_column :advertisements, :name, :string, limit: 250, null: true#{charset_and_collation}
667
+ remove_column :advertisements, :body
668
+ remove_column :advertisements, :title
669
+ rename_table :advertisements, :adverts
665
670
  EOS
666
671
  )
667
672
 
@@ -677,10 +682,10 @@ RSpec.describe 'DeclareSchema Migration Generator' do
677
682
  migrate_up(<<~EOS.strip)
678
683
  drop_table :adverts
679
684
  EOS
680
- .and migrate_down(<<~EOS.strip)
681
- create_table "adverts"#{table_options}, force: :cascade do |t|
682
- t.string "name", limit: 250#{charset_and_collation}
683
- end
685
+ .and(migrate_down(<<~EOS.strip))
686
+ create_table "adverts"#{table_options}, force: :cascade do |t|
687
+ t.string "name", limit: 250#{charset_and_collation}
688
+ end
684
689
  EOS
685
690
  )
686
691
 
@@ -690,7 +695,7 @@ RSpec.describe 'DeclareSchema Migration Generator' do
690
695
 
691
696
  # Adding a subclass or two should introduce the 'type' column and no other changes
692
697
 
693
- class Advert < ActiveRecord::Base
698
+ class Advert < ActiveRecord::Base # rubocop:disable Lint/ConstantDefinitionInBlock
694
699
  declare_schema do
695
700
  text :body, null: true
696
701
  string :title, default: "Untitled", limit: 250, null: true
@@ -699,9 +704,10 @@ RSpec.describe 'DeclareSchema Migration Generator' do
699
704
  up = Generators::DeclareSchema::Migration::Migrator.run.first
700
705
  ActiveRecord::Migration.class_eval(up)
701
706
 
702
- class FancyAdvert < Advert
707
+ class FancyAdvert < Advert # rubocop:disable Lint/ConstantDefinitionInBlock
703
708
  end
704
- class SuperFancyAdvert < FancyAdvert
709
+
710
+ class SuperFancyAdvert < FancyAdvert # rubocop:disable Lint/ConstantDefinitionInBlock
705
711
  end
706
712
 
707
713
  expect(Generators::DeclareSchema::Migration::Migrator.run.first).to be_present
@@ -712,9 +718,9 @@ RSpec.describe 'DeclareSchema Migration Generator' do
712
718
  add_column :adverts, :type, :string, limit: 250, null: true#{charset_and_collation}
713
719
  add_index :adverts, [:type], name: :on_type
714
720
  EOS
715
- .and migrate_down(<<~EOS.strip)
716
- remove_index :adverts, name: :on_type
717
- remove_column :adverts, :type
721
+ .and(migrate_down(<<~EOS.strip))
722
+ remove_index :adverts, name: :on_type
723
+ remove_column :adverts, :type
718
724
  EOS
719
725
  )
720
726
  end
@@ -734,17 +740,16 @@ RSpec.describe 'DeclareSchema Migration Generator' do
734
740
  Advert.connection.schema_cache.clear!
735
741
  Advert.reset_column_information
736
742
 
737
- expect(Advert.connection.tables - Generators::DeclareSchema::Migration::Migrator.always_ignore_tables).
738
- to eq(["adverts"])
743
+ expect(Advert.connection.tables - Generators::DeclareSchema::Migration::Migrator.always_ignore_tables)
744
+ .to eq(["adverts"])
739
745
  expect(Advert.columns.map(&:name).sort).to eq(["body", "id", "title"])
740
746
  expect(Generators::DeclareSchema::Migration::Migrator.run).to eq(["", ""])
741
747
 
742
-
743
748
  ### Rename a column and change the default
744
749
 
745
750
  Advert.field_specs.clear
746
751
 
747
- class Advert < ActiveRecord::Base
752
+ class Advert < ActiveRecord::Base # rubocop:disable Lint/ConstantDefinitionInBlock
748
753
  declare_schema do
749
754
  string :name, default: "No Name", limit: 250, null: true
750
755
  text :body, null: true
@@ -756,16 +761,16 @@ RSpec.describe 'DeclareSchema Migration Generator' do
756
761
  rename_column :adverts, :title, :name
757
762
  change_column :adverts, :name, :string, limit: 250, null: true, default: "No Name"#{charset_and_collation}
758
763
  EOS
759
- .and migrate_down(<<~EOS.strip)
760
- change_column :adverts, :name, :string, limit: 250, null: true, default: "Untitled"#{charset_and_collation}
761
- rename_column :adverts, :name, :title
764
+ .and(migrate_down(<<~EOS.strip))
765
+ change_column :adverts, :name, :string, limit: 250, null: true, default: "Untitled"#{charset_and_collation}
766
+ rename_column :adverts, :name, :title
762
767
  EOS
763
768
  )
764
769
 
765
770
  ### Rename a table and add a column
766
771
 
767
772
  nuke_model_class(Advert)
768
- class Ad < ActiveRecord::Base
773
+ class Ad < ActiveRecord::Base # rubocop:disable Lint/ConstantDefinitionInBlock
769
774
  declare_schema do
770
775
  string :title, default: "Untitled", limit: 250
771
776
  text :body, null: true
@@ -781,7 +786,7 @@ RSpec.describe 'DeclareSchema Migration Generator' do
781
786
  EOS
782
787
  )
783
788
 
784
- class Advert < ActiveRecord::Base
789
+ class Advert < ActiveRecord::Base # rubocop:disable Lint/ConstantDefinitionInBlock
785
790
  declare_schema do
786
791
  text :body, null: true
787
792
  string :title, default: "Untitled", limit: 250, null: true
@@ -794,7 +799,7 @@ RSpec.describe 'DeclareSchema Migration Generator' do
794
799
 
795
800
  nuke_model_class(Ad)
796
801
 
797
- class Advert < ActiveRecord::Base
802
+ class Advert < ActiveRecord::Base # rubocop:disable Lint/ConstantDefinitionInBlock
798
803
  declare_schema do
799
804
  text :body, null: true
800
805
  end
@@ -808,13 +813,13 @@ RSpec.describe 'DeclareSchema Migration Generator' do
808
813
  )
809
814
 
810
815
  nuke_model_class(Advert)
811
- ActiveRecord::Base.connection.execute("drop table `adverts`;")
816
+ ActiveRecord::Base.connection.execute("DROP TABLE #{ActiveRecord::Base.connection.quote_table_name('adverts')};")
812
817
 
813
818
  ## DSL
814
819
 
815
820
  # The DSL allows lambdas and constants
816
821
 
817
- class User < ActiveRecord::Base
822
+ class User < ActiveRecord::Base # rubocop:disable Lint/ConstantDefinitionInBlock
818
823
  declare_schema do
819
824
  string :company, limit: 250, ruby_default: -> { "BigCorp" }
820
825
  end
@@ -828,14 +833,14 @@ RSpec.describe 'DeclareSchema Migration Generator' do
828
833
 
829
834
  # DeclareSchema can accept a validates hash in the field options.
830
835
 
831
- class Ad < ActiveRecord::Base
836
+ class Ad < ActiveRecord::Base # rubocop:disable Lint/ConstantDefinitionInBlock
832
837
  class << self
833
838
  def validates(field_name, options)
834
839
  end
835
840
  end
836
841
  end
837
842
  expect(Ad).to receive(:validates).with(:company, presence: true, uniqueness: { case_sensitive: false })
838
- class Ad < ActiveRecord::Base
843
+ class Ad < ActiveRecord::Base # rubocop:disable Lint/ConstantDefinitionInBlock
839
844
  declare_schema do
840
845
  string :company, limit: 250, index: true, unique: true, validates: { presence: true, uniqueness: { case_sensitive: false } }
841
846
  end
@@ -848,13 +853,14 @@ RSpec.describe 'DeclareSchema Migration Generator' do
848
853
  # DeclareSchema supports has_and_belongs_to_many relationships and generates the intersection ("join") table
849
854
  # with appropriate primary key, indexes, and foreign keys.
850
855
 
851
- class Advertiser < ActiveRecord::Base
856
+ class Advertiser < ActiveRecord::Base # rubocop:disable Lint/ConstantDefinitionInBlock
852
857
  declare_schema do
853
858
  string :name, limit: 250
854
859
  end
855
860
  has_and_belongs_to_many :creatives
856
861
  end
857
- class Creative < ActiveRecord::Base
862
+
863
+ class Creative < ActiveRecord::Base # rubocop:disable Lint/ConstantDefinitionInBlock
858
864
  declare_schema do
859
865
  string :url, limit: 500
860
866
  end
@@ -868,10 +874,10 @@ RSpec.describe 'DeclareSchema Migration Generator' do
868
874
  t.integer :advertiser_id, limit: 8, null: false
869
875
  t.integer :creative_id, limit: 8, null: false
870
876
  end
871
- create_table :creatives, id: :bigint#{create_table_charset_and_collation} do |t|
877
+ create_table :creatives, id: #{primary_key_type}#{create_table_charset_and_collation} do |t|
872
878
  t.string :url, limit: 500, null: false#{charset_and_collation}
873
879
  end
874
- create_table :advertisers, id: :bigint#{create_table_charset_and_collation} do |t|
880
+ create_table :advertisers, id: #{primary_key_type}#{create_table_charset_and_collation} do |t|
875
881
  t.string :name, limit: 250, null: false#{charset_and_collation}
876
882
  end
877
883
  add_index :advertisers_creatives, [:creative_id], name: :index_advertisers_creatives_on_creative_id
@@ -880,14 +886,14 @@ RSpec.describe 'DeclareSchema Migration Generator' do
880
886
  EOS
881
887
  else
882
888
  migrate_up(<<~EOS.strip)
883
- create_table :advertisers, id: :bigint#{create_table_charset_and_collation} do |t|
889
+ create_table :advertisers, id: #{primary_key_type}#{create_table_charset_and_collation} do |t|
884
890
  t.string :name, limit: 250, null: false#{charset_and_collation}
885
891
  end
886
892
  create_table :advertisers_creatives, primary_key: [:advertiser_id, :creative_id]#{create_table_charset_and_collation} do |t|
887
893
  t.integer :advertiser_id, limit: 8, null: false
888
894
  t.integer :creative_id, limit: 8, null: false
889
895
  end
890
- create_table :creatives, id: :bigint#{create_table_charset_and_collation} do |t|
896
+ create_table :creatives, id: #{primary_key_type}#{create_table_charset_and_collation} do |t|
891
897
  t.string :url, limit: 500, null: false#{charset_and_collation}
892
898
  end
893
899
  add_index :advertisers_creatives, [:creative_id], name: :index_advertisers_creatives_on_creative_id
@@ -903,19 +909,25 @@ RSpec.describe 'DeclareSchema Migration Generator' do
903
909
  end
904
910
 
905
911
  context 'models with the same parent foreign key relation' do
912
+ include_context 'skip if' do
913
+ let(:adapter) { 'sqlite3' }
914
+ end
915
+
906
916
  before do
907
- class Category < ActiveRecord::Base
917
+ class Category < ActiveRecord::Base # rubocop:disable Lint/ConstantDefinitionInBlock
908
918
  declare_schema do
909
919
  string :name, limit: 250, null: true
910
920
  end
911
921
  end
912
- class Advertiser < ActiveRecord::Base
922
+
923
+ class Advertiser < ActiveRecord::Base # rubocop:disable Lint/ConstantDefinitionInBlock
913
924
  declare_schema do
914
925
  string :name, limit: 250, null: true
915
926
  end
916
927
  belongs_to :category, limit: 8
917
928
  end
918
- class Affiliate < ActiveRecord::Base
929
+
930
+ class Affiliate < ActiveRecord::Base # rubocop:disable Lint/ConstantDefinitionInBlock
919
931
  declare_schema do
920
932
  string :name, limit: 250, null: true
921
933
  end
@@ -923,56 +935,27 @@ RSpec.describe 'DeclareSchema Migration Generator' do
923
935
  end
924
936
  end
925
937
 
938
+ let(:fixture_file_path) do
939
+ if ActiveSupport.version >= Gem::Version.new('7.0.0') && Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('3.1.0')
940
+ "../../fixtures/migrations/#{current_adapter}/will_generate_unique_constraint_names_rails_7.txt"
941
+ else
942
+ "../../fixtures/migrations/#{current_adapter}/will_generate_unique_constraint_names_rails_6.txt"
943
+ end
944
+ end
945
+
926
946
  it 'will generate unique constraint names' do
927
- expect(Generators::DeclareSchema::Migration::Migrator.run).to(
928
- if ActiveSupport.version >= Gem::Version.new('7.0.0') && Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('3.1.0')
929
- migrate_up(<<~EOS.strip)
930
- create_table :affiliates, id: :bigint, options: "CHARACTER SET utf8mb4 COLLATE utf8mb4_bin" do |t|
931
- t.string :name, limit: 250, null: true, charset: "utf8mb4", collation: "utf8mb4_bin"
932
- t.integer :category_id, limit: 8, null: false
933
- end
934
- create_table :advertisers, id: :bigint, options: "CHARACTER SET utf8mb4 COLLATE utf8mb4_bin" do |t|
935
- t.string :name, limit: 250, null: true, charset: "utf8mb4", collation: "utf8mb4_bin"
936
- t.integer :category_id, limit: 8, null: false
937
- end
938
- create_table :categories, id: :bigint, options: "CHARACTER SET utf8mb4 COLLATE utf8mb4_bin" do |t|
939
- t.string :name, limit: 250, null: true, charset: "utf8mb4", collation: "utf8mb4_bin"
940
- end
941
- add_index :affiliates, [:category_id], name: :index_affiliates_on_category_id
942
- add_index :advertisers, [:category_id], name: :index_advertisers_on_category_id
943
- add_foreign_key :affiliates, :categories, column: :category_id, name: :index_affiliates_on_category_id
944
- add_foreign_key :advertisers, :categories, column: :category_id, name: :index_advertisers_on_category_id
945
- EOS
946
- else
947
- migrate_up(<<~EOS.strip)
948
- create_table :categories, id: :bigint, options: "CHARACTER SET utf8mb4 COLLATE utf8mb4_bin" do |t|
949
- t.string :name, limit: 250, null: true, charset: "utf8mb4", collation: "utf8mb4_bin"
950
- end
951
- create_table :advertisers, id: :bigint, options: "CHARACTER SET utf8mb4 COLLATE utf8mb4_bin" do |t|
952
- t.string :name, limit: 250, null: true, charset: "utf8mb4", collation: "utf8mb4_bin"
953
- t.integer :category_id, limit: 8, null: false
954
- end
955
- create_table :affiliates, id: :bigint, options: "CHARACTER SET utf8mb4 COLLATE utf8mb4_bin" do |t|
956
- t.string :name, limit: 250, null: true, charset: "utf8mb4", collation: "utf8mb4_bin"
957
- t.integer :category_id, limit: 8, null: false
958
- end
959
- add_index :advertisers, [:category_id], name: :index_advertisers_on_category_id
960
- add_index :affiliates, [:category_id], name: :index_affiliates_on_category_id
961
- add_foreign_key :advertisers, :categories, column: :category_id, name: :index_advertisers_on_category_id
962
- add_foreign_key :affiliates, :categories, column: :category_id, name: :index_affiliates_on_category_id
963
- EOS
964
- end
965
- )
947
+ expect(Generators::DeclareSchema::Migration::Migrator.run).to(migrate_up(File.read(File.expand_path(fixture_file_path, __dir__)).chomp))
948
+
966
949
  migrate
967
950
 
968
951
  nuke_model_class(Advertiser)
969
952
  nuke_model_class(Affiliate)
970
953
  end
971
- end if !defined?(SQLite3)
954
+ end
972
955
 
973
956
  describe 'serialize' do
974
957
  before do
975
- class Ad < ActiveRecord::Base
958
+ class Ad < ActiveRecord::Base # rubocop:disable Lint/ConstantDefinitionInBlock
976
959
  @serialize_args = []
977
960
 
978
961
  class << self
@@ -987,7 +970,7 @@ RSpec.describe 'DeclareSchema Migration Generator' do
987
970
 
988
971
  describe 'untyped' do
989
972
  it 'allows serialize: true' do
990
- class Ad < ActiveRecord::Base
973
+ class Ad < ActiveRecord::Base # rubocop:disable Lint/ConstantDefinitionInBlock
991
974
  declare_schema do
992
975
  text :allow_list, limit: 0xFFFF, serialize: true
993
976
  end
@@ -997,7 +980,7 @@ RSpec.describe 'DeclareSchema Migration Generator' do
997
980
  end
998
981
 
999
982
  it 'converts defaults with .to_yaml' do
1000
- class Ad < ActiveRecord::Base
983
+ class Ad < ActiveRecord::Base # rubocop:disable Lint/ConstantDefinitionInBlock
1001
984
  declare_schema do
1002
985
  string :allow_list, limit: 250, serialize: true, null: true, default: []
1003
986
  string :allow_hash, limit: 250, serialize: true, null: true, default: {}
@@ -1015,7 +998,7 @@ RSpec.describe 'DeclareSchema Migration Generator' do
1015
998
 
1016
999
  describe 'Array' do
1017
1000
  it 'allows serialize: Array' do
1018
- class Ad < ActiveRecord::Base
1001
+ class Ad < ActiveRecord::Base # rubocop:disable Lint/ConstantDefinitionInBlock
1019
1002
  declare_schema do
1020
1003
  string :allow_list, limit: 250, serialize: Array, null: true
1021
1004
  end
@@ -1025,7 +1008,7 @@ RSpec.describe 'DeclareSchema Migration Generator' do
1025
1008
  end
1026
1009
 
1027
1010
  it 'allows Array defaults' do
1028
- class Ad < ActiveRecord::Base
1011
+ class Ad < ActiveRecord::Base # rubocop:disable Lint/ConstantDefinitionInBlock
1029
1012
  declare_schema do
1030
1013
  string :allow_list, limit: 250, serialize: Array, null: true, default: [2]
1031
1014
  string :allow_string, limit: 250, serialize: Array, null: true, default: ['abc']
@@ -1043,7 +1026,7 @@ RSpec.describe 'DeclareSchema Migration Generator' do
1043
1026
 
1044
1027
  describe 'Hash' do
1045
1028
  it 'allows serialize: Hash' do
1046
- class Ad < ActiveRecord::Base
1029
+ class Ad < ActiveRecord::Base # rubocop:disable Lint/ConstantDefinitionInBlock
1047
1030
  declare_schema do
1048
1031
  string :allow_list, limit: 250, serialize: Hash, null: true
1049
1032
  end
@@ -1053,7 +1036,7 @@ RSpec.describe 'DeclareSchema Migration Generator' do
1053
1036
  end
1054
1037
 
1055
1038
  it 'allows Hash defaults' do
1056
- class Ad < ActiveRecord::Base
1039
+ class Ad < ActiveRecord::Base # rubocop:disable Lint/ConstantDefinitionInBlock
1057
1040
  declare_schema do
1058
1041
  string :allow_loc, limit: 250, serialize: Hash, null: true, default: { 'state' => 'CA' }
1059
1042
  string :allow_hash, limit: 250, serialize: Hash, null: true, default: {}
@@ -1069,7 +1052,7 @@ RSpec.describe 'DeclareSchema Migration Generator' do
1069
1052
 
1070
1053
  describe 'JSON' do
1071
1054
  it 'allows serialize: JSON' do
1072
- class Ad < ActiveRecord::Base
1055
+ class Ad < ActiveRecord::Base # rubocop:disable Lint/ConstantDefinitionInBlock
1073
1056
  declare_schema do
1074
1057
  string :allow_list, limit: 250, serialize: JSON
1075
1058
  end
@@ -1079,7 +1062,7 @@ RSpec.describe 'DeclareSchema Migration Generator' do
1079
1062
  end
1080
1063
 
1081
1064
  it 'allows JSON defaults' do
1082
- class Ad < ActiveRecord::Base
1065
+ class Ad < ActiveRecord::Base # rubocop:disable Lint/ConstantDefinitionInBlock
1083
1066
  declare_schema do
1084
1067
  string :allow_hash, limit: 250, serialize: JSON, null: true, default: { 'state' => 'CA' }
1085
1068
  string :allow_empty_array, limit: 250, serialize: JSON, null: true, default: []
@@ -1095,7 +1078,7 @@ RSpec.describe 'DeclareSchema Migration Generator' do
1095
1078
  end
1096
1079
  end
1097
1080
 
1098
- class ValueClass
1081
+ class ValueClass # rubocop:disable Lint/ConstantDefinitionInBlock
1099
1082
  delegate :present?, :inspect, to: :@value
1100
1083
 
1101
1084
  def initialize(value)
@@ -1119,7 +1102,7 @@ RSpec.describe 'DeclareSchema Migration Generator' do
1119
1102
 
1120
1103
  describe 'custom coder' do
1121
1104
  it 'allows serialize: ValueClass' do
1122
- class Ad < ActiveRecord::Base
1105
+ class Ad < ActiveRecord::Base # rubocop:disable Lint/ConstantDefinitionInBlock
1123
1106
  declare_schema do
1124
1107
  string :allow_list, limit: 250, serialize: ValueClass
1125
1108
  end
@@ -1129,7 +1112,7 @@ RSpec.describe 'DeclareSchema Migration Generator' do
1129
1112
  end
1130
1113
 
1131
1114
  it 'allows ValueClass defaults' do
1132
- class Ad < ActiveRecord::Base
1115
+ class Ad < ActiveRecord::Base # rubocop:disable Lint/ConstantDefinitionInBlock
1133
1116
  declare_schema do
1134
1117
  string :allow_hash, limit: 250, serialize: ValueClass, null: true, default: ValueClass.new([2])
1135
1118
  string :allow_empty_array, limit: 250, serialize: ValueClass, null: true, default: ValueClass.new([])
@@ -1145,7 +1128,7 @@ RSpec.describe 'DeclareSchema Migration Generator' do
1145
1128
 
1146
1129
  it 'disallows serialize: with a non-string column type' do
1147
1130
  expect do
1148
- class Ad < ActiveRecord::Base
1131
+ class Ad < ActiveRecord::Base # rubocop:disable Lint/ConstantDefinitionInBlock
1149
1132
  declare_schema do
1150
1133
  integer :allow_list, limit: 8, serialize: true
1151
1134
  end
@@ -1168,7 +1151,7 @@ RSpec.describe 'DeclareSchema Migration Generator' do
1168
1151
  end
1169
1152
  end
1170
1153
 
1171
- class Advert < ActiveRecord::Base
1154
+ class Advert < ActiveRecord::Base # rubocop:disable Lint/ConstantDefinitionInBlock
1172
1155
  declare_schema do
1173
1156
  string :name, limit: 250, null: true
1174
1157
  integer :category_id, limit: 8
@@ -1180,7 +1163,7 @@ RSpec.describe 'DeclareSchema Migration Generator' do
1180
1163
  end
1181
1164
 
1182
1165
  it 'passes through optional: when given' do
1183
- class AdvertBelongsTo < ActiveRecord::Base
1166
+ class AdvertBelongsTo < ActiveRecord::Base # rubocop:disable Lint/ConstantDefinitionInBlock
1184
1167
  self.table_name = 'adverts'
1185
1168
  declare_schema { }
1186
1169
  reset_column_information
@@ -1191,7 +1174,7 @@ RSpec.describe 'DeclareSchema Migration Generator' do
1191
1174
 
1192
1175
  describe 'contradictory settings' do # contradictory settings are ok--for example, during migration
1193
1176
  it 'passes through optional: true, null: false' do
1194
- class AdvertBelongsTo < ActiveRecord::Base
1177
+ class AdvertBelongsTo < ActiveRecord::Base # rubocop:disable Lint/ConstantDefinitionInBlock
1195
1178
  self.table_name = 'adverts'
1196
1179
  declare_schema { }
1197
1180
  reset_column_information
@@ -1202,7 +1185,7 @@ RSpec.describe 'DeclareSchema Migration Generator' do
1202
1185
  end
1203
1186
 
1204
1187
  it 'passes through optional: false, null: true' do
1205
- class AdvertBelongsTo < ActiveRecord::Base
1188
+ class AdvertBelongsTo < ActiveRecord::Base # rubocop:disable Lint/ConstantDefinitionInBlock
1206
1189
  self.table_name = 'adverts'
1207
1190
  declare_schema { }
1208
1191
  reset_column_information
@@ -1216,7 +1199,7 @@ RSpec.describe 'DeclareSchema Migration Generator' do
1216
1199
  [false, true].each do |nullable|
1217
1200
  context "nullable=#{nullable}" do
1218
1201
  it 'infers optional: from null:' do
1219
- eval <<~EOS
1202
+ eval <<~EOS # rubocop:disable Style/EvalWithLocation,Security/Eval
1220
1203
  class AdvertBelongsTo < ActiveRecord::Base
1221
1204
  declare_schema { }
1222
1205
  belongs_to :ad_category, null: #{nullable}
@@ -1227,7 +1210,7 @@ RSpec.describe 'DeclareSchema Migration Generator' do
1227
1210
  end
1228
1211
 
1229
1212
  it 'infers null: from optional:' do
1230
- eval <<~EOS
1213
+ eval <<~EOS # rubocop:disable Style/EvalWithLocation,Security/Eval
1231
1214
  class AdvertBelongsTo < ActiveRecord::Base
1232
1215
  declare_schema { }
1233
1216
  belongs_to :ad_category, optional: #{nullable}
@@ -1240,8 +1223,8 @@ RSpec.describe 'DeclareSchema Migration Generator' do
1240
1223
  end
1241
1224
 
1242
1225
  it 'deprecates limit:' do
1243
- expect(ActiveSupport::Deprecation).to receive(:warn).with("belongs_to :ad_category, limit: is deprecated since it is now inferred")
1244
- eval <<~EOS
1226
+ expect(DeclareSchema.deprecator).to receive(:warn).with("belongs_to :ad_category, limit: is deprecated since it is now inferred")
1227
+ eval <<~EOS # rubocop:disable Style/EvalWithLocation
1245
1228
  class UsingLimit < ActiveRecord::Base
1246
1229
  declare_schema { }
1247
1230
  belongs_to :ad_category, limit: 4
@@ -1252,18 +1235,21 @@ RSpec.describe 'DeclareSchema Migration Generator' do
1252
1235
 
1253
1236
  context 'when parent object PKs have different limits' do
1254
1237
  before do
1255
- class IdDefault < ActiveRecord::Base
1238
+ class IdDefault < ActiveRecord::Base # rubocop:disable Lint/ConstantDefinitionInBlock
1256
1239
  declare_schema { }
1257
1240
  end
1258
- class Id4 < ActiveRecord::Base
1241
+
1242
+ class Id4 < ActiveRecord::Base # rubocop:disable Lint/ConstantDefinitionInBlock
1259
1243
  declare_schema id: :integer do
1260
1244
  end
1261
1245
  end
1262
- class Id8 < ActiveRecord::Base
1246
+
1247
+ class Id8 < ActiveRecord::Base # rubocop:disable Lint/ConstantDefinitionInBlock
1263
1248
  declare_schema id: :bigint do
1264
1249
  end
1265
1250
  end
1266
- class Fk < ActiveRecord::Base
1251
+
1252
+ class Fk < ActiveRecord::Base # rubocop:disable Lint/ConstantDefinitionInBlock
1267
1253
  declare_schema { }
1268
1254
  belongs_to :id_default
1269
1255
  belongs_to :id4
@@ -1276,7 +1262,12 @@ RSpec.describe 'DeclareSchema Migration Generator' do
1276
1262
 
1277
1263
  create_id4_defaults = up.split("\n").grep(/create_table :id_defaults/).first
1278
1264
  expect(create_id4_defaults).to be, up
1279
- expect(create_id4_defaults).to match(/, id: :bigint/)
1265
+ case current_adapter
1266
+ when 'postgresql'
1267
+ expect(create_id4_defaults).to match(/, id: :bigserial/)
1268
+ else
1269
+ expect(create_id4_defaults).to match(/, id: :bigint/)
1270
+ end
1280
1271
 
1281
1272
  create_id4s = up.split("\n").grep(/create_table :id4s/).first
1282
1273
  expect(create_id4s).to be, up
@@ -1291,7 +1282,7 @@ RSpec.describe 'DeclareSchema Migration Generator' do
1291
1282
  up = Generators::DeclareSchema::Migration::Migrator.run.first
1292
1283
 
1293
1284
  create_fks = up.split("\n").grep(/t\.integer /).map { |command| command.gsub(', null: false', '').gsub(/^ +/, '') }
1294
- if defined?(SQLite3)
1285
+ if current_adapter == 'sqlite3'
1295
1286
  create_fks.map! { |command| command.gsub(/limit: [a-z0-9]+/, 'limit: X') }
1296
1287
  expect(create_fks).to eq([
1297
1288
  't.integer :id_default_id, limit: X',
@@ -1317,20 +1308,22 @@ RSpec.describe 'DeclareSchema Migration Generator' do
1317
1308
  nuke_model_class(Fk)
1318
1309
  ActiveRecord::Base.connection.schema_cache.clear!
1319
1310
 
1320
-
1321
- class NewIdDefault < ActiveRecord::Base
1311
+ class NewIdDefault < ActiveRecord::Base # rubocop:disable Lint/ConstantDefinitionInBlock
1322
1312
  self.table_name = 'id_defaults'
1323
1313
  declare_schema { }
1324
1314
  end
1325
- class NewId4 < ActiveRecord::Base
1315
+
1316
+ class NewId4 < ActiveRecord::Base # rubocop:disable Lint/ConstantDefinitionInBlock
1326
1317
  self.table_name = 'id4s'
1327
1318
  declare_schema { }
1328
1319
  end
1329
- class NewId8 < ActiveRecord::Base
1320
+
1321
+ class NewId8 < ActiveRecord::Base # rubocop:disable Lint/ConstantDefinitionInBlock
1330
1322
  self.table_name = 'id8s'
1331
1323
  declare_schema { }
1332
1324
  end
1333
- class NewFk < ActiveRecord::Base
1325
+
1326
+ class NewFk < ActiveRecord::Base # rubocop:disable Lint/ConstantDefinitionInBlock
1334
1327
  declare_schema { }
1335
1328
  belongs_to :new_id_default
1336
1329
  belongs_to :new_id4
@@ -1342,7 +1335,7 @@ RSpec.describe 'DeclareSchema Migration Generator' do
1342
1335
  up = Generators::DeclareSchema::Migration::Migrator.run.first
1343
1336
 
1344
1337
  create_fks = up.split("\n").grep(/t\.integer /).map { |command| command.gsub(', null: false', '').gsub(/^ +/, '') }
1345
- if defined?(SQLite3)
1338
+ if current_adapter == 'sqlite3'
1346
1339
  create_fks.map! { |command| command.gsub(/limit: [a-z0-9]+/, 'limit: X') }
1347
1340
  expect(create_fks).to eq([
1348
1341
  't.integer :new_id_default_id, limit: X',
@@ -1364,7 +1357,7 @@ RSpec.describe 'DeclareSchema Migration Generator' do
1364
1357
 
1365
1358
  describe 'migration base class' do
1366
1359
  it 'adapts to Rails 4' do
1367
- class Advert < active_record_base_class.constantize
1360
+ class Advert < active_record_base_class.constantize # rubocop:disable Lint/ConstantDefinitionInBlock
1368
1361
  declare_schema do
1369
1362
  string :title, limit: 100
1370
1363
  end
@@ -1384,7 +1377,7 @@ RSpec.describe 'DeclareSchema Migration Generator' do
1384
1377
 
1385
1378
  context 'Does not generate migrations' do
1386
1379
  it 'for aliased fields bigint -> integer limit 8' do
1387
- class Advert < active_record_base_class.constantize
1380
+ class Advert < active_record_base_class.constantize # rubocop:disable Lint/ConstantDefinitionInBlock
1388
1381
  declare_schema do
1389
1382
  bigint :price
1390
1383
  end
@@ -1395,7 +1388,7 @@ RSpec.describe 'DeclareSchema Migration Generator' do
1395
1388
  migrations = Dir.glob('db/migrate/*declare_schema_migration*.rb')
1396
1389
  expect(migrations.size).to eq(1), migrations.inspect
1397
1390
 
1398
- class Advert < active_record_base_class.constantize
1391
+ class Advert < active_record_base_class.constantize # rubocop:disable Lint/ConstantDefinitionInBlock
1399
1392
  declare_schema do
1400
1393
  integer :price, limit: 8
1401
1394
  end
@@ -1409,7 +1402,7 @@ RSpec.describe 'DeclareSchema Migration Generator' do
1409
1402
  let(:default_schema_block) { nil }
1410
1403
  let(:declare_model) do
1411
1404
  -> do
1412
- class Advert < active_record_base_class.constantize
1405
+ class Advert < active_record_base_class.constantize # rubocop:disable Lint/ConstantDefinitionInBlock
1413
1406
  declare_schema do
1414
1407
  integer :price, limit: 8
1415
1408
  end
@@ -1449,7 +1442,7 @@ RSpec.describe 'DeclareSchema Migration Generator' do
1449
1442
 
1450
1443
  context 'and the model sets default_schema: false' do
1451
1444
  before do
1452
- class Advert < active_record_base_class.constantize
1445
+ class Advert < active_record_base_class.constantize # rubocop:disable Lint/ConstantDefinitionInBlock
1453
1446
  declare_schema default_schema: false do
1454
1447
  integer :price, limit: 8
1455
1448
  end
@@ -1463,7 +1456,7 @@ RSpec.describe 'DeclareSchema Migration Generator' do
1463
1456
 
1464
1457
  context 'and the block has redundant fields' do
1465
1458
  before do
1466
- class Advert < active_record_base_class.constantize
1459
+ class Advert < active_record_base_class.constantize # rubocop:disable Lint/ConstantDefinitionInBlock
1467
1460
  declare_schema do
1468
1461
  integer :price, limit: 8
1469
1462
  timestamps
@@ -1480,7 +1473,7 @@ RSpec.describe 'DeclareSchema Migration Generator' do
1480
1473
 
1481
1474
  context 'index' do
1482
1475
  before do
1483
- class Advert < active_record_base_class.constantize
1476
+ class Advert < active_record_base_class.constantize # rubocop:disable Lint/ConstantDefinitionInBlock
1484
1477
  declare_schema { }
1485
1478
  belongs_to :ad_category
1486
1479
  end
@@ -1506,7 +1499,7 @@ RSpec.describe 'DeclareSchema Migration Generator' do
1506
1499
 
1507
1500
  context 'constraint' do
1508
1501
  before do
1509
- class Advert < active_record_base_class.constantize
1502
+ class Advert < active_record_base_class.constantize # rubocop:disable Lint/ConstantDefinitionInBlock
1510
1503
  declare_schema { }
1511
1504
  belongs_to :ad_category
1512
1505
  end
@@ -1514,13 +1507,14 @@ RSpec.describe 'DeclareSchema Migration Generator' do
1514
1507
 
1515
1508
  it "when exactly equal, it is idempotent and doesn't raise" do
1516
1509
  expect do
1517
- Advert.constraint :ad_category_id, parent_table_name: 'ad_categories', constraint_name: :index_adverts_on_ad_category_id, parent_class_name: 'AdCategory'
1510
+ Advert.constraint(:ad_category_id, parent_table_name: 'ad_categories',
1511
+ constraint_name: :index_adverts_on_ad_category_id, parent_class_name: 'AdCategory')
1518
1512
  end.to_not change { Advert.index_definitions.size }
1519
1513
  end
1520
1514
 
1521
1515
  it "when equivalent, it is idempotent and doesn't raise" do
1522
1516
  expect do
1523
- Advert.constraint :ad_category_id, parent_table_name: 'ad_categories', constraint_name: :constraint_1, parent_class_name: 'AdCategory'
1517
+ Advert.constraint(:ad_category_id, parent_table_name: 'ad_categories', constraint_name: :constraint_1, parent_class_name: 'AdCategory')
1524
1518
  end.to_not change { Advert.index_definitions.size }
1525
1519
  end
1526
1520
  end