Skip to content

Return stored enumeration instances as-is from attribute getters#67

Merged
lovro-bikic merged 1 commit into
infinum:masterfrom
sucicfilip:fix/enum-instance-attribute-getters
Jun 29, 2026
Merged

Return stored enumeration instances as-is from attribute getters#67
lovro-bikic merged 1 commit into
infinum:masterfrom
sucicfilip:fix/enum-instance-attribute-getters

Conversation

@sucicfilip

@sucicfilip sucicfilip commented Jun 29, 2026

Copy link
Copy Markdown
Contributor

Since 3.0 Enumerations::Base inherits from String. In define_attributes_getters the when String, Symbol branch now also matches an enum instance stored as another enum's attribute (it is a String now), routing it through translate_attribute and returning a plain String instead of the enum instance.

So an attribute that stores another enumeration:

class Product < Enumerations::Base
  value :basic, name: 'Basic', active: true
end

class Price < Enumerations::Base
  value :basic_monthly, product: Product.basic
end

Price.basic_monthly.product        # => "basic" (a String, was a Product before 3.0)
Price.basic_monthly.product.active # => NoMethodError: undefined method 'active' for an instance of String

Added a when Enumerations::Base branch before the String/Symbol branch so the stored instance is returned as-is. Order matters since Base < String. Also added a regression test.

@sucicfilip sucicfilip marked this pull request as ready for review June 29, 2026 08:52
@lovro-bikic lovro-bikic merged commit 6bc8a23 into infinum:master Jun 29, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants