class EnumI18nHelp::EnumAttribute

Public Class Methods

define_options_method!(klass, attr_name, attr_value) click to toggle source

This method assume that attr_value is a symbolized hash

# File lib/enum_i18n_help/enum_i18n.rb, line 33
      def define_options_method!(klass, attr_name, attr_value)
        attr_value_hash = attr_value.keys.map { |key| [key, key.to_s.humanize] }.to_h

        klass.instance_eval <<-METHOD, __FILE__, __LINE__ + 1
        def #{attr_name}_options
          locale_definitions = I18n.t("activerecord.attributes.#{klass.name.underscore}/#{attr_name}")

          #{attr_value_hash}
            .merge(locale_definitions.reject{ |k, v| v.nil? || #{attr_value.keys}.exclude?(k.to_sym) })
            .invert
            .to_a
        end
        METHOD
      end
define_text_method!(klass, enum_key) click to toggle source
# File lib/enum_i18n_help/enum_i18n.rb, line 22
      def define_text_method!(klass, enum_key)
        klass.class_eval <<-METHOD, __FILE__, __LINE__ + 1
        def #{enum_key}_text
          return if #{enum_key}.nil?

          I18n.t "activerecord.attributes.#{klass.name.underscore}/#{enum_key}." + #{enum_key}, default: #{enum_key}.humanize
        end
        METHOD
      end