declare_schema 0.9.0 → 0.11.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/workflows/declare_schema_build.yml +1 -1
- data/CHANGELOG.md +32 -0
- data/Gemfile.lock +1 -1
- data/README.md +12 -2
- data/lib/declare_schema.rb +12 -1
- data/lib/declare_schema/dsl.rb +39 -0
- data/lib/declare_schema/extensions/active_record/fields_declaration.rb +22 -3
- data/lib/declare_schema/model.rb +4 -6
- data/lib/declare_schema/model/column.rb +1 -1
- data/lib/declare_schema/model/foreign_key_definition.rb +6 -11
- data/lib/declare_schema/model/index_definition.rb +1 -20
- data/lib/declare_schema/schema_change/all.rb +22 -0
- data/lib/declare_schema/schema_change/base.rb +45 -0
- data/lib/declare_schema/schema_change/column_add.rb +27 -0
- data/lib/declare_schema/schema_change/column_change.rb +32 -0
- data/lib/declare_schema/schema_change/column_remove.rb +20 -0
- data/lib/declare_schema/schema_change/column_rename.rb +23 -0
- data/lib/declare_schema/schema_change/foreign_key_add.rb +25 -0
- data/lib/declare_schema/schema_change/foreign_key_remove.rb +20 -0
- data/lib/declare_schema/schema_change/index_add.rb +33 -0
- data/lib/declare_schema/schema_change/index_remove.rb +20 -0
- data/lib/declare_schema/schema_change/primary_key_change.rb +33 -0
- data/lib/declare_schema/schema_change/table_add.rb +37 -0
- data/lib/declare_schema/schema_change/table_change.rb +36 -0
- data/lib/declare_schema/schema_change/table_remove.rb +22 -0
- data/lib/declare_schema/schema_change/table_rename.rb +22 -0
- data/lib/declare_schema/version.rb +1 -1
- data/lib/generators/declare_schema/migration/USAGE +14 -24
- data/lib/generators/declare_schema/migration/migration_generator.rb +40 -38
- data/lib/generators/declare_schema/migration/migrator.rb +175 -177
- data/lib/generators/declare_schema/migration/templates/migration.rb.erb +3 -3
- data/lib/generators/declare_schema/support/model.rb +4 -4
- data/spec/lib/declare_schema/api_spec.rb +8 -8
- data/spec/lib/declare_schema/field_declaration_dsl_spec.rb +41 -15
- data/spec/lib/declare_schema/field_spec_spec.rb +2 -2
- data/spec/lib/declare_schema/generator_spec.rb +5 -5
- data/spec/lib/declare_schema/interactive_primary_key_spec.rb +117 -28
- data/spec/lib/declare_schema/migration_generator_spec.rb +1990 -843
- data/spec/lib/declare_schema/model/column_spec.rb +49 -23
- data/spec/lib/declare_schema/model/foreign_key_definition_spec.rb +158 -57
- data/spec/lib/declare_schema/model/habtm_model_shim_spec.rb +0 -2
- data/spec/lib/declare_schema/model/index_definition_spec.rb +189 -78
- data/spec/lib/declare_schema/model/table_options_definition_spec.rb +75 -11
- data/spec/lib/declare_schema/schema_change/base_spec.rb +75 -0
- data/spec/lib/declare_schema/schema_change/column_add_spec.rb +30 -0
- data/spec/lib/declare_schema/schema_change/column_change_spec.rb +33 -0
- data/spec/lib/declare_schema/schema_change/column_remove_spec.rb +30 -0
- data/spec/lib/declare_schema/schema_change/column_rename_spec.rb +28 -0
- data/spec/lib/declare_schema/schema_change/foreign_key_add_spec.rb +29 -0
- data/spec/lib/declare_schema/schema_change/foreign_key_remove_spec.rb +29 -0
- data/spec/lib/declare_schema/schema_change/index_add_spec.rb +56 -0
- data/spec/lib/declare_schema/schema_change/index_remove_spec.rb +29 -0
- data/spec/lib/declare_schema/schema_change/primary_key_change_spec.rb +69 -0
- data/spec/lib/declare_schema/schema_change/table_add_spec.rb +50 -0
- data/spec/lib/declare_schema/schema_change/table_change_spec.rb +30 -0
- data/spec/lib/declare_schema/schema_change/table_remove_spec.rb +27 -0
- data/spec/lib/declare_schema/schema_change/table_rename_spec.rb +27 -0
- data/spec/lib/generators/declare_schema/migration/migrator_spec.rb +59 -11
- data/spec/spec_helper.rb +1 -1
- data/spec/support/acceptance_spec_helpers.rb +2 -2
- metadata +35 -6
- data/test_responses.txt +0 -2
@@ -0,0 +1,32 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'base'
|
4
|
+
|
5
|
+
module DeclareSchema
|
6
|
+
module SchemaChange
|
7
|
+
class ColumnChange < Base
|
8
|
+
def initialize(table_name, column_name, old_type:, old_options:, new_type:, new_options:)
|
9
|
+
@table_name = table_name
|
10
|
+
@column_name = column_name
|
11
|
+
@old_type = old_type
|
12
|
+
@old_options = old_options
|
13
|
+
@new_type = new_type
|
14
|
+
@new_options = new_options
|
15
|
+
end
|
16
|
+
|
17
|
+
def up_command
|
18
|
+
"change_column #{[@table_name.to_sym.inspect,
|
19
|
+
@column_name.to_sym.inspect,
|
20
|
+
@new_type.to_sym.inspect,
|
21
|
+
*self.class.format_options(@new_options)].join(", ")}"
|
22
|
+
end
|
23
|
+
|
24
|
+
def down_command
|
25
|
+
"change_column #{[@table_name.to_sym.inspect,
|
26
|
+
@column_name.to_sym.inspect,
|
27
|
+
@old_type.to_sym.inspect,
|
28
|
+
*self.class.format_options(@old_options)].join(", ")}"
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'column_add'
|
4
|
+
|
5
|
+
module DeclareSchema
|
6
|
+
module SchemaChange
|
7
|
+
class ColumnRemove < ColumnAdd
|
8
|
+
alias column_add_up_command up_command
|
9
|
+
alias column_add_down_command down_command
|
10
|
+
|
11
|
+
def up_command
|
12
|
+
column_add_down_command
|
13
|
+
end
|
14
|
+
|
15
|
+
def down_command
|
16
|
+
column_add_up_command
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'base'
|
4
|
+
|
5
|
+
module DeclareSchema
|
6
|
+
module SchemaChange
|
7
|
+
class ColumnRename < Base
|
8
|
+
def initialize(table_name, old_name, new_name)
|
9
|
+
@table_name = table_name
|
10
|
+
@old_name = old_name
|
11
|
+
@new_name = new_name
|
12
|
+
end
|
13
|
+
|
14
|
+
def up_command
|
15
|
+
"rename_column #{@table_name.to_sym.inspect}, #{@old_name.to_sym.inspect}, #{@new_name.to_sym.inspect}"
|
16
|
+
end
|
17
|
+
|
18
|
+
def down_command
|
19
|
+
"rename_column #{@table_name.to_sym.inspect}, #{@new_name.to_sym.inspect}, #{@old_name.to_sym.inspect}"
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'base'
|
4
|
+
|
5
|
+
module DeclareSchema
|
6
|
+
module SchemaChange
|
7
|
+
class ForeignKeyAdd < Base
|
8
|
+
def initialize(table_name, parent_table_name, column_name:, name:)
|
9
|
+
@table_name = table_name
|
10
|
+
@parent_table_name = parent_table_name
|
11
|
+
@column_name = column_name
|
12
|
+
@name = name
|
13
|
+
end
|
14
|
+
|
15
|
+
def up_command
|
16
|
+
"add_foreign_key #{@table_name.to_sym.inspect}, #{@parent_table_name.to_sym.inspect}, " +
|
17
|
+
"column: #{@column_name.to_sym.inspect}, name: #{@name.to_sym.inspect}"
|
18
|
+
end
|
19
|
+
|
20
|
+
def down_command
|
21
|
+
"remove_foreign_key #{@table_name.to_sym.inspect}, name: #{@name.to_sym.inspect}"
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'foreign_key_add'
|
4
|
+
|
5
|
+
module DeclareSchema
|
6
|
+
module SchemaChange
|
7
|
+
class ForeignKeyRemove < ForeignKeyAdd
|
8
|
+
alias index_add_up_command up_command
|
9
|
+
alias index_add_down_command down_command
|
10
|
+
|
11
|
+
def up_command
|
12
|
+
index_add_down_command
|
13
|
+
end
|
14
|
+
|
15
|
+
def down_command
|
16
|
+
index_add_up_command
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'base'
|
4
|
+
|
5
|
+
module DeclareSchema
|
6
|
+
module SchemaChange
|
7
|
+
class IndexAdd < Base
|
8
|
+
def initialize(table_name, column_names, name:, unique:, where: nil)
|
9
|
+
@table_name = table_name
|
10
|
+
@column_names = column_names
|
11
|
+
@name = name
|
12
|
+
@unique = unique
|
13
|
+
@where = where.presence
|
14
|
+
end
|
15
|
+
|
16
|
+
def up_command
|
17
|
+
options = {
|
18
|
+
name: @name.to_sym,
|
19
|
+
}
|
20
|
+
options[:unique] = true if @unique
|
21
|
+
options[:where] = @where if @where
|
22
|
+
|
23
|
+
"add_index #{[@table_name.to_sym.inspect,
|
24
|
+
@column_names.map(&:to_sym).inspect,
|
25
|
+
*self.class.format_options(options)].join(', ')}"
|
26
|
+
end
|
27
|
+
|
28
|
+
def down_command
|
29
|
+
"remove_index #{@table_name.to_sym.inspect}, name: #{@name.to_sym.inspect}"
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'index_add'
|
4
|
+
|
5
|
+
module DeclareSchema
|
6
|
+
module SchemaChange
|
7
|
+
class IndexRemove < IndexAdd
|
8
|
+
alias index_add_up_command up_command
|
9
|
+
alias index_add_down_command down_command
|
10
|
+
|
11
|
+
def up_command
|
12
|
+
index_add_down_command
|
13
|
+
end
|
14
|
+
|
15
|
+
def down_command
|
16
|
+
index_add_up_command
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'base'
|
4
|
+
|
5
|
+
module DeclareSchema
|
6
|
+
module SchemaChange
|
7
|
+
class PrimaryKeyChange < Base
|
8
|
+
def initialize(table_name, old_column_names, new_column_names)
|
9
|
+
@table_name = table_name
|
10
|
+
@old_column_names = old_column_names.presence
|
11
|
+
@new_column_names = new_column_names.presence
|
12
|
+
end
|
13
|
+
|
14
|
+
def up_command
|
15
|
+
alter_primary_key(@old_column_names, @new_column_names)
|
16
|
+
end
|
17
|
+
|
18
|
+
def down_command
|
19
|
+
alter_primary_key(@new_column_names, @old_column_names)
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def alter_primary_key(old_col_names, new_col_names)
|
25
|
+
drop_command = "DROP PRIMARY KEY" if old_col_names
|
26
|
+
add_command = "ADD PRIMARY KEY (#{new_col_names.join(', ')})" if new_col_names
|
27
|
+
commands = [drop_command, add_command].compact.join(', ')
|
28
|
+
statement = "ALTER TABLE #{ActiveRecord::Base.connection.quote_table_name(@table_name)} #{commands}"
|
29
|
+
"execute #{statement.inspect}"
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'base'
|
4
|
+
|
5
|
+
module DeclareSchema
|
6
|
+
module SchemaChange
|
7
|
+
class TableAdd < Base
|
8
|
+
def initialize(table_name, fields, create_table_options, sql_options: nil)
|
9
|
+
@table_name = table_name
|
10
|
+
fields.all? do |type, name, options|
|
11
|
+
type.is_a?(Symbol) && name.is_a?(Symbol) && options.is_a?(Hash)
|
12
|
+
end or raise ArgumentError, "fields must be Array(Array(Symbol, Symbol, Hash)); got #{fields.inspect}"
|
13
|
+
@fields = fields
|
14
|
+
@create_table_options = create_table_options
|
15
|
+
@create_table_options = @create_table_options.merge(options: sql_options) if sql_options.present?
|
16
|
+
end
|
17
|
+
|
18
|
+
def up_command
|
19
|
+
longest_field_type_length = @fields.map { |type, _name, _option| type.to_s.length }.max
|
20
|
+
|
21
|
+
<<~EOS.strip
|
22
|
+
create_table #{[@table_name.to_sym.inspect, *self.class.format_options(@create_table_options)].join(', ')} do |t|
|
23
|
+
#{@fields.map do |type, name, options|
|
24
|
+
padded_type = format("%-*s", longest_field_type_length, type)
|
25
|
+
args = [name.inspect, *self.class.format_options(options)].join(', ')
|
26
|
+
" t.#{padded_type} #{args}"
|
27
|
+
end.join("\n")}
|
28
|
+
end
|
29
|
+
EOS
|
30
|
+
end
|
31
|
+
|
32
|
+
def down_command
|
33
|
+
"drop_table #{@table_name.to_sym.inspect}"
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'base'
|
4
|
+
|
5
|
+
module DeclareSchema
|
6
|
+
module SchemaChange
|
7
|
+
class TableChange < Base
|
8
|
+
def initialize(table_name, old_options, new_options)
|
9
|
+
@table_name = table_name
|
10
|
+
@old_options = old_options
|
11
|
+
@new_options = new_options
|
12
|
+
end
|
13
|
+
|
14
|
+
def up_command
|
15
|
+
alter_table(@table_name, @new_options)
|
16
|
+
end
|
17
|
+
|
18
|
+
def down_command
|
19
|
+
alter_table(@table_name, @old_options)
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
TABLE_OPTIONS_TO_SQL_MAPPINGS = {
|
25
|
+
charset: 'CHARACTER SET',
|
26
|
+
collation: 'COLLATE'
|
27
|
+
}.freeze
|
28
|
+
|
29
|
+
def alter_table(table_name, options)
|
30
|
+
sql_options = options.map { |key, value| [TABLE_OPTIONS_TO_SQL_MAPPINGS[key], value] }
|
31
|
+
statement = "ALTER TABLE #{ActiveRecord::Base.connection.quote_table_name(table_name)} #{sql_options.join(' ')}"
|
32
|
+
"execute #{statement.inspect}"
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'base'
|
4
|
+
|
5
|
+
module DeclareSchema
|
6
|
+
module SchemaChange
|
7
|
+
class TableRemove < Base
|
8
|
+
def initialize(table_name, add_table_back)
|
9
|
+
@table_name = table_name
|
10
|
+
@add_table_back = add_table_back
|
11
|
+
end
|
12
|
+
|
13
|
+
def up_command
|
14
|
+
"drop_table #{@table_name.to_sym.inspect}"
|
15
|
+
end
|
16
|
+
|
17
|
+
def down_command
|
18
|
+
@add_table_back
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'base'
|
4
|
+
|
5
|
+
module DeclareSchema
|
6
|
+
module SchemaChange
|
7
|
+
class TableRename < Base
|
8
|
+
def initialize(old_name, new_name)
|
9
|
+
@old_name = old_name
|
10
|
+
@new_name = new_name
|
11
|
+
end
|
12
|
+
|
13
|
+
def up_command
|
14
|
+
"rename_table #{@old_name.to_sym.inspect}, #{@new_name.to_sym.inspect}"
|
15
|
+
end
|
16
|
+
|
17
|
+
def down_command
|
18
|
+
"rename_table #{@new_name.to_sym.inspect}, #{@old_name.to_sym.inspect}"
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -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.strip, 4)
|
77
|
+
@down = indent(down.strip, 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
|