diff options
author | Ryuta Kamizono <kamipo@gmail.com> | 2018-11-08 10:42:01 +0900 |
---|---|---|
committer | Ryuta Kamizono <kamipo@gmail.com> | 2018-11-08 10:42:01 +0900 |
commit | 6ee0d8f75dd9608e305491b54e6962f4ccba60a5 (patch) | |
tree | 9d352e74091acd7a16d78276b98ce0e276f78887 /activerecord | |
parent | 5df4efd2fd08dfdf8583bcb6a4322aa5997c18e1 (diff) | |
parent | 25f1cbdecd4f506b46a6c476f18074dafdb581f2 (diff) | |
download | rails-6ee0d8f75dd9608e305491b54e6962f4ccba60a5.tar.gz rails-6ee0d8f75dd9608e305491b54e6962f4ccba60a5.tar.bz2 rails-6ee0d8f75dd9608e305491b54e6962f4ccba60a5.zip |
Merge pull request #34385 from christophemaximin/guard-enum-empty-keys
Guard Enums against definitions with blank label names
Diffstat (limited to 'activerecord')
-rw-r--r-- | activerecord/CHANGELOG.md | 4 | ||||
-rw-r--r-- | activerecord/lib/active_record/enum.rb | 4 | ||||
-rw-r--r-- | activerecord/test/cases/enum_test.rb | 18 |
3 files changed, 26 insertions, 0 deletions
diff --git a/activerecord/CHANGELOG.md b/activerecord/CHANGELOG.md index f42aa4c5cf..f57ca1854f 100644 --- a/activerecord/CHANGELOG.md +++ b/activerecord/CHANGELOG.md @@ -1,3 +1,7 @@ +* Defining an Enum as a Hash with blank key, or as an Array with a blank value, now raises an `ArgumentError`. + + *Christophe Maximin* + * Adds support for multiple databases to `rails db:schema:cache:dump` and `rails db:schema:cache:clear`. *Gannon McGibbon* diff --git a/activerecord/lib/active_record/enum.rb b/activerecord/lib/active_record/enum.rb index 3d97e4e513..3a600835e1 100644 --- a/activerecord/lib/active_record/enum.rb +++ b/activerecord/lib/active_record/enum.rb @@ -218,6 +218,10 @@ module ActiveRecord MSG raise ArgumentError, error_message end + + if values.is_a?(Hash) && values.keys.any?(&:blank?) || values.is_a?(Array) && values.any?(&:blank?) + raise ArgumentError, "Enum label name must not be blank." + end end ENUM_CONFLICT_MESSAGE = \ diff --git a/activerecord/test/cases/enum_test.rb b/activerecord/test/cases/enum_test.rb index b4593ccdf2..867ce7082b 100644 --- a/activerecord/test/cases/enum_test.rb +++ b/activerecord/test/cases/enum_test.rb @@ -274,6 +274,24 @@ class EnumTest < ActiveRecord::TestCase end assert_match(/must be either a hash, an array of symbols, or an array of strings./, e.message) + + e = assert_raises(ArgumentError) do + Class.new(ActiveRecord::Base) do + self.table_name = "books" + enum status: { "" => 1, "active" => 2 } + end + end + + assert_match(/Enum label name must not be blank/, e.message) + + e = assert_raises(ArgumentError) do + Class.new(ActiveRecord::Base) do + self.table_name = "books" + enum status: ["active", ""] + end + end + + assert_match(/Enum label name must not be blank/, e.message) end test "reserved enum names" do |