lib/enum_help/i18n.rb in enum_help-0.0.9 vs lib/enum_help/i18n.rb in enum_help-0.0.10
- old
+ new
@@ -1,31 +1,61 @@
module EnumHelp
+
module I18n
# overwrite the enum method
def enum( definitions )
- klass = self
super( definitions )
- definitions.each do |name, values|
- # def status_i18n() statuses.key self[:status] end
- i18n_method_name = "#{name}_i18n".to_sym
- define_method(i18n_method_name) do
- enum_value = self.send(name)
- if enum_value
- ::I18n.t("enums.#{klass.to_s.underscore}.#{name}.#{enum_value}", default: enum_value)
- else
- nil
- end
- end
+ definitions.each do |name, _|
+ Helper.define_attr_i18n_method(self, name)
+ Helper.define_collection_i18n_method(self, name)
end
end
-
def self.extended(receiver)
# receiver.class_eval do
# # alias_method_chain :enum, :enum_help
# end
end
end
-end
+ module Helper
+
+ def self.define_attr_i18n_method(klass, attr_name)
+ attr_i18n_method_name = "#{attr_name}_i18n"
+
+ klass.class_eval <<-METHOD, __FILE__, __LINE__
+ def #{attr_i18n_method_name}
+ enum_label = self.send(:#{attr_name})
+ if enum_label
+ ::EnumHelp::Helper.translate_enum_label(self.class, :#{attr_name}, enum_label)
+ else
+ nil
+ end
+ end
+ METHOD
+ end
+
+ def self.define_collection_i18n_method(klass, attr_name)
+ collection_method_name = "#{attr_name.to_s.pluralize}"
+ collection_i18n_method_name = "#{collection_method_name}_i18n"
+
+ klass.instance_eval <<-METHOD, __FILE__, __LINE__
+ def #{collection_i18n_method_name}(*args)
+ options = args.extract_options!
+ collection = args[0] || send(:#{collection_method_name})
+ collection.except! options[:except] if options[:except]
+
+ collection.map do |label, value|
+ [::EnumHelp::Helper.translate_enum_label(self, :#{attr_name}, label), value]
+ end.to_h
+ end
+ METHOD
+ end
+
+ def self.translate_enum_label(klass, attr_name, enum_label)
+ ::I18n.t("enums.#{klass.to_s.underscore}.#{attr_name}.#{enum_label}", default: enum_label)
+ end
+
+ end
+end