Skip to content

Commit 5cad1ef

Browse files
authored
Merge pull request rails#53396 from kamipo/rename_enum_accepts_two_name_arguments
Allow `rename_enum` accepts two from/to name arguments as `rename_table` does so
2 parents fa96398 + 769d6ed commit 5cad1ef

File tree

5 files changed

+25
-14
lines changed

5 files changed

+25
-14
lines changed

activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -575,8 +575,10 @@ def drop_enum(name, values = nil, **options)
575575
end
576576

577577
# Rename an existing enum type to something else.
578-
def rename_enum(name, **options)
579-
new_name = options.fetch(:to) { raise ArgumentError, ":to is required" }
578+
def rename_enum(name, new_name = nil, **options)
579+
new_name ||= options.fetch(:to) do
580+
raise ArgumentError, "rename_enum requires two from/to name positional arguments."
581+
end
580582

581583
exec_query("ALTER TYPE #{quote_table_name(name)} RENAME TO #{quote_table_name(new_name)}").tap { reload_type_map }
582584
end

activerecord/lib/active_record/migration/command_recorder.rb

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ class Migration
4040
# * remove_reference
4141
# * remove_timestamps
4242
# * rename_column
43-
# * rename_enum (must supply a +:to+ option)
43+
# * rename_enum
4444
# * rename_enum_value (must supply a +:from+ and +:to+ option)
4545
# * rename_index
4646
# * rename_table
@@ -364,13 +364,13 @@ def invert_drop_enum(args)
364364
end
365365

366366
def invert_rename_enum(args)
367-
name, options = args
367+
name, new_name, = args
368368

369-
unless options.is_a?(Hash) && options.has_key?(:to)
370-
raise ActiveRecord::IrreversibleMigration, "rename_enum is only reversible if given a :to option."
369+
if new_name.is_a?(Hash) && new_name.key?(:to)
370+
new_name = new_name[:to]
371371
end
372372

373-
[:rename_enum, [options[:to], to: name]]
373+
[:rename_enum, [new_name, name]]
374374
end
375375

376376
def invert_rename_enum_value(args)

activerecord/test/cases/adapters/postgresql/enum_test.rb

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,16 @@ def test_schema_dump
112112
end
113113

114114
def test_schema_dump_renamed_enum
115+
@connection.rename_enum :mood, :feeling
116+
117+
output = dump_table_schema("postgresql_enums")
118+
119+
assert_includes output, 'create_enum "feeling", ["sad", "ok", "happy"]'
120+
121+
assert_includes output, 't.enum "current_mood", enum_type: "feeling"'
122+
end
123+
124+
def test_schema_dump_renamed_enum_with_to_option
115125
@connection.rename_enum :mood, to: :feeling
116126

117127
output = dump_table_schema("postgresql_enums")

activerecord/test/cases/migration/command_recorder_test.rb

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -552,14 +552,13 @@ def test_invert_drop_enum_without_values
552552
end
553553

554554
def test_invert_rename_enum
555-
enum = @recorder.inverse_of :rename_enum, [:dog_breed, to: :breed]
556-
assert_equal [:rename_enum, [:breed, to: :dog_breed]], enum
555+
enum = @recorder.inverse_of :rename_enum, [:dog_breed, :breed]
556+
assert_equal [:rename_enum, [:breed, :dog_breed]], enum
557557
end
558558

559-
def test_invert_rename_enum_without_to
560-
assert_raises(ActiveRecord::IrreversibleMigration) do
561-
@recorder.inverse_of :rename_enum, [:breed]
562-
end
559+
def test_invert_rename_enum_with_to_option
560+
enum = @recorder.inverse_of :rename_enum, [:dog_breed, to: :breed]
561+
assert_equal [:rename_enum, [:breed, :dog_breed]], enum
563562
end
564563

565564
def test_invert_add_enum_value

guides/source/active_record_postgresql.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -320,7 +320,7 @@ usage:
320320
```ruby
321321
# db/migrate/20150718144917_rename_article_status.rb
322322
def change
323-
rename_enum :article_status, to: :article_state
323+
rename_enum :article_status, :article_state
324324
end
325325
```
326326

0 commit comments

Comments
 (0)