Module: EnumExt
- Includes:
- BasicHelpers, HumanizeHelpers, SupersetHelpers
- Defined in:
- lib/enum_ext.rb,
lib/enum_ext/version.rb
Defined Under Namespace
Modules: Annotated, BasicHelpers, HumanizeHelpers, SupersetHelpers Classes: EnumWrapper
Constant Summary collapse
- VERSION =
"0.8.0"
Instance Method Summary collapse
-
#enum(name = nil, values = nil, **options) ⇒ Object
extending enum with inplace settings enum status: {}, ext: [:enum_i, :mass_assign_enum, :enum_multi_scopes, enum_supersets: { }] and wrapping and replacing original enum with a wrapper object.
-
#enum_ext(enum_name, extensions) ⇒ Object
its an extension helper, on the opposite to basic enum method could be called multiple times.
Methods included from HumanizeHelpers
define_superset_humanization_helpers, #human_attribute_name, #humanize_enum, #translate_enum
Instance Method Details
#enum(name = nil, values = nil, **options) ⇒ Object
extending enum with inplace settings enum status: {}, ext: [:enum_i, :mass_assign_enum, :enum_multi_scopes, enum_supersets: { }] and wrapping and replacing original enum with a wrapper object
I’m using signature of a ActiveRecord 7 here: enum(name = nil, values = nil, **options) in earlier versions of ActiveRecord signature looks different: enum(definitions), so calling super should be different based on ActiveRecord major version
49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/enum_ext.rb', line 49 def enum(name = nil, values = nil, **) single_enum_definition = name.present? extensions = .delete(:ext) (ActiveRecord::VERSION::MAJOR >= 7 ? super : super()).tap do |multiple_enum_definitions| if single_enum_definition enum_ext(name, extensions) else multiple_enum_definitions.each { |enum_name,| enum_ext(enum_name, extensions) } end end end |
#enum_ext(enum_name, extensions) ⇒ Object
its an extension helper, on the opposite to basic enum method could be called multiple times
63 64 65 66 67 68 69 |
# File 'lib/enum_ext.rb', line 63 def enum_ext(enum_name, extensions) replace_enum_with_wrapper(enum_name) # [:enum_i, :enum_multi_scopes, enum_supersets: { valid: [:fresh, :cool], invalid: [:stale] }] # --> [:enum_i, :enum_multi_scopes, [:enum_supersets, { valid: [:fresh, :cool], invalid: [:stale] }] [*extensions].map { _1.try(:to_a)&.flatten || _1 } .each { |(ext_method, params)| send(*[ext_method, enum_name, params].compact) } end |