Skip to content
This repository was archived by the owner on Apr 22, 2025. It is now read-only.

Commit d89da80

Browse files
committed
Memoization instance variables should not be set to nil but removed!
1 parent ce02edd commit d89da80

File tree

2 files changed

+21
-2
lines changed

2 files changed

+21
-2
lines changed

lib/encoded_id/rails/model.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,8 @@ def name_for_encoded_id_slug
3939
# When duplicating an ActiveRecord object, we want to reset the memoized encoded_id
4040
def dup
4141
super.tap do |new_record|
42-
new_record.instance_variable_set(:@encoded_id, nil)
43-
new_record.instance_variable_set(:@slugged_encoded_id, nil)
42+
new_record.send(:remove_instance_variable, :@encoded_id) if new_record.instance_variable_defined?(:@encoded_id)
43+
new_record.send(:remove_instance_variable, :@slugged_encoded_id) if new_record.instance_variable_defined?(:@slugged_encoded_id)
4444
end
4545
end
4646
end

test/encoded_id/test_rails.rb

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,4 +162,23 @@ def test_duplicated_record_has_different_encoded_id
162162
def test_duplicated_record_has_different_slugged_encoded_id
163163
refute_equal model.slugged_encoded_id, model.dup.slugged_encoded_id
164164
end
165+
166+
def test_both_encoded_id_and_slugged_id_are_recalculated_on_duplication
167+
initial_encoded_id = model.encoded_id
168+
initial_slugged_encoded_id = model.slugged_encoded_id
169+
new_model = model.dup
170+
refute_equal initial_encoded_id, new_model.encoded_id
171+
refute_equal initial_slugged_encoded_id, new_model.slugged_encoded_id
172+
end
173+
174+
def test_both_encoded_id_and_slugged_id_are_recalculated_on_duplication_and_persisted
175+
initial_encoded_id = model.encoded_id
176+
initial_slugged_encoded_id = model.slugged_encoded_id
177+
new_model = model.dup
178+
new_model.save
179+
refute_equal initial_encoded_id, new_model.encoded_id
180+
refute_equal initial_slugged_encoded_id, new_model.slugged_encoded_id
181+
refute_nil new_model.encoded_id
182+
refute_nil new_model.slugged_encoded_id
183+
end
165184
end

0 commit comments

Comments
 (0)