From 95a482f636ed71b897a252d535e391d1b4a95b83 Mon Sep 17 00:00:00 2001 From: Andy Mok <4ndypanda@gmail.com> Date: Wed, 22 May 2024 12:34:31 -0700 Subject: [PATCH] fix: enumerize with string store accessor keys (#441) Ensures Enumerize is agnostic to whether the key to a store accessor is a string or symbol Co-authored-by: Rick Song --- lib/enumerize/activerecord.rb | 2 +- test/activerecord_test.rb | 12 +++++++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/lib/enumerize/activerecord.rb b/lib/enumerize/activerecord.rb index c7af23c..09d35da 100644 --- a/lib/enumerize/activerecord.rb +++ b/lib/enumerize/activerecord.rb @@ -78,7 +78,7 @@ def reload(options = nil) begin # Checks first if the enumerized attribute is in ActiveRecord::Store store_attr, _ = reloaded.class.stored_attributes.detect do |_store_attr, keys| - keys.include?(attr.name) + keys.map(&:to_sym).include?(attr.name.to_sym) end if store_attr.present? diff --git a/test/activerecord_test.rb b/test/activerecord_test.rb index bc0df76..6b3f00b 100644 --- a/test/activerecord_test.rb +++ b/test/activerecord_test.rb @@ -108,10 +108,11 @@ class User < ActiveRecord::Base extend Enumerize include RoleEnum - store :settings, accessors: [:language] + store :settings, accessors: [:language, 'country_code'] enumerize :sex, :in => [:male, :female], scope: :shallow enumerize :language, :in => [:en, :jp] + enumerize :country_code, :in => [:us, :ca] serialize :interests, type: Array enumerize :interests, :in => [:music, :sports, :dancing, :programming], :multiple => true @@ -211,6 +212,15 @@ class ActiveRecordTest < Minitest::Spec expect(user.origin).must_be_nil end + it 'saves stored attribute value for store accessor with string key' do + User.delete_all + user = User.new + user.country_code = :us + user.save! + user.reload + expect(user.country_code).must_equal 'us' + end + it 'has default value' do expect(User.new.role).must_equal 'user' expect(User.new.attributes['role']).must_equal 'user'