declare_schema 0.10.1 → 0.11.0
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 +11 -0
- data/Gemfile.lock +1 -1
- data/README.md +11 -1
- data/lib/declare_schema.rb +12 -1
- data/lib/declare_schema/model.rb +3 -5
- data/lib/declare_schema/model/column.rb +1 -1
- data/lib/declare_schema/model/foreign_key_definition.rb +2 -3
- data/lib/declare_schema/model/index_definition.rb +1 -1
- data/lib/declare_schema/version.rb +1 -1
- data/lib/generators/declare_schema/migration/USAGE +14 -24
- data/lib/generators/declare_schema/migration/migration_generator.rb +40 -38
- data/lib/generators/declare_schema/migration/migrator.rb +4 -4
- data/lib/generators/declare_schema/migration/templates/migration.rb.erb +1 -1
- data/spec/lib/declare_schema/api_spec.rb +1 -1
- data/spec/lib/declare_schema/field_spec_spec.rb +2 -2
- data/spec/lib/declare_schema/generator_spec.rb +2 -2
- data/spec/lib/declare_schema/interactive_primary_key_spec.rb +2 -3
- data/spec/lib/declare_schema/migration_generator_spec.rb +174 -73
- data/spec/lib/declare_schema/model/column_spec.rb +2 -6
- data/spec/lib/declare_schema/model/foreign_key_definition_spec.rb +32 -8
- data/spec/lib/declare_schema/model/habtm_model_shim_spec.rb +0 -2
- data/spec/lib/declare_schema/model/index_definition_spec.rb +4 -4
- data/spec/spec_helper.rb +1 -1
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 516d119d979224ddbe841b2dd5117fc5891b5c79e09261443c7df6f3c2335910
|
4
|
+
data.tar.gz: 32621c93b56814f9a8dd30b2d622d2c6a4c536cdc40b2145d078134252e14401
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 912c885f9fea463bae49937b6cb85ba6f7ab8cd4739327e6c662eb7b3cece701e1d42be9f251b97ba4a7b544eddd2a854a99ad8992d4a1fa5563acfd81cff989
|
7
|
+
data.tar.gz: 7429b27a56a0cfc27f8af16216528ee7137e5f9d0f20301f5c6177decc816c09b663bf78e5ea22d955b03ed58a7a103663980ec08ab14bb2d27f6d6ccb581787
|
data/CHANGELOG.md
CHANGED
@@ -4,6 +4,16 @@ Inspired by [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
|
4
4
|
|
5
5
|
Note: this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
6
6
|
|
7
|
+
## [0.11.0] - 2021-03-22
|
8
|
+
### Removed
|
9
|
+
- Removed `g|m|c` prompt entirely, since it was confusing. Instead, the migration is
|
10
|
+
always generated; the user may press ^C at the filename prompt to cancel.
|
11
|
+
The migration will be run if `--migrate` is passed; otherwise, the migrate command will be displayed to be run later.
|
12
|
+
### Added
|
13
|
+
- Added the new configuration option `DeclareSchema.@db_migrate_command =`.
|
14
|
+
### Fixed
|
15
|
+
- Fixed bug where foreign key constraint names are not globally unique
|
16
|
+
|
7
17
|
## [0.10.1] - 2021-03-18
|
8
18
|
### Fixed
|
9
19
|
- Migration steps are now generated in a defined dependency order, so that--for example--indexes that depend
|
@@ -154,6 +164,7 @@ using the appropriate Rails configuration attributes.
|
|
154
164
|
### Added
|
155
165
|
- Initial version from https://github.com/Invoca/hobo_fields v4.1.0.
|
156
166
|
|
167
|
+
[0.11.0]: https://github.com/Invoca/declare_schema/compare/v0.10.1...v0.11.0
|
157
168
|
[0.10.1]: https://github.com/Invoca/declare_schema/compare/v0.10.0...v0.10.1
|
158
169
|
[0.10.0]: https://github.com/Invoca/declare_schema/compare/v0.9.0...v0.10.0
|
159
170
|
[0.9.0]: https://github.com/Invoca/declare_schema/compare/v0.8.0...v0.9.0
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -57,7 +57,7 @@ during the initialization of your Rails application.
|
|
57
57
|
|
58
58
|
### before_generating_migration callback
|
59
59
|
|
60
|
-
During the
|
60
|
+
During the initialization process for generating migrations, `DeclareSchema` will
|
61
61
|
trigger the `eager_load!` on the `Rails` application and all `Rails::Engine`s loaded
|
62
62
|
into scope. If you need to generate migrations for models that aren't automatically loaded by `eager_load!`,
|
63
63
|
load them in the `before_generating_migration` block.
|
@@ -163,6 +163,16 @@ turn all tables into `utf8mb4` supporting tables:
|
|
163
163
|
DeclareSchema.default_charset = "utf8mb4"
|
164
164
|
DeclareSchema.default_collation = "utf8mb4_bin"
|
165
165
|
```
|
166
|
+
#### db:migrate Command
|
167
|
+
`declare_schema` can run the migration once it is generated, if the `--migrate` option is passed.
|
168
|
+
If not, it will display the command to run later. By default this command is
|
169
|
+
```
|
170
|
+
bundle exec rails db:migrate
|
171
|
+
```
|
172
|
+
If your repo has a different command to run for migrations, you can configure it like this:
|
173
|
+
```ruby
|
174
|
+
`DeclareSchema.db_migrate_command = "bundle exec rails db:migrate_immediate"`
|
175
|
+
```
|
166
176
|
|
167
177
|
## Declaring Character Set and Collation
|
168
178
|
_Note: This feature currently only works for MySQL database configurations._
|
data/lib/declare_schema.rb
CHANGED
@@ -28,10 +28,16 @@ module DeclareSchema
|
|
28
28
|
@default_null = false
|
29
29
|
@default_generate_foreign_keys = true
|
30
30
|
@default_generate_indexing = true
|
31
|
+
@db_migrate_command =
|
32
|
+
if ActiveSupport::VERSION::MAJOR < 5
|
33
|
+
"bundle exec rake db:migrate"
|
34
|
+
else
|
35
|
+
"bundle exec rails db:migrate"
|
36
|
+
end
|
31
37
|
|
32
38
|
class << self
|
33
39
|
attr_reader :default_charset, :default_collation, :default_text_limit, :default_string_limit, :default_null,
|
34
|
-
:default_generate_foreign_keys, :default_generate_indexing
|
40
|
+
:default_generate_foreign_keys, :default_generate_indexing, :db_migrate_command
|
35
41
|
|
36
42
|
def to_class(type)
|
37
43
|
case type
|
@@ -78,6 +84,11 @@ module DeclareSchema
|
|
78
84
|
generate_indexing.in?([true, false]) or raise ArgumentError, "generate_indexing must be either true or false (got #{generate_indexing.inspect})"
|
79
85
|
@default_generate_indexing = generate_indexing
|
80
86
|
end
|
87
|
+
|
88
|
+
def db_migrate_command=(db_migrate_command)
|
89
|
+
db_migrate_command.is_a?(String) or raise ArgumentError, "db_migrate_command must be a string (got #{db_migrate_command.inspect})"
|
90
|
+
@db_migrate_command = db_migrate_command
|
91
|
+
end
|
81
92
|
end
|
82
93
|
end
|
83
94
|
|
data/lib/declare_schema/model.rb
CHANGED
@@ -1,7 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require 'rails'
|
4
|
-
|
5
3
|
require 'declare_schema/extensions/module'
|
6
4
|
|
7
5
|
module DeclareSchema
|
@@ -130,7 +128,7 @@ module DeclareSchema
|
|
130
128
|
|
131
129
|
fk_options[:dependent] = options.delete(:far_end_dependent) if options.has_key?(:far_end_dependent)
|
132
130
|
|
133
|
-
if
|
131
|
+
if ActiveSupport::VERSION::MAJOR >= 5
|
134
132
|
super
|
135
133
|
else
|
136
134
|
super(name, scope, options.except(:optional))
|
@@ -149,7 +147,7 @@ module DeclareSchema
|
|
149
147
|
end
|
150
148
|
end
|
151
149
|
|
152
|
-
if ::
|
150
|
+
if ::ActiveSupport::VERSION::MAJOR < 5
|
153
151
|
def primary_key
|
154
152
|
super || 'id'
|
155
153
|
end
|
@@ -227,7 +225,7 @@ module DeclareSchema
|
|
227
225
|
ActiveRecord::Coders::JSON
|
228
226
|
elsif [:load, :dump].all? { |x| class_name_or_coder.respond_to?(x) }
|
229
227
|
class_name_or_coder
|
230
|
-
elsif
|
228
|
+
elsif ActiveSupport::VERSION::MAJOR >= 5
|
231
229
|
ActiveRecord::Coders::YAMLColumn.new(attr_name, class_name_or_coder)
|
232
230
|
else
|
233
231
|
ActiveRecord::Coders::YAMLColumn.new(class_name_or_coder)
|
@@ -53,7 +53,7 @@ module DeclareSchema
|
|
53
53
|
def deserialize_default_value(column, type, default_value)
|
54
54
|
type or raise ArgumentError, "must pass type; got #{type.inspect}"
|
55
55
|
|
56
|
-
case
|
56
|
+
case ActiveSupport::VERSION::MAJOR
|
57
57
|
when 4
|
58
58
|
# TODO: Delete this Rails 4 support ASAP! This could be wrong, since it's using the type of the old column...which
|
59
59
|
# might be getting migrated to a new type. We should be using just type as below. -Colin
|
@@ -19,9 +19,8 @@ module DeclareSchema
|
|
19
19
|
@parent_table_name = options[:parent_table]&.to_s
|
20
20
|
@foreign_key_name = options[:foreign_key]&.to_s || @foreign_key
|
21
21
|
|
22
|
-
@constraint_name = options[:constraint_name]&.to_s ||
|
23
|
-
|
24
|
-
IndexDefinition.index_name(@foreign_key_name)
|
22
|
+
@constraint_name = options[:constraint_name]&.to_s.presence ||
|
23
|
+
model.connection.index_name(model.table_name, column: @foreign_key_name)
|
25
24
|
@on_delete_cascade = options[:dependent] == :delete
|
26
25
|
end
|
27
26
|
|
@@ -68,7 +68,7 @@ module DeclareSchema
|
|
68
68
|
|
69
69
|
# This is the old approach which is still needed for MySQL in Rails 4 and SQLite
|
70
70
|
def sqlite_compound_primary_key(model, table)
|
71
|
-
ActiveRecord::Base.connection.class.name.match?(/SQLite3Adapter/) ||
|
71
|
+
ActiveRecord::Base.connection.class.name.match?(/SQLite3Adapter/) || ActiveSupport::VERSION::MAJOR < 5 or return nil
|
72
72
|
|
73
73
|
connection = model.connection.dup
|
74
74
|
|
@@ -1,47 +1,37 @@
|
|
1
1
|
Description:
|
2
2
|
|
3
3
|
This generator compares your existing schema against the
|
4
|
-
schema declared inside your
|
5
|
-
models.
|
4
|
+
schema declared inside your declare_schema do ... end
|
5
|
+
declarations in your models.
|
6
6
|
|
7
7
|
If the generator finds differences, it will display the
|
8
|
-
migration it has created, and
|
9
|
-
[g]enerate migration, generate and [m]igrate now or [c]ancel?
|
10
|
-
Enter "g" to just generate the migration but do not run it.
|
11
|
-
Enter "m" to generate the migration and run it, or press "c"
|
12
|
-
to do nothing.
|
13
|
-
|
14
|
-
The generator will then prompt you for the migration name,
|
8
|
+
migration it has created, and prompt you for the migration name,
|
15
9
|
supplying a numbered default name.
|
16
10
|
|
17
11
|
The generator is conservative and will prompt you to resolve
|
18
12
|
any ambiguities.
|
19
13
|
|
20
|
-
|
14
|
+
Example:
|
21
15
|
|
22
|
-
$ rails generate declare_schema:migration
|
16
|
+
$ bundle exec rails generate declare_schema:migration
|
23
17
|
|
24
18
|
---------- Up Migration ----------
|
25
|
-
create_table :
|
19
|
+
create_table :users do |t|
|
20
|
+
t.string :first_name, limit: 50
|
21
|
+
t.string :last_name, limit: 50
|
26
22
|
t.datetime :created_at
|
27
23
|
t.datetime :updated_at
|
28
24
|
end
|
29
25
|
----------------------------------
|
30
26
|
|
31
27
|
---------- Down Migration --------
|
32
|
-
drop_table :
|
28
|
+
drop_table :users
|
33
29
|
----------------------------------
|
34
|
-
|
35
|
-
|
36
|
-
Migration filename:
|
37
|
-
(you can type spaces instead of '_' -- every little helps)
|
38
|
-
Filename [declare_schema_migration_2]: create_foo
|
30
|
+
Migration filename: (spaces will be converted to _) [declare_schema_migration_2]: create users
|
39
31
|
exists db/migrate
|
40
|
-
create db/migrate/
|
41
|
-
|
42
|
-
|
43
|
-
-- create_table(:yos)
|
44
|
-
-> 0.0856s
|
45
|
-
== CreateFoo: migrated (0.0858s) =============================================
|
32
|
+
create db/migrate/20091023183838_create_users.rb
|
33
|
+
|
34
|
+
Not running migration since --migrate not given. When you are ready, run:
|
46
35
|
|
36
|
+
bundle exec rails db:migrate
|
47
37
|
|
@@ -38,20 +38,18 @@ module DeclareSchema
|
|
38
38
|
type: :boolean,
|
39
39
|
desc: "Don't prompt for a migration name - just pick one"
|
40
40
|
|
41
|
-
class_option :generate,
|
42
|
-
aliases: '-g',
|
43
|
-
type: :boolean,
|
44
|
-
desc: "Don't prompt for action - generate the migration"
|
45
|
-
|
46
41
|
class_option :migrate,
|
47
42
|
aliases: '-m',
|
48
43
|
type: :boolean,
|
49
|
-
desc: "
|
44
|
+
desc: "After generating migration, run it"
|
50
45
|
|
51
46
|
def migrate
|
52
47
|
return if migrations_pending?
|
53
48
|
|
54
|
-
generator = Generators::DeclareSchema::Migration::Migrator.new
|
49
|
+
generator = Generators::DeclareSchema::Migration::Migrator.new do |to_create, to_drop, kind_str, name_prefix|
|
50
|
+
extract_renames!(to_create, to_drop, kind_str, name_prefix)
|
51
|
+
end
|
52
|
+
|
55
53
|
up, down = generator.generate
|
56
54
|
|
57
55
|
if up.blank?
|
@@ -67,34 +65,31 @@ module DeclareSchema
|
|
67
65
|
say down
|
68
66
|
say "----------------------------------"
|
69
67
|
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
when 4
|
93
|
-
rake('db:migrate')
|
94
|
-
else
|
95
|
-
rails_command('db:migrate')
|
96
|
-
end
|
68
|
+
final_migration_name =
|
69
|
+
name.presence ||
|
70
|
+
if !options[:default_name]
|
71
|
+
choose("\nMigration filename (spaces will be converted to _) [#{default_migration_name}]:", /^[a-z0-9_ ]*$/,
|
72
|
+
default_migration_name).strip.gsub(' ', '_').presence
|
73
|
+
end ||
|
74
|
+
default_migration_name
|
75
|
+
|
76
|
+
@up = indent(up, 4)
|
77
|
+
@down = indent(down, 4)
|
78
|
+
@migration_class_name = final_migration_name.camelize
|
79
|
+
|
80
|
+
migration_template('migration.rb.erb', "db/migrate/#{final_migration_name.underscore}.rb")
|
81
|
+
|
82
|
+
db_migrate_command = ::DeclareSchema.db_migrate_command
|
83
|
+
if options[:migrate]
|
84
|
+
say db_migrate_command
|
85
|
+
bare_rails_command = db_migrate_command.sub(/\Abundle exec +/, '').sub(/\Arake +|rails +/, '')
|
86
|
+
if ActiveSupport::VERSION::MAJOR < 5
|
87
|
+
rake(bare_rails_command)
|
88
|
+
else
|
89
|
+
rails_command(bare_rails_command)
|
97
90
|
end
|
91
|
+
else
|
92
|
+
say "\nNot running migration since --migrate not given. When you are ready, run:\n\n #{db_migrate_command}\n\n"
|
98
93
|
end
|
99
94
|
rescue ::DeclareSchema::UnknownTypeError => ex
|
100
95
|
say "Invalid field type: #{ex}"
|
@@ -102,8 +97,15 @@ module DeclareSchema
|
|
102
97
|
|
103
98
|
private
|
104
99
|
|
100
|
+
if ActiveSupport::VERSION::MAJOR < 5
|
101
|
+
def indent(string, columns)
|
102
|
+
whitespace = ' ' * columns
|
103
|
+
string.gsub("\n", "\n#{whitespace}").gsub!(/ +\n/, "\n")
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
105
107
|
def migrations_pending?
|
106
|
-
migrations = case
|
108
|
+
migrations = case ActiveSupport::VERSION::MAJOR
|
107
109
|
when 4
|
108
110
|
ActiveRecord::Migrator.migrations('db/migrate')
|
109
111
|
when 5
|
@@ -111,7 +113,7 @@ module DeclareSchema
|
|
111
113
|
else
|
112
114
|
ActiveRecord::MigrationContext.new(ActiveRecord::Migrator.migrations_paths, ActiveRecord::SchemaMigration).migrations
|
113
115
|
end
|
114
|
-
pending_migrations = case
|
116
|
+
pending_migrations = case ActiveSupport::VERSION::MAJOR
|
115
117
|
when 4, 5
|
116
118
|
ActiveRecord::Migrator.new(:up, migrations).pending_migrations
|
117
119
|
else
|
@@ -176,8 +178,8 @@ module DeclareSchema
|
|
176
178
|
to_rename
|
177
179
|
end
|
178
180
|
|
179
|
-
def
|
180
|
-
|
181
|
+
def default_migration_name
|
182
|
+
Generators::DeclareSchema::Migration::Migrator.default_migration_name
|
181
183
|
end
|
182
184
|
end
|
183
185
|
end
|
@@ -47,8 +47,8 @@ module Generators
|
|
47
47
|
deprecate :default_charset=, :default_collation=, :default_charset, :default_collation, deprecator: ActiveSupport::Deprecation.new('1.0', 'declare_schema')
|
48
48
|
end
|
49
49
|
|
50
|
-
def initialize(
|
51
|
-
@ambiguity_resolver =
|
50
|
+
def initialize(renames: nil, &block)
|
51
|
+
@ambiguity_resolver = block
|
52
52
|
@drops = []
|
53
53
|
@renames = renames
|
54
54
|
end
|
@@ -483,7 +483,7 @@ module Generators
|
|
483
483
|
parent_columns = connection.columns(parent_table) rescue []
|
484
484
|
pk_limit =
|
485
485
|
if (pk_column = parent_columns.find { |column| column.name.to_s == "id" }) # right now foreign keys assume id is the target
|
486
|
-
if
|
486
|
+
if ActiveSupport::VERSION::MAJOR < 5
|
487
487
|
pk_column.cast_type.limit
|
488
488
|
else
|
489
489
|
pk_column.limit
|
@@ -549,7 +549,7 @@ module Generators
|
|
549
549
|
end
|
550
550
|
end
|
551
551
|
|
552
|
-
SchemaDumper = case
|
552
|
+
SchemaDumper = case ActiveSupport::VERSION::MAJOR
|
553
553
|
when 4
|
554
554
|
ActiveRecord::SchemaDumper
|
555
555
|
else
|
@@ -1,4 +1,4 @@
|
|
1
|
-
class <%= @migration_class_name %> < (
|
1
|
+
class <%= @migration_class_name %> < (ActiveSupport::VERSION::MAJOR >= 5 ? ActiveRecord::Migration[4.2] : ActiveRecord::Migration)
|
2
2
|
def self.up
|
3
3
|
<%= @up %>
|
4
4
|
end
|
@@ -12,7 +12,7 @@ RSpec.describe DeclareSchema::Model::FieldSpec do
|
|
12
12
|
before do
|
13
13
|
load File.expand_path('prepare_testapp.rb', __dir__)
|
14
14
|
|
15
|
-
if
|
15
|
+
if ActiveSupport::VERSION::MAJOR < 5
|
16
16
|
allow(col_spec).to receive(:type_cast_from_database, &:itself)
|
17
17
|
end
|
18
18
|
end
|
@@ -184,7 +184,7 @@ RSpec.describe DeclareSchema::Model::FieldSpec do
|
|
184
184
|
|
185
185
|
describe '#schema_attributes' do
|
186
186
|
let(:col_spec) do
|
187
|
-
case
|
187
|
+
case ActiveSupport::VERSION::MAJOR
|
188
188
|
when 4
|
189
189
|
cast_type = ActiveRecord::Type::Integer.new(limit: 8)
|
190
190
|
ActiveRecord::ConnectionAdapters::Column.new("price", nil, cast_type, "integer(8)", false)
|
@@ -27,7 +27,7 @@ RSpec.describe 'DeclareSchema Migration Generator' do
|
|
27
27
|
end
|
28
28
|
EOS
|
29
29
|
|
30
|
-
case
|
30
|
+
case ActiveSupport::VERSION::MAJOR
|
31
31
|
when 4, 5
|
32
32
|
expect_test_definition_to_eq('alpha/beta', <<~EOS)
|
33
33
|
require "test_helper"
|
@@ -50,7 +50,7 @@ RSpec.describe 'DeclareSchema Migration Generator' do
|
|
50
50
|
EOS
|
51
51
|
end
|
52
52
|
|
53
|
-
case
|
53
|
+
case ActiveSupport::VERSION::MAJOR
|
54
54
|
when 4
|
55
55
|
expect_test_fixture_to_eq('alpha/beta', <<~EOS)
|
56
56
|
# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html
|
@@ -1,6 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require 'rails'
|
4
3
|
begin
|
5
4
|
require 'mysql2'
|
6
5
|
rescue LoadError
|
@@ -63,7 +62,7 @@ RSpec.describe 'DeclareSchema Migration Generator interactive primary key' do
|
|
63
62
|
ActiveRecord::Base.connection.execute("CREATE TABLE foos (id integer PRIMARY KEY AUTOINCREMENT NOT NULL)")
|
64
63
|
end
|
65
64
|
|
66
|
-
if
|
65
|
+
if ActiveSupport::VERSION::MAJOR >= 5 && !defined?(Mysql2) # TODO TECH-4814 Put this test back for Mysql2
|
67
66
|
# replace custom primary_key
|
68
67
|
class Foo < ActiveRecord::Base
|
69
68
|
fields do
|
@@ -131,7 +130,7 @@ RSpec.describe 'DeclareSchema Migration Generator interactive primary key' do
|
|
131
130
|
ActiveRecord::Base.connection.execute("CREATE TABLE foos (id integer PRIMARY KEY AUTOINCREMENT NOT NULL)")
|
132
131
|
end
|
133
132
|
|
134
|
-
if
|
133
|
+
if ActiveSupport::VERSION::MAJOR >= 5 && !defined?(Mysql2) # TODO TECH-4814 Put this test back for Mysql2
|
135
134
|
# replace custom primary_key
|
136
135
|
class Foo < ActiveRecord::Base
|
137
136
|
declare_schema do
|
@@ -1,11 +1,15 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require 'rails'
|
4
3
|
begin
|
5
4
|
require 'mysql2'
|
6
5
|
rescue LoadError
|
7
6
|
end
|
8
7
|
|
8
|
+
begin
|
9
|
+
require 'sqlite3'
|
10
|
+
rescue LoadError
|
11
|
+
end
|
12
|
+
|
9
13
|
RSpec.describe 'DeclareSchema Migration Generator' do
|
10
14
|
before do
|
11
15
|
load File.expand_path('prepare_testapp.rb', __dir__)
|
@@ -26,20 +30,20 @@ RSpec.describe 'DeclareSchema Migration Generator' do
|
|
26
30
|
end
|
27
31
|
end
|
28
32
|
let(:datetime_precision) do
|
29
|
-
if defined?(Mysql2) &&
|
33
|
+
if defined?(Mysql2) && ActiveSupport::VERSION::MAJOR >= 5
|
30
34
|
', precision: 0'
|
31
35
|
end
|
32
36
|
end
|
33
37
|
let(:table_options) do
|
34
38
|
if defined?(Mysql2)
|
35
|
-
", options: \"#{'ENGINE=InnoDB ' if
|
36
|
-
if
|
39
|
+
", options: \"#{'ENGINE=InnoDB ' if ActiveSupport::VERSION::MAJOR == 5}DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin\"" +
|
40
|
+
if ActiveSupport::VERSION::MAJOR >= 6
|
37
41
|
', charset: "utf8mb4", collation: "utf8mb4_bin"'
|
38
42
|
else
|
39
43
|
''
|
40
44
|
end
|
41
45
|
else
|
42
|
-
", id: :integer" unless
|
46
|
+
", id: :integer" unless ActiveSupport::VERSION::MAJOR < 5
|
43
47
|
end
|
44
48
|
end
|
45
49
|
let(:lock_version_limit) do
|
@@ -87,7 +91,7 @@ RSpec.describe 'DeclareSchema Migration Generator' do
|
|
87
91
|
ActiveRecord::Migration.class_eval(up)
|
88
92
|
expect(Advert.columns.map(&:name)).to eq(["id", "name"])
|
89
93
|
|
90
|
-
if
|
94
|
+
if ActiveSupport::VERSION::MAJOR < 5
|
91
95
|
# Rails 4 drivers don't always create PK properly. Fix that by dropping and recreating.
|
92
96
|
ActiveRecord::Base.connection.execute("drop table adverts")
|
93
97
|
if defined?(Mysql2)
|
@@ -366,10 +370,10 @@ RSpec.describe 'DeclareSchema Migration Generator' do
|
|
366
370
|
migrate_up(<<~EOS.strip)
|
367
371
|
add_column :adverts, :category_id, :integer, limit: 8, null: false
|
368
372
|
add_index :adverts, [:category_id], name: :on_category_id
|
369
|
-
#{"add_foreign_key :adverts, :categories, column: :category_id, name: :
|
373
|
+
#{"add_foreign_key :adverts, :categories, column: :category_id, name: :index_adverts_on_category_id" if defined?(Mysql2)}
|
370
374
|
EOS
|
371
375
|
.and migrate_down(<<~EOS.strip)
|
372
|
-
#{"remove_foreign_key :adverts, name: :
|
376
|
+
#{"remove_foreign_key :adverts, name: :index_adverts_on_category_id" if defined?(Mysql2)}
|
373
377
|
remove_index :adverts, name: :on_category_id
|
374
378
|
remove_column :adverts, :category_id
|
375
379
|
EOS
|
@@ -390,8 +394,8 @@ RSpec.describe 'DeclareSchema Migration Generator' do
|
|
390
394
|
migrate_up(<<~EOS.strip)
|
391
395
|
add_column :adverts, :c_id, :integer, limit: 8, null: false
|
392
396
|
add_index :adverts, [:c_id], name: :on_c_id
|
393
|
-
#{"add_foreign_key :adverts, :categories, column: :category_id, name: :
|
394
|
-
"add_foreign_key :adverts, :categories, column: :c_id, name: :
|
397
|
+
#{"add_foreign_key :adverts, :categories, column: :category_id, name: :index_adverts_on_category_id\n" +
|
398
|
+
"add_foreign_key :adverts, :categories, column: :c_id, name: :index_adverts_on_c_id" if defined?(Mysql2)}
|
395
399
|
EOS
|
396
400
|
)
|
397
401
|
|
@@ -409,8 +413,8 @@ RSpec.describe 'DeclareSchema Migration Generator' do
|
|
409
413
|
expect(Generators::DeclareSchema::Migration::Migrator.run).to(
|
410
414
|
migrate_up(<<~EOS.strip)
|
411
415
|
add_column :adverts, :category_id, :integer, limit: 8, null: false
|
412
|
-
#{"add_foreign_key :adverts, :categories, column: :category_id, name: :
|
413
|
-
"add_foreign_key :adverts, :categories, column: :c_id, name: :
|
416
|
+
#{"add_foreign_key :adverts, :categories, column: :category_id, name: :index_adverts_on_category_id\n" +
|
417
|
+
"add_foreign_key :adverts, :categories, column: :c_id, name: :index_adverts_on_c_id" if defined?(Mysql2)}
|
414
418
|
EOS
|
415
419
|
)
|
416
420
|
|
@@ -429,8 +433,8 @@ RSpec.describe 'DeclareSchema Migration Generator' do
|
|
429
433
|
migrate_up(<<~EOS.strip)
|
430
434
|
add_column :adverts, :category_id, :integer, limit: 8, null: false
|
431
435
|
add_index :adverts, [:category_id], name: :my_index
|
432
|
-
#{"add_foreign_key :adverts, :categories, column: :category_id, name: :
|
433
|
-
"add_foreign_key :adverts, :categories, column: :c_id, name: :
|
436
|
+
#{"add_foreign_key :adverts, :categories, column: :category_id, name: :index_adverts_on_category_id\n" +
|
437
|
+
"add_foreign_key :adverts, :categories, column: :c_id, name: :index_adverts_on_c_id" if defined?(Mysql2)}
|
434
438
|
EOS
|
435
439
|
)
|
436
440
|
|
@@ -454,12 +458,12 @@ RSpec.describe 'DeclareSchema Migration Generator' do
|
|
454
458
|
add_column :adverts, :created_at, :datetime, null: true
|
455
459
|
add_column :adverts, :updated_at, :datetime, null: true
|
456
460
|
add_column :adverts, :lock_version, :integer#{lock_version_limit}, null: false, default: 1
|
457
|
-
#{"add_foreign_key :adverts, :categories, column: :category_id, name: :
|
458
|
-
"add_foreign_key :adverts, :categories, column: :c_id, name: :
|
461
|
+
#{"add_foreign_key :adverts, :categories, column: :category_id, name: :index_adverts_on_category_id\n" +
|
462
|
+
"add_foreign_key :adverts, :categories, column: :c_id, name: :index_adverts_on_c_id" if defined?(Mysql2)}
|
459
463
|
EOS
|
460
464
|
.and migrate_down(<<~EOS.strip)
|
461
|
-
#{"remove_foreign_key :adverts, name: :
|
462
|
-
"remove_foreign_key :adverts, name: :
|
465
|
+
#{"remove_foreign_key :adverts, name: :index_adverts_on_c_id\n" +
|
466
|
+
"remove_foreign_key :adverts, name: :index_adverts_on_category_id" if defined?(Mysql2)}
|
463
467
|
remove_column :adverts, :lock_version
|
464
468
|
remove_column :adverts, :updated_at
|
465
469
|
remove_column :adverts, :created_at
|
@@ -484,8 +488,8 @@ RSpec.describe 'DeclareSchema Migration Generator' do
|
|
484
488
|
migrate_up(<<~EOS.strip)
|
485
489
|
add_column :adverts, :title, :string, limit: 250, null: true#{charset_and_collation}
|
486
490
|
add_index :adverts, [:title], name: :on_title
|
487
|
-
#{"add_foreign_key :adverts, :categories, column: :category_id, name: :
|
488
|
-
"add_foreign_key :adverts, :categories, column: :c_id, name: :
|
491
|
+
#{"add_foreign_key :adverts, :categories, column: :category_id, name: :index_adverts_on_category_id\n" +
|
492
|
+
"add_foreign_key :adverts, :categories, column: :c_id, name: :index_adverts_on_c_id" if defined?(Mysql2)}
|
489
493
|
EOS
|
490
494
|
)
|
491
495
|
|
@@ -503,8 +507,8 @@ RSpec.describe 'DeclareSchema Migration Generator' do
|
|
503
507
|
migrate_up(<<~EOS.strip)
|
504
508
|
add_column :adverts, :title, :string, limit: 250, null: true#{charset_and_collation}
|
505
509
|
add_index :adverts, [:title], name: :on_title, unique: true
|
506
|
-
#{"add_foreign_key :adverts, :categories, column: :category_id, name: :
|
507
|
-
"add_foreign_key :adverts, :categories, column: :c_id, name: :
|
510
|
+
#{"add_foreign_key :adverts, :categories, column: :category_id, name: :index_adverts_on_category_id\n" +
|
511
|
+
"add_foreign_key :adverts, :categories, column: :c_id, name: :index_adverts_on_c_id" if defined?(Mysql2)}
|
508
512
|
EOS
|
509
513
|
)
|
510
514
|
|
@@ -522,8 +526,8 @@ RSpec.describe 'DeclareSchema Migration Generator' do
|
|
522
526
|
migrate_up(<<~EOS.strip)
|
523
527
|
add_column :adverts, :title, :string, limit: 250, null: true#{charset_and_collation}
|
524
528
|
add_index :adverts, [:title], name: :my_index
|
525
|
-
#{"add_foreign_key :adverts, :categories, column: :category_id, name: :
|
526
|
-
"add_foreign_key :adverts, :categories, column: :c_id, name: :
|
529
|
+
#{"add_foreign_key :adverts, :categories, column: :category_id, name: :index_adverts_on_category_id\n" +
|
530
|
+
"add_foreign_key :adverts, :categories, column: :c_id, name: :index_adverts_on_c_id" if defined?(Mysql2)}
|
527
531
|
EOS
|
528
532
|
)
|
529
533
|
|
@@ -539,8 +543,8 @@ RSpec.describe 'DeclareSchema Migration Generator' do
|
|
539
543
|
migrate_up(<<~EOS.strip)
|
540
544
|
add_column :adverts, :title, :string, limit: 250, null: true#{charset_and_collation}
|
541
545
|
add_index :adverts, [:title], name: :on_title
|
542
|
-
#{"add_foreign_key :adverts, :categories, column: :category_id, name: :
|
543
|
-
"add_foreign_key :adverts, :categories, column: :c_id, name: :
|
546
|
+
#{"add_foreign_key :adverts, :categories, column: :category_id, name: :index_adverts_on_category_id\n" +
|
547
|
+
"add_foreign_key :adverts, :categories, column: :c_id, name: :index_adverts_on_c_id" if defined?(Mysql2)}
|
544
548
|
EOS
|
545
549
|
)
|
546
550
|
|
@@ -556,8 +560,8 @@ RSpec.describe 'DeclareSchema Migration Generator' do
|
|
556
560
|
migrate_up(<<~EOS.strip)
|
557
561
|
add_column :adverts, :title, :string, limit: 250, null: true#{charset_and_collation}
|
558
562
|
add_index :adverts, [:title], name: :my_index, unique: true
|
559
|
-
#{"add_foreign_key :adverts, :categories, column: :category_id, name: :
|
560
|
-
"add_foreign_key :adverts, :categories, column: :c_id, name: :
|
563
|
+
#{"add_foreign_key :adverts, :categories, column: :category_id, name: :index_adverts_on_category_id\n" +
|
564
|
+
"add_foreign_key :adverts, :categories, column: :c_id, name: :index_adverts_on_c_id" if defined?(Mysql2)}
|
561
565
|
EOS
|
562
566
|
)
|
563
567
|
|
@@ -573,8 +577,8 @@ RSpec.describe 'DeclareSchema Migration Generator' do
|
|
573
577
|
migrate_up(<<~EOS.strip)
|
574
578
|
add_column :adverts, :title, :string, limit: 250, null: true#{charset_and_collation}
|
575
579
|
add_index :adverts, [:title, :category_id], name: :on_title_and_category_id
|
576
|
-
#{"add_foreign_key :adverts, :categories, column: :category_id, name: :
|
577
|
-
"add_foreign_key :adverts, :categories, column: :c_id, name: :
|
580
|
+
#{"add_foreign_key :adverts, :categories, column: :category_id, name: :index_adverts_on_category_id\n" +
|
581
|
+
"add_foreign_key :adverts, :categories, column: :c_id, name: :index_adverts_on_c_id" if defined?(Mysql2)}
|
578
582
|
EOS
|
579
583
|
)
|
580
584
|
|
@@ -606,14 +610,14 @@ RSpec.describe 'DeclareSchema Migration Generator' do
|
|
606
610
|
add_column :ads, :title, :string, limit: 250, null: true#{charset_and_collation}
|
607
611
|
add_column :ads, :body, :text#{', limit: 4294967295' if defined?(Mysql2)}, null: true#{charset_and_collation}
|
608
612
|
#{if defined?(Mysql2)
|
609
|
-
"add_foreign_key :adverts, :categories, column: :category_id, name: :
|
610
|
-
"add_foreign_key :adverts, :categories, column: :c_id, name: :
|
613
|
+
"add_foreign_key :adverts, :categories, column: :category_id, name: :index_adverts_on_category_id\n" +
|
614
|
+
"add_foreign_key :adverts, :categories, column: :c_id, name: :index_adverts_on_c_id"
|
611
615
|
end}
|
612
616
|
EOS
|
613
617
|
.and migrate_down(<<~EOS.strip)
|
614
618
|
#{if defined?(Mysql2)
|
615
|
-
"remove_foreign_key :adverts, name: :
|
616
|
-
"remove_foreign_key :adverts, name: :
|
619
|
+
"remove_foreign_key :adverts, name: :index_adverts_on_c_id\n" +
|
620
|
+
"remove_foreign_key :adverts, name: :index_adverts_on_category_id"
|
617
621
|
end}
|
618
622
|
remove_column :ads, :body
|
619
623
|
remove_column :ads, :title
|
@@ -836,6 +840,54 @@ RSpec.describe 'DeclareSchema Migration Generator' do
|
|
836
840
|
expect(Ad.field_specs['company'].options[:validates].inspect).to eq("{:presence=>true, :uniqueness=>{:case_sensitive=>false}}")
|
837
841
|
end
|
838
842
|
|
843
|
+
context 'models with the same parent foreign key relation' do
|
844
|
+
before do
|
845
|
+
class Category < ActiveRecord::Base
|
846
|
+
fields do
|
847
|
+
name :string, limit: 250, null: true
|
848
|
+
end
|
849
|
+
end
|
850
|
+
class Advertiser < ActiveRecord::Base
|
851
|
+
fields do
|
852
|
+
name :string, limit: 250, null: true
|
853
|
+
end
|
854
|
+
belongs_to :category, limit: 8
|
855
|
+
end
|
856
|
+
class Affiliate < ActiveRecord::Base
|
857
|
+
fields do
|
858
|
+
name :string, limit: 250, null: true
|
859
|
+
end
|
860
|
+
belongs_to :category, limit: 8
|
861
|
+
end
|
862
|
+
end
|
863
|
+
|
864
|
+
it 'will genereate unique constraint names' do
|
865
|
+
expect(Generators::DeclareSchema::Migration::Migrator.run).to(
|
866
|
+
migrate_up(<<~EOS.strip)
|
867
|
+
create_table :categories, id: :bigint, options: "CHARACTER SET utf8mb4 COLLATE utf8mb4_bin" do |t|
|
868
|
+
t.string :name, limit: 250, null: true, charset: "utf8mb4", collation: "utf8mb4_bin"
|
869
|
+
end
|
870
|
+
create_table :advertisers, id: :bigint, options: "CHARACTER SET utf8mb4 COLLATE utf8mb4_bin" do |t|
|
871
|
+
t.string :name, limit: 250, null: true, charset: "utf8mb4", collation: "utf8mb4_bin"
|
872
|
+
t.integer :category_id, limit: 8, null: false
|
873
|
+
end
|
874
|
+
create_table :affiliates, id: :bigint, options: "CHARACTER SET utf8mb4 COLLATE utf8mb4_bin" do |t|
|
875
|
+
t.string :name, limit: 250, null: true, charset: "utf8mb4", collation: "utf8mb4_bin"
|
876
|
+
t.integer :category_id, limit: 8, null: false
|
877
|
+
end
|
878
|
+
add_index :advertisers, [:category_id], name: :on_category_id
|
879
|
+
add_index :affiliates, [:category_id], name: :on_category_id
|
880
|
+
add_foreign_key :advertisers, :categories, column: :category_id, name: :index_advertisers_on_category_id
|
881
|
+
add_foreign_key :affiliates, :categories, column: :category_id, name: :index_affiliates_on_category_id
|
882
|
+
EOS
|
883
|
+
)
|
884
|
+
migrate
|
885
|
+
|
886
|
+
nuke_model_class(Advertiser)
|
887
|
+
nuke_model_class(Affiliate)
|
888
|
+
end
|
889
|
+
end if !defined?(SQLite3) && ActiveRecord::VERSION::MAJOR >= 5
|
890
|
+
|
839
891
|
describe 'serialize' do
|
840
892
|
before do
|
841
893
|
class Ad < ActiveRecord::Base
|
@@ -1020,8 +1072,8 @@ RSpec.describe 'DeclareSchema Migration Generator' do
|
|
1020
1072
|
end
|
1021
1073
|
end
|
1022
1074
|
|
1023
|
-
context "for Rails #{
|
1024
|
-
if
|
1075
|
+
context "for Rails #{ActiveSupport::VERSION::MAJOR}" do
|
1076
|
+
if ActiveSupport::VERSION::MAJOR >= 5
|
1025
1077
|
let(:optional_true) { { optional: true } }
|
1026
1078
|
let(:optional_false) { { optional: false } }
|
1027
1079
|
else
|
@@ -1127,13 +1179,13 @@ RSpec.describe 'DeclareSchema Migration Generator' do
|
|
1127
1179
|
migration_content = File.read(migrations.first)
|
1128
1180
|
first_line = migration_content.split("\n").first
|
1129
1181
|
base_class = first_line.split(' < ').last
|
1130
|
-
expect(base_class).to eq("(
|
1182
|
+
expect(base_class).to eq("(ActiveSupport::VERSION::MAJOR >= 5 ? ActiveRecord::Migration[4.2] : ActiveRecord::Migration)")
|
1131
1183
|
end
|
1132
1184
|
end
|
1133
1185
|
|
1134
1186
|
context 'Does not generate migrations' do
|
1135
1187
|
it 'for aliased fields bigint -> integer limit 8' do
|
1136
|
-
if
|
1188
|
+
if ActiveSupport::VERSION::MAJOR >= 5 || !ActiveRecord::Base.connection.class.name.match?(/SQLite3Adapter/)
|
1137
1189
|
class Advert < active_record_base_class.constantize
|
1138
1190
|
fields do
|
1139
1191
|
price :bigint
|
@@ -1145,7 +1197,7 @@ RSpec.describe 'DeclareSchema Migration Generator' do
|
|
1145
1197
|
migrations = Dir.glob('db/migrate/*declare_schema_migration*.rb')
|
1146
1198
|
expect(migrations.size).to eq(1), migrations.inspect
|
1147
1199
|
|
1148
|
-
if defined?(Mysql2) &&
|
1200
|
+
if defined?(Mysql2) && ActiveSupport::VERSION::MAJOR < 5
|
1149
1201
|
ActiveRecord::Base.connection.execute("ALTER TABLE adverts ADD PRIMARY KEY (id)")
|
1150
1202
|
end
|
1151
1203
|
|
@@ -1198,7 +1250,7 @@ RSpec.describe 'DeclareSchema Migration Generator' do
|
|
1198
1250
|
ActiveRecord::Migration.class_eval(up)
|
1199
1251
|
expect(Advert.columns.map(&:name)).to eq(["id", "name"])
|
1200
1252
|
|
1201
|
-
if
|
1253
|
+
if ActiveSupport::VERSION::MAJOR < 5
|
1202
1254
|
# Rails 4 drivers don't always create PK properly. Fix that by dropping and recreating.
|
1203
1255
|
ActiveRecord::Base.connection.execute("drop table adverts")
|
1204
1256
|
if defined?(Mysql2)
|
@@ -1477,10 +1529,10 @@ RSpec.describe 'DeclareSchema Migration Generator' do
|
|
1477
1529
|
migrate_up(<<~EOS.strip)
|
1478
1530
|
add_column :adverts, :category_id, :integer, limit: 8, null: false
|
1479
1531
|
add_index :adverts, [:category_id], name: :on_category_id
|
1480
|
-
#{"add_foreign_key :adverts, :categories, column: :category_id, name: :
|
1532
|
+
#{"add_foreign_key :adverts, :categories, column: :category_id, name: :index_adverts_on_category_id\n" if defined?(Mysql2)}
|
1481
1533
|
EOS
|
1482
1534
|
.and migrate_down(<<~EOS.strip)
|
1483
|
-
#{"remove_foreign_key :adverts, name: :
|
1535
|
+
#{"remove_foreign_key :adverts, name: :index_adverts_on_category_id" if defined?(Mysql2)}
|
1484
1536
|
remove_index :adverts, name: :on_category_id
|
1485
1537
|
remove_column :adverts, :category_id
|
1486
1538
|
EOS
|
@@ -1501,8 +1553,8 @@ RSpec.describe 'DeclareSchema Migration Generator' do
|
|
1501
1553
|
migrate_up(<<~EOS.strip)
|
1502
1554
|
add_column :adverts, :c_id, :integer, limit: 8, null: false
|
1503
1555
|
add_index :adverts, [:c_id], name: :on_c_id
|
1504
|
-
#{"add_foreign_key :adverts, :categories, column: :category_id, name: :
|
1505
|
-
"add_foreign_key :adverts, :categories, column: :c_id, name: :
|
1556
|
+
#{"add_foreign_key :adverts, :categories, column: :category_id, name: :index_adverts_on_category_id\n" +
|
1557
|
+
"add_foreign_key :adverts, :categories, column: :c_id, name: :index_adverts_on_c_id" if defined?(Mysql2)}
|
1506
1558
|
EOS
|
1507
1559
|
)
|
1508
1560
|
|
@@ -1520,8 +1572,8 @@ RSpec.describe 'DeclareSchema Migration Generator' do
|
|
1520
1572
|
expect(Generators::DeclareSchema::Migration::Migrator.run).to(
|
1521
1573
|
migrate_up(<<~EOS.strip)
|
1522
1574
|
add_column :adverts, :category_id, :integer, limit: 8, null: false
|
1523
|
-
#{"add_foreign_key :adverts, :categories, column: :category_id, name: :
|
1524
|
-
"add_foreign_key :adverts, :categories, column: :c_id, name: :
|
1575
|
+
#{"add_foreign_key :adverts, :categories, column: :category_id, name: :index_adverts_on_category_id\n" +
|
1576
|
+
"add_foreign_key :adverts, :categories, column: :c_id, name: :index_adverts_on_c_id" if defined?(Mysql2)}
|
1525
1577
|
EOS
|
1526
1578
|
)
|
1527
1579
|
|
@@ -1540,8 +1592,8 @@ RSpec.describe 'DeclareSchema Migration Generator' do
|
|
1540
1592
|
migrate_up(<<~EOS.strip)
|
1541
1593
|
add_column :adverts, :category_id, :integer, limit: 8, null: false
|
1542
1594
|
add_index :adverts, [:category_id], name: :my_index
|
1543
|
-
#{"add_foreign_key :adverts, :categories, column: :category_id, name: :
|
1544
|
-
"add_foreign_key :adverts, :categories, column: :c_id, name: :
|
1595
|
+
#{"add_foreign_key :adverts, :categories, column: :category_id, name: :index_adverts_on_category_id\n" +
|
1596
|
+
"add_foreign_key :adverts, :categories, column: :c_id, name: :index_adverts_on_c_id" if defined?(Mysql2)}
|
1545
1597
|
EOS
|
1546
1598
|
)
|
1547
1599
|
|
@@ -1565,12 +1617,12 @@ RSpec.describe 'DeclareSchema Migration Generator' do
|
|
1565
1617
|
add_column :adverts, :created_at, :datetime, null: true
|
1566
1618
|
add_column :adverts, :updated_at, :datetime, null: true
|
1567
1619
|
add_column :adverts, :lock_version, :integer#{lock_version_limit}, null: false, default: 1
|
1568
|
-
#{"add_foreign_key :adverts, :categories, column: :category_id, name: :
|
1569
|
-
"add_foreign_key :adverts, :categories, column: :c_id, name: :
|
1620
|
+
#{"add_foreign_key :adverts, :categories, column: :category_id, name: :index_adverts_on_category_id\n" +
|
1621
|
+
"add_foreign_key :adverts, :categories, column: :c_id, name: :index_adverts_on_c_id" if defined?(Mysql2)}
|
1570
1622
|
EOS
|
1571
1623
|
.and migrate_down(<<~EOS.strip)
|
1572
|
-
#{"remove_foreign_key :adverts, name: :
|
1573
|
-
"remove_foreign_key :adverts, name: :
|
1624
|
+
#{"remove_foreign_key :adverts, name: :index_adverts_on_c_id\n" +
|
1625
|
+
"remove_foreign_key :adverts, name: :index_adverts_on_category_id" if defined?(Mysql2)}
|
1574
1626
|
remove_column :adverts, :lock_version
|
1575
1627
|
remove_column :adverts, :updated_at
|
1576
1628
|
remove_column :adverts, :created_at
|
@@ -1595,8 +1647,8 @@ RSpec.describe 'DeclareSchema Migration Generator' do
|
|
1595
1647
|
migrate_up(<<~EOS.strip)
|
1596
1648
|
add_column :adverts, :title, :string, limit: 250, null: true#{charset_and_collation}
|
1597
1649
|
add_index :adverts, [:title], name: :on_title
|
1598
|
-
#{"add_foreign_key :adverts, :categories, column: :category_id, name: :
|
1599
|
-
"add_foreign_key :adverts, :categories, column: :c_id, name: :
|
1650
|
+
#{"add_foreign_key :adverts, :categories, column: :category_id, name: :index_adverts_on_category_id\n" +
|
1651
|
+
"add_foreign_key :adverts, :categories, column: :c_id, name: :index_adverts_on_c_id" if defined?(Mysql2)}
|
1600
1652
|
EOS
|
1601
1653
|
)
|
1602
1654
|
|
@@ -1614,8 +1666,8 @@ RSpec.describe 'DeclareSchema Migration Generator' do
|
|
1614
1666
|
migrate_up(<<~EOS.strip)
|
1615
1667
|
add_column :adverts, :title, :string, limit: 250, null: true#{charset_and_collation}
|
1616
1668
|
add_index :adverts, [:title], name: :on_title, unique: true
|
1617
|
-
#{"add_foreign_key :adverts, :categories, column: :category_id, name: :
|
1618
|
-
"add_foreign_key :adverts, :categories, column: :c_id, name: :
|
1669
|
+
#{"add_foreign_key :adverts, :categories, column: :category_id, name: :index_adverts_on_category_id\n" +
|
1670
|
+
"add_foreign_key :adverts, :categories, column: :c_id, name: :index_adverts_on_c_id" if defined?(Mysql2)}
|
1619
1671
|
EOS
|
1620
1672
|
)
|
1621
1673
|
|
@@ -1633,8 +1685,8 @@ RSpec.describe 'DeclareSchema Migration Generator' do
|
|
1633
1685
|
migrate_up(<<~EOS.strip)
|
1634
1686
|
add_column :adverts, :title, :string, limit: 250, null: true#{charset_and_collation}
|
1635
1687
|
add_index :adverts, [:title], name: :my_index
|
1636
|
-
#{"add_foreign_key :adverts, :categories, column: :category_id, name: :
|
1637
|
-
"add_foreign_key :adverts, :categories, column: :c_id, name: :
|
1688
|
+
#{"add_foreign_key :adverts, :categories, column: :category_id, name: :index_adverts_on_category_id\n" +
|
1689
|
+
"add_foreign_key :adverts, :categories, column: :c_id, name: :index_adverts_on_c_id" if defined?(Mysql2)}
|
1638
1690
|
EOS
|
1639
1691
|
)
|
1640
1692
|
|
@@ -1650,8 +1702,8 @@ RSpec.describe 'DeclareSchema Migration Generator' do
|
|
1650
1702
|
migrate_up(<<~EOS.strip)
|
1651
1703
|
add_column :adverts, :title, :string, limit: 250, null: true#{charset_and_collation}
|
1652
1704
|
add_index :adverts, [:title], name: :on_title
|
1653
|
-
#{"add_foreign_key :adverts, :categories, column: :category_id, name: :
|
1654
|
-
"add_foreign_key :adverts, :categories, column: :c_id, name: :
|
1705
|
+
#{"add_foreign_key :adverts, :categories, column: :category_id, name: :index_adverts_on_category_id\n" +
|
1706
|
+
"add_foreign_key :adverts, :categories, column: :c_id, name: :index_adverts_on_c_id" if defined?(Mysql2)}
|
1655
1707
|
EOS
|
1656
1708
|
)
|
1657
1709
|
|
@@ -1667,8 +1719,8 @@ RSpec.describe 'DeclareSchema Migration Generator' do
|
|
1667
1719
|
migrate_up(<<~EOS.strip)
|
1668
1720
|
add_column :adverts, :title, :string, limit: 250, null: true#{charset_and_collation}
|
1669
1721
|
add_index :adverts, [:title], name: :my_index, unique: true
|
1670
|
-
#{"add_foreign_key :adverts, :categories, column: :category_id, name: :
|
1671
|
-
"add_foreign_key :adverts, :categories, column: :c_id, name: :
|
1722
|
+
#{"add_foreign_key :adverts, :categories, column: :category_id, name: :index_adverts_on_category_id\n" +
|
1723
|
+
"add_foreign_key :adverts, :categories, column: :c_id, name: :index_adverts_on_c_id" if defined?(Mysql2)}
|
1672
1724
|
EOS
|
1673
1725
|
)
|
1674
1726
|
|
@@ -1684,8 +1736,8 @@ RSpec.describe 'DeclareSchema Migration Generator' do
|
|
1684
1736
|
migrate_up(<<~EOS.strip)
|
1685
1737
|
add_column :adverts, :title, :string, limit: 250, null: true#{charset_and_collation}
|
1686
1738
|
add_index :adverts, [:title, :category_id], name: :on_title_and_category_id
|
1687
|
-
#{"add_foreign_key :adverts, :categories, column: :category_id, name: :
|
1688
|
-
"add_foreign_key :adverts, :categories, column: :c_id, name: :
|
1739
|
+
#{"add_foreign_key :adverts, :categories, column: :category_id, name: :index_adverts_on_category_id\n" +
|
1740
|
+
"add_foreign_key :adverts, :categories, column: :c_id, name: :index_adverts_on_c_id" if defined?(Mysql2)}
|
1689
1741
|
EOS
|
1690
1742
|
)
|
1691
1743
|
|
@@ -1716,14 +1768,14 @@ RSpec.describe 'DeclareSchema Migration Generator' do
|
|
1716
1768
|
add_column :ads, :title, :string, limit: 250, null: true#{charset_and_collation}
|
1717
1769
|
add_column :ads, :body, :text#{', limit: 4294967295' if defined?(Mysql2)}, null: true#{charset_and_collation}
|
1718
1770
|
#{if defined?(Mysql2)
|
1719
|
-
"add_foreign_key :adverts, :categories, column: :category_id, name: :
|
1720
|
-
"add_foreign_key :adverts, :categories, column: :c_id, name: :
|
1771
|
+
"add_foreign_key :adverts, :categories, column: :category_id, name: :index_adverts_on_category_id\n" +
|
1772
|
+
"add_foreign_key :adverts, :categories, column: :c_id, name: :index_adverts_on_c_id"
|
1721
1773
|
end}
|
1722
1774
|
EOS
|
1723
1775
|
.and migrate_down(<<~EOS.strip)
|
1724
1776
|
#{if defined?(Mysql2)
|
1725
|
-
"remove_foreign_key :adverts, name: :
|
1726
|
-
"remove_foreign_key :adverts, name: :
|
1777
|
+
"remove_foreign_key :adverts, name: :index_adverts_on_c_id\n" +
|
1778
|
+
"remove_foreign_key :adverts, name: :index_adverts_on_category_id"
|
1727
1779
|
end}
|
1728
1780
|
remove_column :ads, :body
|
1729
1781
|
remove_column :ads, :title
|
@@ -1946,6 +1998,55 @@ RSpec.describe 'DeclareSchema Migration Generator' do
|
|
1946
1998
|
expect(Ad.field_specs['company'].options[:validates].inspect).to eq("{:presence=>true, :uniqueness=>{:case_sensitive=>false}}")
|
1947
1999
|
end
|
1948
2000
|
|
2001
|
+
context 'models with the same parent foreign key relation' do
|
2002
|
+
before do
|
2003
|
+
class Category < ActiveRecord::Base
|
2004
|
+
fields do
|
2005
|
+
name :string, limit: 250, null: true
|
2006
|
+
end
|
2007
|
+
end
|
2008
|
+
class Advertiser < ActiveRecord::Base
|
2009
|
+
fields do
|
2010
|
+
name :string, limit: 250, null: true
|
2011
|
+
end
|
2012
|
+
belongs_to :category, limit: 8
|
2013
|
+
end
|
2014
|
+
class Affiliate < ActiveRecord::Base
|
2015
|
+
fields do
|
2016
|
+
name :string, limit: 250, null: true
|
2017
|
+
end
|
2018
|
+
belongs_to :category, limit: 8
|
2019
|
+
end
|
2020
|
+
end
|
2021
|
+
|
2022
|
+
it 'will genereate unique constraint names' do
|
2023
|
+
expect(Generators::DeclareSchema::Migration::Migrator.run).to(
|
2024
|
+
migrate_up(<<~EOS.strip)
|
2025
|
+
create_table :categories, id: :bigint, options: "CHARACTER SET utf8mb4 COLLATE utf8mb4_bin" do |t|
|
2026
|
+
t.string :name, limit: 250, null: true, charset: "utf8mb4", collation: "utf8mb4_bin"
|
2027
|
+
end
|
2028
|
+
create_table :advertisers, id: :bigint, options: "CHARACTER SET utf8mb4 COLLATE utf8mb4_bin" do |t|
|
2029
|
+
t.string :name, limit: 250, null: true, charset: "utf8mb4", collation: "utf8mb4_bin"
|
2030
|
+
t.integer :category_id, limit: 8, null: false
|
2031
|
+
end
|
2032
|
+
create_table :affiliates, id: :bigint, options: "CHARACTER SET utf8mb4 COLLATE utf8mb4_bin" do |t|
|
2033
|
+
t.string :name, limit: 250, null: true, charset: "utf8mb4", collation: "utf8mb4_bin"
|
2034
|
+
t.integer :category_id, limit: 8, null: false
|
2035
|
+
end
|
2036
|
+
add_index :advertisers, [:category_id], name: :on_category_id
|
2037
|
+
add_index :affiliates, [:category_id], name: :on_category_id
|
2038
|
+
add_foreign_key :advertisers, :categories, column: :category_id, name: :index_advertisers_on_category_id
|
2039
|
+
add_foreign_key :affiliates, :categories, column: :category_id, name: :index_affiliates_on_category_id
|
2040
|
+
EOS
|
2041
|
+
)
|
2042
|
+
binding.pry
|
2043
|
+
migrate
|
2044
|
+
|
2045
|
+
nuke_model_class(Advertiser)
|
2046
|
+
nuke_model_class(Affiliate)
|
2047
|
+
end
|
2048
|
+
end if !defined?(SQLite3) && ActiveRecord::VERSION::MAJOR >= 5
|
2049
|
+
|
1949
2050
|
describe 'serialize' do
|
1950
2051
|
before do
|
1951
2052
|
class Ad < ActiveRecord::Base
|
@@ -2130,8 +2231,8 @@ RSpec.describe 'DeclareSchema Migration Generator' do
|
|
2130
2231
|
end
|
2131
2232
|
end
|
2132
2233
|
|
2133
|
-
context "for Rails #{
|
2134
|
-
if
|
2234
|
+
context "for Rails #{ActiveSupport::VERSION::MAJOR}" do
|
2235
|
+
if ActiveSupport::VERSION::MAJOR >= 5
|
2135
2236
|
let(:optional_true) { { optional: true } }
|
2136
2237
|
let(:optional_false) { { optional: false } }
|
2137
2238
|
else
|
@@ -2237,13 +2338,13 @@ RSpec.describe 'DeclareSchema Migration Generator' do
|
|
2237
2338
|
migration_content = File.read(migrations.first)
|
2238
2339
|
first_line = migration_content.split("\n").first
|
2239
2340
|
base_class = first_line.split(' < ').last
|
2240
|
-
expect(base_class).to eq("(
|
2341
|
+
expect(base_class).to eq("(ActiveSupport::VERSION::MAJOR >= 5 ? ActiveRecord::Migration[4.2] : ActiveRecord::Migration)")
|
2241
2342
|
end
|
2242
2343
|
end
|
2243
2344
|
|
2244
2345
|
context 'Does not generate migrations' do
|
2245
2346
|
it 'for aliased fields bigint -> integer limit 8' do
|
2246
|
-
if
|
2347
|
+
if ActiveSupport::VERSION::MAJOR >= 5 || !ActiveRecord::Base.connection.class.name.match?(/SQLite3Adapter/)
|
2247
2348
|
class Advert < active_record_base_class.constantize
|
2248
2349
|
declare_schema do
|
2249
2350
|
bigint :price
|
@@ -2255,7 +2356,7 @@ RSpec.describe 'DeclareSchema Migration Generator' do
|
|
2255
2356
|
migrations = Dir.glob('db/migrate/*declare_schema_migration*.rb')
|
2256
2357
|
expect(migrations.size).to eq(1), migrations.inspect
|
2257
2358
|
|
2258
|
-
if defined?(Mysql2) &&
|
2359
|
+
if defined?(Mysql2) && ActiveSupport::VERSION::MAJOR < 5
|
2259
2360
|
ActiveRecord::Base.connection.execute("ALTER TABLE adverts ADD PRIMARY KEY (id)")
|
2260
2361
|
end
|
2261
2362
|
|
@@ -1,7 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require 'rails'
|
4
|
-
|
5
3
|
begin
|
6
4
|
require 'mysql2'
|
7
5
|
rescue LoadError
|
@@ -16,7 +14,7 @@ RSpec.describe DeclareSchema::Model::Column do
|
|
16
14
|
|
17
15
|
describe 'class methods' do
|
18
16
|
describe '.native_type?' do
|
19
|
-
if
|
17
|
+
if ActiveSupport::VERSION::MAJOR >= 5
|
20
18
|
let(:native_types) { [:string, :text, :integer, :float, :decimal, :datetime, :time, :date, :binary, :boolean, :json] }
|
21
19
|
else
|
22
20
|
let(:native_types) { [:string, :text, :integer, :float, :decimal, :datetime, :time, :date, :binary, :boolean] }
|
@@ -65,9 +63,7 @@ RSpec.describe DeclareSchema::Model::Column do
|
|
65
63
|
end
|
66
64
|
|
67
65
|
describe '.deserialize_default_value' do
|
68
|
-
|
69
|
-
|
70
|
-
if ::Rails::VERSION::MAJOR >= 5
|
66
|
+
if ::ActiveSupport::VERSION::MAJOR >= 5
|
71
67
|
it 'deserializes :boolean' do
|
72
68
|
expect(described_class.deserialize_default_value(nil, :boolean, 'true')).to eq(true)
|
73
69
|
expect(described_class.deserialize_default_value(nil, :boolean, 'false')).to eq(false)
|
@@ -26,7 +26,7 @@ RSpec.describe DeclareSchema::Model::ForeignKeyDefinition do
|
|
26
26
|
subject { described_class.new(model, foreign_key, options)}
|
27
27
|
|
28
28
|
before do
|
29
|
-
allow(connection).to receive(:index_name).with(
|
29
|
+
allow(model.connection).to receive(:index_name).with(any_args) { 'index_on_network_id' }
|
30
30
|
end
|
31
31
|
|
32
32
|
describe '#initialize' do
|
@@ -36,7 +36,7 @@ RSpec.describe DeclareSchema::Model::ForeignKeyDefinition do
|
|
36
36
|
end
|
37
37
|
|
38
38
|
context 'when most options passed' do
|
39
|
-
let(:options) { { parent_table: :networks, foreign_key: :the_network_id
|
39
|
+
let(:options) { { parent_table: :networks, foreign_key: :the_network_id } }
|
40
40
|
|
41
41
|
it 'normalizes symbols to strings' do
|
42
42
|
expect(subject.foreign_key).to eq('network_id')
|
@@ -50,8 +50,7 @@ RSpec.describe DeclareSchema::Model::ForeignKeyDefinition do
|
|
50
50
|
|
51
51
|
context 'when all options passed' do
|
52
52
|
let(:foreign_key) { nil }
|
53
|
-
let(:options) { { parent_table: :networks, foreign_key: :the_network_id,
|
54
|
-
constraint_name: :constraint_1, dependent: :delete } }
|
53
|
+
let(:options) { { parent_table: :networks, foreign_key: :the_network_id, constraint_name: :constraint_1, dependent: :delete } }
|
55
54
|
|
56
55
|
it 'normalizes symbols to strings' do
|
57
56
|
expect(subject.foreign_key).to be_nil
|
@@ -61,6 +60,19 @@ RSpec.describe DeclareSchema::Model::ForeignKeyDefinition do
|
|
61
60
|
expect(subject.on_delete_cascade).to be_truthy
|
62
61
|
end
|
63
62
|
end
|
63
|
+
|
64
|
+
context 'when constraint name passed as empty string' do
|
65
|
+
let(:options) { { constraint_name: "" } }
|
66
|
+
it 'defaults to rails constraint name' do
|
67
|
+
expect(subject.constraint_name).to eq("index_on_network_id")
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
context 'when no constraint name passed' do
|
72
|
+
it 'defaults to rails constraint name' do
|
73
|
+
expect(subject.constraint_name).to eq("index_on_network_id")
|
74
|
+
end
|
75
|
+
end
|
64
76
|
end
|
65
77
|
end
|
66
78
|
|
@@ -107,7 +119,7 @@ RSpec.describe DeclareSchema::Model::ForeignKeyDefinition do
|
|
107
119
|
subject { described_class.new(model, foreign_key, options)}
|
108
120
|
|
109
121
|
before do
|
110
|
-
allow(connection).to receive(:index_name).with(
|
122
|
+
allow(model.connection).to receive(:index_name).with(any_args) { 'index_on_network_id' }
|
111
123
|
end
|
112
124
|
|
113
125
|
describe '#initialize' do
|
@@ -117,7 +129,7 @@ RSpec.describe DeclareSchema::Model::ForeignKeyDefinition do
|
|
117
129
|
end
|
118
130
|
|
119
131
|
context 'when most options passed' do
|
120
|
-
let(:options) { { parent_table: :networks, foreign_key: :the_network_id
|
132
|
+
let(:options) { { parent_table: :networks, foreign_key: :the_network_id } }
|
121
133
|
|
122
134
|
it 'normalizes symbols to strings' do
|
123
135
|
expect(subject.foreign_key).to eq('network_id')
|
@@ -131,8 +143,7 @@ RSpec.describe DeclareSchema::Model::ForeignKeyDefinition do
|
|
131
143
|
|
132
144
|
context 'when all options passed' do
|
133
145
|
let(:foreign_key) { nil }
|
134
|
-
let(:options) { { parent_table: :networks, foreign_key: :the_network_id,
|
135
|
-
constraint_name: :constraint_1, dependent: :delete } }
|
146
|
+
let(:options) { { parent_table: :networks, foreign_key: :the_network_id, constraint_name: :constraint_1, dependent: :delete } }
|
136
147
|
|
137
148
|
it 'normalizes symbols to strings' do
|
138
149
|
expect(subject.foreign_key).to be_nil
|
@@ -142,6 +153,19 @@ RSpec.describe DeclareSchema::Model::ForeignKeyDefinition do
|
|
142
153
|
expect(subject.on_delete_cascade).to be_truthy
|
143
154
|
end
|
144
155
|
end
|
156
|
+
|
157
|
+
context 'when constraint name passed as empty string' do
|
158
|
+
let(:options) { { constraint_name: "" } }
|
159
|
+
it 'defaults to rails constraint name' do
|
160
|
+
expect(subject.constraint_name).to eq("index_on_network_id")
|
161
|
+
end
|
162
|
+
end
|
163
|
+
|
164
|
+
context 'when no constraint name passed' do
|
165
|
+
it 'defaults to rails constraint name' do
|
166
|
+
expect(subject.constraint_name).to eq("index_on_network_id")
|
167
|
+
end
|
168
|
+
end
|
145
169
|
end
|
146
170
|
end
|
147
171
|
|
@@ -75,7 +75,7 @@ RSpec.describe DeclareSchema::Model::IndexDefinition do
|
|
75
75
|
ActiveRecord::Base.connection.execute <<~EOS
|
76
76
|
CREATE TABLE index_definition_test_models (
|
77
77
|
id INTEGER NOT NULL PRIMARY KEY,
|
78
|
-
name #{if defined?(
|
78
|
+
name #{if defined?(SQLite3) then 'TEXT' else 'VARCHAR(255)' end} NOT NULL
|
79
79
|
)
|
80
80
|
EOS
|
81
81
|
ActiveRecord::Base.connection.execute <<~EOS
|
@@ -110,7 +110,7 @@ RSpec.describe DeclareSchema::Model::IndexDefinition do
|
|
110
110
|
let(:model_class) { IndexDefinitionCompoundIndexModel }
|
111
111
|
|
112
112
|
it 'returns the indexes for the model' do
|
113
|
-
if
|
113
|
+
if ActiveSupport::VERSION::MAJOR < 5
|
114
114
|
expect(model_class.connection).to receive(:primary_key).with('index_definition_compound_index_models').and_return(nil)
|
115
115
|
connection_stub = instance_double(ActiveRecord::Base.connection.class, "connection")
|
116
116
|
expect(connection_stub).to receive(:indexes).
|
@@ -184,7 +184,7 @@ RSpec.describe DeclareSchema::Model::IndexDefinition do
|
|
184
184
|
ActiveRecord::Base.connection.execute <<~EOS
|
185
185
|
CREATE TABLE index_definition_test_models (
|
186
186
|
id INTEGER NOT NULL PRIMARY KEY,
|
187
|
-
name #{if defined?(
|
187
|
+
name #{if defined?(SQLite3) then 'TEXT' else 'VARCHAR(255)' end} NOT NULL
|
188
188
|
)
|
189
189
|
EOS
|
190
190
|
ActiveRecord::Base.connection.execute <<~EOS
|
@@ -219,7 +219,7 @@ RSpec.describe DeclareSchema::Model::IndexDefinition do
|
|
219
219
|
let(:model_class) { IndexDefinitionCompoundIndexModel }
|
220
220
|
|
221
221
|
it 'returns the indexes for the model' do
|
222
|
-
if
|
222
|
+
if ActiveSupport::VERSION::MAJOR < 5
|
223
223
|
expect(model_class.connection).to receive(:primary_key).with('index_definition_compound_index_models').and_return(nil)
|
224
224
|
connection_stub = instance_double(ActiveRecord::Base.connection.class, "connection")
|
225
225
|
expect(connection_stub).to receive(:indexes).
|
data/spec/spec_helper.rb
CHANGED
@@ -27,7 +27,7 @@ RSpec.configure do |config|
|
|
27
27
|
RSpec::Support::ObjectFormatter.default_instance.max_formatted_output_length = 2_000
|
28
28
|
|
29
29
|
def active_record_base_class
|
30
|
-
if
|
30
|
+
if ActiveSupport::VERSION::MAJOR == 4
|
31
31
|
'ActiveRecord::Base'
|
32
32
|
else
|
33
33
|
'ApplicationRecord'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: declare_schema
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.11.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Invoca Development adapted from hobo_fields by Tom Locke
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-03-
|
11
|
+
date: 2021-03-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -128,7 +128,7 @@ homepage: https://github.com/Invoca/declare_schema
|
|
128
128
|
licenses: []
|
129
129
|
metadata:
|
130
130
|
allowed_push_host: https://rubygems.org
|
131
|
-
post_install_message:
|
131
|
+
post_install_message:
|
132
132
|
rdoc_options: []
|
133
133
|
require_paths:
|
134
134
|
- lib
|
@@ -144,7 +144,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
144
144
|
version: 1.3.6
|
145
145
|
requirements: []
|
146
146
|
rubygems_version: 3.0.3
|
147
|
-
signing_key:
|
147
|
+
signing_key:
|
148
148
|
specification_version: 4
|
149
149
|
summary: Database schema declaration and migration generator for Rails
|
150
150
|
test_files: []
|