diff options
author | Alberto Almagro <albertoalmagro@gmail.com> | 2018-10-06 18:08:45 +0200 |
---|---|---|
committer | Alberto Almagro <albertoalmagro@gmail.com> | 2018-10-10 10:22:07 +0200 |
commit | 9b9640112e197e94e13940c0c0f990cc80ca5498 (patch) | |
tree | d8b0bc06af5ce347742d8c7beb2cef8f820c572f /activerecord/lib/active_record/enum.rb | |
parent | a52c6989a0aacc50b35891265a0b5631e1ec2370 (diff) | |
download | rails-9b9640112e197e94e13940c0c0f990cc80ca5498.tar.gz rails-9b9640112e197e94e13940c0c0f990cc80ca5498.tar.bz2 rails-9b9640112e197e94e13940c0c0f990cc80ca5498.zip |
Raise on invalid definition values
When defining a Hash enum it can be easy to use [] instead of {}. This
commit checks that only valid definition values are provided, those can
be a Hash, an array of Symbols or an array of Strings. Otherwise it
raises an ArgumentError.
Fixes #33961
Diffstat (limited to 'activerecord/lib/active_record/enum.rb')
-rw-r--r-- | activerecord/lib/active_record/enum.rb | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/activerecord/lib/active_record/enum.rb b/activerecord/lib/active_record/enum.rb index 23ecb24542..49fedc232c 100644 --- a/activerecord/lib/active_record/enum.rb +++ b/activerecord/lib/active_record/enum.rb @@ -150,6 +150,7 @@ module ActiveRecord enum_prefix = definitions.delete(:_prefix) enum_suffix = definitions.delete(:_suffix) definitions.each do |name, values| + assert_valid_enum_definition_values(values) # statuses = { } enum_values = ActiveSupport::HashWithIndifferentAccess.new name = name.to_s @@ -210,6 +211,15 @@ module ActiveRecord end end + def assert_valid_enum_definition_values(values) + unless values.is_a?(Hash) || values.all? { |v| v.is_a?(Symbol) } || values.all? { |v| v.is_a?(String) } + error_message = <<~MSG + Enum values #{values} must be either a hash, an array of symbols, or an array of strings. + MSG + raise ArgumentError, error_message + end + end + ENUM_CONFLICT_MESSAGE = \ "You tried to define an enum named \"%{enum}\" on the model \"%{klass}\", but " \ "this will generate a %{type} method \"%{method}\", which is already defined " \ |