diff --git a/lib/enum_help/i18n.rb b/lib/enum_help/i18n.rb index 6a3fe46..540c3b3 100644 --- a/lib/enum_help/i18n.rb +++ b/lib/enum_help/i18n.rb @@ -8,6 +8,7 @@ def enum( definitions ) definitions.each do |name, _| Helper.define_attr_i18n_method(self, name) Helper.define_collection_i18n_method(self, name) + Helper.define_collection_i18n_method_before_type_cast(self, name) end end @@ -50,6 +51,19 @@ def #{collection_i18n_method_name} METHOD end + def self.define_collection_i18n_method_before_type_cast(klass, attr_name) + collection_method_name = "#{attr_name.to_s.pluralize}" + collection_i18n_method_name = "#{collection_method_name}_i18n_before_type_cast" + klass.instance_eval <<-METHOD, __FILE__, __LINE__ + def #{collection_i18n_method_name} + collection_array = #{collection_method_name}.collect do |label, _| + [#{klass.public_send(collection_method_name)}[label], ::EnumHelp::Helper.translate_enum_label('#{klass}', :#{attr_name}, label)] + end + Hash[collection_array].with_indifferent_access + end + METHOD + end + def self.translate_enum_label(klass, attr_name, enum_label) ::I18n.t("enums.#{klass.to_s.underscore.gsub('/', '.')}.#{attr_name}.#{enum_label}", default: enum_label.humanize) end