embedded_localization 0.2.2 → 0.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/README.textile CHANGED
@@ -81,7 +81,7 @@ end
81
81
 
82
82
  h4. NOTE:
83
83
 
84
- EmbeddedLocalization implementations < 0.2.0 have the drawback that you can not do SQL queries on translated attributes.
84
+ EmbeddedLocalization implementations < 0.2.0 had the drawback that you can not do SQL queries on translated attributes.
85
85
 
86
86
  To eliminate this limitation, you can now define any translated attribute as a first-class database column in your migration. If you define a translated attribute as a column, EmbeddedLocalization will store the attribute value for I18n.default_locale in that column, so you can search for it. After defining the column, and running the migration, you need to populate the column initially. It will auto-update every time you write while you are using I18n.default_locale .
87
87
  e.g.:
@@ -205,6 +205,9 @@ If your requirements are different, my approach might not work for you. In that
205
205
 
206
206
  h2. Changes
207
207
 
208
+ h3. 0.2.3 (2012-03-02)
209
+ * Issue #4 : bugfix for attr_writer - no longer updates attributes if value didn't change => timestamps don't change in that case
210
+
208
211
  h3. 0.2.2 (2012-02-06)
209
212
  * bugfix for attr_writer
210
213
 
@@ -67,6 +67,12 @@ module EmbeddedLocalization
67
67
  # define the setter method
68
68
  #
69
69
  define_method(attr_name.to_s+ '=') do |new_translation|
70
+ # first check if nothing changed - then we can just return, so that timestamps and other records don't get touched
71
+ if self.i18n.class == Hash && (self.i18n[I18n.locale]) && (self.i18n[I18n.locale][attr_name.to_sym] == new_translation)
72
+ return if (I18n.locale != I18n.default_locale)
73
+ return if (I18n.locale == I18n.default_locale) && (read_attribute(attr_name) == new_translation) # both i18n and attr_name need to be equal to new_translation
74
+ end
75
+
70
76
  self.i18n_will_change! # for ActiveModel Dirty tracking
71
77
  if self.attributes.has_key?(attr_name.to_s) # if user has defined DB field with that name
72
78
  write_attribute(attr_name , new_translation) if I18n.locale == I18n.default_locale
@@ -17,6 +17,12 @@ module EmbeddedLocalization
17
17
  end
18
18
 
19
19
  def set_localized_attribute(attr_name, locale, new_translation)
20
+ # first check if nothing changed - then we can just return, so that timestamps and other records don't get touched
21
+ if self.i18n.class == Hash && (self.i18n[I18n.locale]) && (self.i18n[I18n.locale][attr_name.to_sym] == new_translation)
22
+ return if (I18n.locale != I18n.default_locale)
23
+ return if (I18n.locale == I18n.default_locale) && (read_attribute(attr_name) == new_translation) # both i18n and attr_name need to be equal to new_translation
24
+ end
25
+
20
26
  self.i18n_will_change! # for ActiveModel Dirty tracking
21
27
  if self.attributes.has_key?(attr_name.to_s) # if user has defined DB field with that name
22
28
  write_attribute(attr_name , new_translation) if locale == I18n.default_locale
@@ -1,3 +1,3 @@
1
1
  module EmbeddedLocalization
2
- VERSION = '0.2.2'
2
+ VERSION = '0.2.3'
3
3
  end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: embedded_localization
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.2.2
5
+ version: 0.2.3
6
6
  platform: ruby
7
7
  authors:
8
8
  - Tilo Sloboda
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2012-02-07 00:00:00 Z
13
+ date: 2012-03-02 00:00:00 Z
14
14
  dependencies: []
15
15
 
16
16
  description: "Rails I18n: Embedded_Localization for ActiveRecord 3 is very lightweight, and allows you to transparently store translations of attributes right inside each record -- no extra database tables needed to store the localization data!"