diff --git a/lib/literal/enum.rb b/lib/literal/enum.rb index 8123da4..b8c8e28 100644 --- a/lib/literal/enum.rb +++ b/lib/literal/enum.rb @@ -158,8 +158,12 @@ def to_proc method(:coerce).to_proc end - def to_h(...) - @values.to_h(...) + def to_h(&) + if block_given? + @members.to_h(&) + else + @members.to_h { |it| [it, it.value] } + end end end diff --git a/test/enum.test.rb b/test/enum.test.rb index 31cd6d5..a233590 100644 --- a/test/enum.test.rb +++ b/test/enum.test.rb @@ -47,7 +47,7 @@ def toggle = On expect(Color.coerce(1)) == Color::Red expect(Color.coerce(Color::Red)) == Color::Red expect(Color.to_set) == Set[Color::Red, Color::Green, Color::Blue] - expect(Color.to_h) == { 1 => Color::Red, 2 => Color::Green, 3 => Color::Blue } + expect(Color.to_h) == { Color::Red => 1, Color::Green => 2, Color::Blue => 3 } expect(Color.to_a) == [Color::Red, Color::Green, Color::Blue] if RUBY_VERSION >= "3.2" expect(Color.values) == [1, 2, 3] if RUBY_VERSION >= "3.2" expect([3, 2, 1].map(&Color)) == [Color::Blue, Color::Green, Color::Red]