Skip to content

Commit 1a68378

Browse files
committed
Fix DuplicateKeyError when the whole class is reloaded
1 parent 7b3e255 commit 1a68378

2 files changed

Lines changed: 19 additions & 0 deletions

File tree

lib/ruby-enum/enum.rb

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@ def self.included(base)
1919
base.extend ClassMethods
2020

2121
base.private_class_method(:new)
22+
23+
base.instance_variable_set(:@_enum_hash, {})
24+
base.instance_variable_set(:@_enums_by_value, {})
2225
end
2326

2427
module ClassMethods

spec/ruby-enum/enum_spec.rb

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -229,6 +229,22 @@ class SecondSubclass < FirstSubclass
229229
end
230230
end
231231

232+
# rubocop:disable Rspec/DescribedClass
233+
describe 'Reloading enum definition' do
234+
it 'plays nice with lazy loading in Ruby on Rails' do
235+
class_body = proc do
236+
include Ruby::Enum
237+
238+
define :BALD, 'bald'
239+
end
240+
241+
HairStyles = Class.new(&class_body)
242+
243+
expect { HairStyles.class_eval(&class_body) }.not_to raise_error
244+
end
245+
end
246+
# rubocop:enable Rspec/DescribedClass
247+
232248
describe 'Given a class that has not defined any enums' do
233249
class EmptyEnums
234250
include Ruby::Enum

0 commit comments

Comments
 (0)