lib/mongoid/i18n/localized_field.rb in mongoid_i18n-0.3.1 vs lib/mongoid/i18n/localized_field.rb in mongoid_i18n-0.4.0
- old
+ new
@@ -1,6 +1,49 @@
module Mongoid
module I18n
- class LocalizedField < Hash
+ class LocalizedField
+ include Mongoid::Fields::Serializable
+
+ # Return translated values of field, accoring to current locale.
+ # If :use_default_if_empty is set, then in case when there no
+ # translation available for current locale, if will try to
+ # get translation for defalt_locale.
+ def deserialize(object)
+ lookups = [self.locale]
+
+ # TODO: Add I18n.fallbacks support instead of :use_default_if_empty
+ if options[:use_default_if_empty]
+ lookups.push ::I18n.default_locale.to_s
+ end
+
+ # Find first localized value in lookup path and return corresponding value
+ object[lookups.find{|locale| object[locale]}]
+ end
+
+ # Return translations as keys. If :clear_empty_values is set to true
+ # pairs with empty values will be rejected
+ def to_hash(object)
+ if options[:clear_empty_values]
+ object.reject!{|k,v| v.blank?}
+ end
+
+ object
+ end
+
+ # Assing new translation to translation table.
+ def assign(object, value)
+ object.merge(locale => value)
+ end
+
+ # Replace translation hash with new one. If :clear_empty_values is set to
+ # pairs with empty values will be reject
+ def replace(object, values)
+ self.to_hash(values)
+ end
+
+ # Return current locale as string
+ def locale
+ ::I18n.locale.to_s
+ end
end
end
end
\ No newline at end of file