Add support for sub/superclasses (NoMethodError: undefined method `values' for nil ?) #49
Copy link
Copy link
Closed
Labels
Description
I have an older project, just updated to rails 6.1 and ruby 3. However, I am seeing an issue when trying to read the values from here, and not sure why
class PostVideoType < PostMediaType
include Ruby::Enum
define :RAW, 'Raw Video'
define :GFYCAT, 'Gfycat'
define :GIPHY, 'Giphy'
define :KICKSTARTER, 'Kickstarter'
define :INSTAGRAM, 'Instagram'
define :IMGUR, 'Imgur'
define :TWITTER, 'Twitter'
define :VIDME, 'Vidme'
define :VIMEO, 'Vimeo'
define :VINE, 'Vine'
define :YOUTUBE, 'YouTube'
end
[1] pry(main)> PostVideoType.keys
=> [:RAW, :GFYCAT, :GIPHY, :KICKSTARTER, :INSTAGRAM, :IMGUR, :TWITTER, :VIDME, :VIMEO, :VINE, :YOUTUBE]
[2] pry(main)> PostVideoType.value(:RAW)
=> "Raw Video"
[3] pry(main)> PostVideoType.values
NoMethodError: undefined method `values' for nil
from /Users/redacted/.rbenv/versions/3.3.4/lib/ruby/gems/3.3.0/gems/ruby-enum-1.0.0/lib/ruby-enum/enum.rb:126:in `values'
It doesn't appear that the values method is working correctly, but I can't see why.
Reactions are currently unavailable
Activity
coneybeare commentedon Aug 14, 2024
Ah, think I figured it out. I had
include Ruby::Enumin the superclassPostMediaType, even though I put it here to try and simplify it. The@_enum_hashseems to have not been accessible that way. Movinginclude Ruby::Enuminto every subclass directly, and removing from the super class works again.dblock commentedon Aug 14, 2024
I think supporting superclass enums is a very desirable feature! Let's reopen this.
Want to try and write some (failing) specs and maybe an implementation?
[-]NoMethodError: undefined method `values' for nil ?[/-][+]Add support for sub/superclasses (NoMethodError: undefined method `values' for nil ?)[/+]pldavid2 commentedon Feb 17, 2026
Related to this issue, changing
ruby-enum/lib/ruby-enum/enum.rb
Line 126 in 7b3e255
result = (@_enum_hash || {}).values.map(&:value)make it possible to have a subclass without defining new constants.
dblock commentedon Feb 20, 2026
@pldavid2 attempt a PR?
dblock commentedon Aug 15, 2026
Copilot fixed it for us in #58
Fix NoMethodError when a subclass defines no enums of its own
Inherit keys, key?, value?, key, value, to_h, parse and each from sup…