embedded_localization 0.1.4 → 0.2.0

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
@@ -50,15 +50,28 @@ g.name # => "공상 과학 소설"
50
50
 
51
51
  No extra tables needed for this!
52
52
 
53
- h3. Rails 3.0 + Embedded_Localization version < 0.2.0
53
+ h3. Rails 3.0
54
54
 
55
55
  <pre><code>
56
56
  class CreateGenres < ActiveRecord::Migration
57
57
  def self.up
58
58
  create_table :genres do |t|
59
- t.text :i18n # this will be deprecated in 0.2.0
59
+ t.text :i18n # stores the translated attributes; persisted as a HashWithIndifferentAccess
60
+
61
+ # optional:
62
+ # t.string :name # you CAN define :name as a real column in your DB (but you don't have to)
63
+ # # If you define it, it will store the I18n.default_locale translation for SQL lookups
64
+ # # You can do this for any of the translated attributes.
60
65
  t.timestamps
61
66
  end
67
+ # -- example for a data migration: ---
68
+ # Genre.record_timestamps = false
69
+ # Genre.all.each do |g|
70
+ # g.name = g.name # the right-hand-side fetches the translation from the i18n attribute hash
71
+ # g.save # saves the :name attribute without updating the updated_at timestamp
72
+ # end
73
+ # Genre.record_timestamps = true
74
+ # ------------------------------------
62
75
  end
63
76
  def self.down
64
77
  drop_table :posts
@@ -66,7 +79,16 @@ class CreateGenres < ActiveRecord::Migration
66
79
  end
67
80
  </code></pre>
68
81
 
69
- Please note, if you use Embedded_Localization with version < 0.2.0, that you should not define the translated attributes in the migrations -- instead define one text attribute with the name :i18n -- this will change in version 0.2.0
82
+ h4. NOTE:
83
+
84
+ EmbeddedLocalization implementations < 0.2.0 have the drawback that you can not do SQL queries on translated attributes.
85
+
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
+ e.g.:
88
+
89
+ <pre><code>
90
+ g = Genre.where(:name => "science fiction") # this only works if you define :name as a DB column, and populate it
91
+ </pre></code>
70
92
 
71
93
  Note that the ActiveRecord model @Genre@ must already exist and have a @translates@ directive listing the translated fields.
72
94
 
@@ -68,6 +68,9 @@ module EmbeddedLocalization
68
68
  #
69
69
  define_method(attr_name.to_s+ '=') do |new_translation|
70
70
  self.i18n_will_change! # for ActiveModel Dirty tracking
71
+ if self.attributes.has_key?(attr_name.to_s) # if user has defined DB field with that name
72
+ write_attribute(attr_name , new_translation) if I18n.locale == I18n.default_locale
73
+ end
71
74
  self.i18n[I18n.locale] ||= HashWithIndifferentAccess.new
72
75
  self.i18n[I18n.locale][attr_name] = new_translation
73
76
  end
@@ -18,6 +18,9 @@ module EmbeddedLocalization
18
18
 
19
19
  def set_localized_attribute(attr_name, locale, new_translation)
20
20
  self.i18n_will_change! # for ActiveModel Dirty tracking
21
+ if self.attributes.has_key?(attr_name.to_s) # if user has defined DB field with that name
22
+ write_attribute(attr_name , new_translation) if locale == I18n.default_locale
23
+ end
21
24
  self.i18n[locale] ||= HashWithIndifferentAccess.new
22
25
  self.i18n[locale][attr_name] = new_translation
23
26
  end
@@ -1,3 +1,3 @@
1
1
  module EmbeddedLocalization
2
- VERSION = '0.1.4'
2
+ VERSION = '0.2.0'
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.1.4
5
+ version: 0.2.0
6
6
  platform: ruby
7
7
  authors:
8
8
  - Tilo Sloboda