From 1c0b11533fed8a647fb7ad7edea3c76d4a36b364 Mon Sep 17 00:00:00 2001 From: Ahmed Omran Date: Sun, 19 Mar 2023 14:59:34 +0100 Subject: [PATCH] Define Type#cast instead of deserialize to fix serialization issue. Type#deserialize by default calls Type#cast so we can keep one. Closes https://github.com/brainspec/enumerize/pull/404 --- lib/enumerize/activerecord.rb | 4 ++-- test/activerecord_test.rb | 9 +++++++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/lib/enumerize/activerecord.rb b/lib/enumerize/activerecord.rb index 3dc0d73..da881b4 100644 --- a/lib/enumerize/activerecord.rb +++ b/lib/enumerize/activerecord.rb @@ -115,11 +115,11 @@ def serialize(value) alias type_cast_for_database serialize - def deserialize(value) + def cast(value) @attr.find_value(value) end - alias type_cast_from_database deserialize + alias type_cast_from_database cast def as_json(options = nil) {attr: @attr.name}.as_json(options) diff --git a/test/activerecord_test.rb b/test/activerecord_test.rb index fde4e40..eb9eb23 100644 --- a/test/activerecord_test.rb +++ b/test/activerecord_test.rb @@ -249,6 +249,15 @@ class ActiveRecordTest < MiniTest::Spec expect(user.interests).must_equal %w[music dancing] end + it 'has enumerized values in active record attributes after reload' do + User.delete_all + user = User.new + user.status = :blocked + user.save! + user.reload + expect(user.attributes["status"]).must_equal 'blocked' + end + it 'validates inclusion when using write_attribute with string attribute' do user = User.new user.send(:write_attribute, 'role', 'wrong')