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.9.0"

Instance Method Summary collapse

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
61
62
63
64
65
# File 'lib/enum_ext.rb', line 49

def enum(name = nil, values = nil, **options)
  single_enum_definition = name.present?
  extensions = options.delete(:ext)
  options_dup = options.dup

  (ActiveRecord::VERSION::MAJOR >= 7 ? super : super(options)).tap do |multiple_enum_definitions|
    if single_enum_definition
      replace_enum_with_wrapper(name, options_dup)
      enum_ext(name, [*extensions])
    else
      multiple_enum_definitions.each { |enum_name,|
        replace_enum_with_wrapper(enum_name, options_dup)
        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



68
69
70
71
72
73
# File 'lib/enum_ext.rb', line 68

def enum_ext(enum_name, extensions)
  # [: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