module ActiveRecord::EnumTranslation

Constants

VERSION

Public Instance Methods

human_enum_name_for(enum_name, count: 1, default: nil) click to toggle source

Translates enum identifiers into a more human format, such as `“Active”` instead of `:active`. @param [Symbol] enum_name @param [Integer] count @param [Symbol, String, nil] default @return [String, nil] @example

User.new(status: :active).human_enum_name_for(:status) #=> "Active"
User.new.human_enum_name_for(:status) #=> nil
User.new.human_enum_name_for(:status, default: "Unknown") #=> "Unknown"
User.new.human_enum_name_for(:status, default: :"common.unknown") #=> "Unknown"
# File lib/activerecord/enum_translation.rb, line 18
def human_enum_name_for(enum_name, count: 1, default: nil)
  options = { count: count }
  enum_value = public_send(enum_name)
  scope = "#{self.class.i18n_scope}.attributes"

  defaults = []
  if enum_value
    defaults += self.class.lookup_ancestors.map do |ancestor|
      :"#{scope}.#{ancestor.model_name.i18n_key}.#{enum_name}.#{enum_value}"
    end
    defaults << :"attributes.#{enum_name}.#{enum_value}"
  else
    defaults << nil
  end
  defaults << default if default
  defaults << enum_value.humanize if enum_value

  key = defaults.shift
  options[:default] = defaults.empty? ? nil : defaults
  ::I18n.t(key, options)
end