translatable 0.3.1 → 1.2.2

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.3.1
1
+ 1.2.2
@@ -27,18 +27,22 @@ module Translatable
27
27
  def generate_translatable_block
28
28
  block = " translatable do"
29
29
  attributes.each do |attr|
30
- block << "\n translatable :#{attr.name}, :presence => true#, :uniqueness => true"
30
+ block << "\n field :#{attr.name}, :presence => true#, :uniqueness => true"
31
31
  end
32
32
  block << (options[:translated_model].nil? ?
33
- "\n #translatable_model 'Translated#{class_name}'" :
34
- "\n translatable_model '#{options[:translated_model]}'")
33
+ "\n #class_name 'Translated#{class_name}'" :
34
+ "\n class_name '#{options[:translated_model]}'")
35
35
  block << (options[:origin].nil? ?
36
- "\n #translatable_origin :#{singular_table_name}" :
37
- "\n translatable_origin :#{options[:origin]}")
36
+ "\n #reflection_name :#{singular_table_name}" :
37
+ "\n reflection_name :#{options[:origin]}")
38
+ block << "\n #foreign_key :origin_id"
38
39
  block << (options[:locale].nil? ?
39
- "\n #translatable_locale :locale" :
40
- "\n translatable_locale :#{options[:locale]}")
40
+ "\n #locale_key :locale" :
41
+ "\n locale_key :#{options[:locale]}")
41
42
  block << "\n end\n"
43
+
44
+ block << "\n #accepts_nested_attributes_for :translations, :current_translation"
45
+ block << "\n #attr_accessible :translations_attributes, :current_translation_attributes\n"
42
46
  end
43
47
  end
44
48
  end
@@ -7,7 +7,7 @@ module Translatable
7
7
 
8
8
  desc "Creates ActiveRecord for translation"
9
9
 
10
- class_option :prefix, :type => :string, :default => "translatable", :desc => "Specifies the prefix to used tof translation dealer (Default: translatable)"
10
+ class_option :prefix, :type => :string, :default => "translated", :desc => "Specifies the prefix to used tof translation dealer (Default: translatable)"
11
11
  class_option :origin, :type => :string, :default => "origin", :desc => "Specifies the association name to be use for origin (Default: origin)"
12
12
  class_option :locale, :type => :string, :default => "locale", :desc => "Specifies the column to be use for locale (Default: locale)"
13
13
 
@@ -1,18 +1,20 @@
1
- require 'translatable/active_record'
2
-
3
- if defined?(Rails)
1
+ module Translatable
2
+ end
3
+
4
+ require "translatable/base"
5
+
6
+ unless Gem::Specification.find_all_by_name("rails").empty?
4
7
  require 'translatable/engine'
5
8
 
6
9
  ActiveSupport.on_load(:active_record) do
7
- ActiveRecord::Base.extend Translatable::ActiveRecord if defined?(I18n)
10
+ require 'translatable/orm/active_record'
11
+ ActiveRecord::Base.extend Translatable::ActiveRecord
8
12
  end
9
13
  else
10
- begin
14
+ if Gem::Specification.find_by_name("active_record")
11
15
  require 'active_record'
12
- require 'i18n'
13
-
16
+ require 'translatable/orm/active_record'
17
+
14
18
  ActiveRecord::Base.extend Translatable::ActiveRecord
15
- rescue LoadError
16
- $stderr.puts "Warning: Translatable is not loaded"
17
19
  end
18
- end
20
+ end
@@ -0,0 +1,74 @@
1
+ module Translatable
2
+ class Base
3
+ attr_reader :fields, :translation_model, :origin_key, :origin_reflection_name
4
+
5
+ def initialize origin_model
6
+ @origin_model = origin_model
7
+ end
8
+
9
+ # API
10
+ def field(*args)
11
+ (@fields ||= []) << set_mapping(*args)
12
+ end
13
+
14
+ def class_name(model_name)
15
+ @translation_model = prepare_model model_name
16
+ end
17
+
18
+ def foreign_key(key_name)
19
+ @origin_key = key_name.to_sym
20
+ end
21
+
22
+ def reflection_name(reflection)
23
+ @origin_reflection_name = reflection.to_sym
24
+ end
25
+
26
+ def locale_key(key_name, opts = {})
27
+ set_mapping key_name, opts
28
+ @locale_column = key_name.to_sym
29
+ end
30
+
31
+ # ACCESS
32
+ def translation_model
33
+ @translation_model || (@translation_model = prepare_model)
34
+ end
35
+ alias_method :t_model, :translation_model
36
+
37
+ def origin_key
38
+ @origin_key || (@origin_key = :origin_id)
39
+ end
40
+
41
+ def origin_reflection_name
42
+ @origin_reflection_name || (@origin_reflection_name = :origin)
43
+ end
44
+ alias_method :or_name, :origin_reflection_name
45
+
46
+ def locale_column
47
+ @locale_column || (@locale_column = :locale)
48
+ end
49
+
50
+ def mapping
51
+ unless @mapping_defined
52
+ (@mapping ||= {})[locale_column] ||= :locale
53
+ @mapping_defined = true
54
+ end
55
+ @mapping || {}
56
+ end
57
+
58
+ protected
59
+
60
+ def set_mapping attribute, options = {}
61
+ (@mapping ||= {})[attribute.to_sym] = options.delete(:as) || attribute rescue attribute
62
+ return attribute, options
63
+ end
64
+
65
+ def origin_class_name
66
+ @origin_model.name
67
+ end
68
+
69
+ def prepare_model(model_name = nil)
70
+ model_constant = model_name ? model_name.to_s.camelize : "Translated#{origin_class_name}"
71
+ model_constant.constantize
72
+ end
73
+ end
74
+ end
@@ -0,0 +1,156 @@
1
+ module Translatable
2
+ ###
3
+ # In order to made the model Translatable, an additional fields should
4
+ # should be added first to it. Here is an example of it might be implemented:
5
+ #
6
+ # Examples:
7
+ #
8
+ # class Author < ActiveRecord::Base
9
+ # validates :name, :presence => true
10
+ # end
11
+ #
12
+ # class TranslatedNews < ActiveRecord::Base #
13
+ # attr_accessible :title, :content
14
+ # end
15
+ #
16
+ # class News < ActiveRecord::Base
17
+ #
18
+ # belongs_to :author
19
+ #
20
+ # translatable do
21
+ # field :title, :presence => true, :uniqueness => true
22
+ # field :content, :presence => true
23
+ # class_name "TranslatedNews"
24
+ # foreign_key :origin_id
25
+ # end
26
+ #
27
+ # accepts_nested_attributes_for :translations, :current_translation
28
+ # attr_accessible :translations_attributes, :current_translation_attributes
29
+ # attr_accessible :author_id, :author
30
+ # end
31
+ #
32
+ # An example of application:
33
+ #
34
+ # news = News.create :translations_attributes => [{title: "Resent News", content: "That is where the text goes", locale: "en"}]
35
+ # news.translations.create title: "Заголовок", content: "Содержание",locale: "ru"
36
+ #
37
+ # news.content
38
+ # # => "That is where the text goes"
39
+ #
40
+ # news.set_current_translation :ru
41
+ # news.content
42
+ # # => "Сюди идет текст"
43
+ #
44
+ # news.set_current_translation :de
45
+ # news.content
46
+ # # => nil
47
+ #
48
+ # news.set_current_translation
49
+ # news.content
50
+ # # => "That is where the text goes"
51
+ #
52
+ module ActiveRecord
53
+
54
+ def translatable(&block)
55
+ extend Translatable::ActiveRecord::ClassMethods
56
+ include Translatable::ActiveRecord::InstanceMethods
57
+
58
+ @translatable_base = Translatable::Base.new(self)
59
+
60
+ @translatable_base.instance_eval(&block)
61
+ t_register_origin
62
+ t_register_translations
63
+ t_register_locale
64
+ end
65
+
66
+ module ClassMethods
67
+
68
+ protected
69
+
70
+ ###
71
+ # Handle the routine to define all th required stuff on the original maodel
72
+ def t_register_origin
73
+ has_many :translations,
74
+ :class_name => @translatable_base.translation_model.to_s,
75
+ :foreign_key => @translatable_base.origin_key,
76
+ :inverse_of => @translatable_base.or_name,
77
+ :dependent => :destroy
78
+
79
+ class_eval <<-EOS
80
+ has_one :current_translation, -> { where("#{reflection_locale}" => ::I18n.locale) },
81
+ :class_name => @translatable_base.translation_model.to_s,
82
+ :foreign_key => @translatable_base.origin_key
83
+ EOS
84
+ end
85
+
86
+ def t_register_translations
87
+ @translatable_base.tap do |t|
88
+ t.t_model.validates t.locale_column, :presence => true
89
+ t.t_model.validates t.locale_column, :uniqueness => { :scope => t.origin_key }
90
+ t.t_model.validates t.locale_column, :format => {:with => /[a-z]{2}/}, :unless => Proc.new {
91
+ |record| record.public_send(t.locale_column).blank?
92
+ }
93
+
94
+ t.t_model.belongs_to t.or_name, :class_name => self.name, :inverse_of => :translations
95
+
96
+ t.fields.each do |f|
97
+ t.t_model.validates(f.first, f.last) unless f[1].blank?
98
+ end
99
+ end
100
+ end
101
+
102
+ def t_register_locale
103
+ @translatable_base.mapping.each_pair do |attr, attr_alias|
104
+ self.instance_eval do
105
+ define_method attr_alias do
106
+ current_translation.try(attr)
107
+ end
108
+ end
109
+ end
110
+ end
111
+
112
+ def reflection_locale
113
+ @translatable_base.locale_column
114
+ end
115
+ end
116
+
117
+ module InstanceMethods
118
+ def other_translations(reload = false)
119
+ @other_translations = nil if reload
120
+ @other_translations ||= begin
121
+ unless association(:current_translation).loaded?
122
+ translations.to_a.reject {|t|t.send(t_locale_column) == ::I18n.locale.to_s}
123
+ else
124
+ translations - [current_translation]
125
+ end
126
+ end
127
+ end
128
+
129
+ def t(locale)
130
+ translations.select { |t| t.send(t_locale_column) == locale.to_s }.first
131
+ end
132
+
133
+ def with_locale(locale, &block)
134
+ begin
135
+ set_current_translation locale.to_sym
136
+ result = block.arity > 0 ? block.call(self) : yield
137
+ ensure
138
+ set_current_translation
139
+ end
140
+ result
141
+ end
142
+
143
+ def t_set_current(locale = ::I18n.locale)
144
+ translations.load_target unless translations.loaded?
145
+ association(:current_translation).target = t(locale.to_s)
146
+ end
147
+ alias_method :set_current_translation, :t_set_current
148
+
149
+ protected
150
+
151
+ def t_locale_column
152
+ self.class.send(:reflection_locale)
153
+ end
154
+ end
155
+ end
156
+ end
@@ -1,70 +1,98 @@
1
1
  # encoding: utf-8
2
+ require 'active_record'
2
3
  require 'test_helper'
3
4
  require 'support/models/news'
4
5
  require 'support/models/posts'
5
6
  require 'support/models/messages'
6
7
 
7
- class TranslatableTest < Test::Unit::TestCase
8
- teardown do
9
- ::I18n.locale = ::I18n.default_locale
10
- end
8
+ class InstanceActiveRecordTest < Test::Unit::TestCase
9
+ teardown do
10
+ ::I18n.locale = ::I18n.default_locale
11
+ end
11
12
 
12
- context "Translatable hash" do
13
- should "Define default" do
14
- th = News.instance_variable_get :@translatable
13
+ #context "Instance" do
14
+ test "should Respond to translatable methods" do
15
+ news = News.new
15
16
 
16
- assert_kind_of Hash, th
17
- assert th.has_key?(:properties)
17
+ assert news.respond_to?(:title), "title methods is missing for News instance"
18
+ assert news.respond_to?(:content), "content methods is missing for News instance"
19
+ assert news.respond_to?(:locale), "locale methods is missing for News instance"
18
20
  end
19
21
 
20
- should "Has dafault model" do
21
- assert_equal ::TranslatableNews, News.send(:translatable_model_prepared, 'TranslatableNews')
22
- end
23
- end
22
+ test "should Creates without translation" do
23
+ news = News.create
24
24
 
25
- context "Translatable model preparation" do
26
- should "Accept constant" do
27
- assert_equal ::TranslatableNews, News.send(:translatable_model_prepared, ::TranslatableNews)
25
+ assert news.persisted?
26
+ assert_nil TranslatedNews.last
28
27
  end
29
28
 
30
- should "Accept string" do
31
- assert_equal ::TranslatableNews, News.send(:translatable_model_prepared, "TranslatableNews")
32
- end
29
+ test "should Change current translation" do
30
+ news = News.create :translations_attributes => [{:title => "Заголовок", :content => "Содержание", :locale => "ru"},
31
+ {:title => "Resent News", :content => "That is where the text goes", :locale => "en"}]
33
32
 
34
- should "Accept symbol" do
35
- assert_equal ::TranslatableNews, News.send(:translatable_model_prepared, :TranslatableNews)
33
+ assert news.persisted?
34
+ assert_equal TranslatedNews.last, news.current_translation
35
+ assert_equal "en", news.current_translation.locale
36
+
37
+ news.set_current_translation :ru
38
+ assert_equal TranslatedNews.first, news.current_translation
39
+ assert_equal "ru", news.current_translation.locale
36
40
  end
37
- end
38
41
 
39
- context "Instance" do
40
- should "Respond to translatable methods" do
41
- news = News.new
42
+ test "should Evaluate under translation" do
43
+ test_runner = self
44
+ news = News.create :translations_attributes => [{:title => "Заголовок", :content => "Содержание", :locale => "ru"},
45
+ {:title => "Resent News", :content => "That is where the text goes", :locale => "en"}]
42
46
 
43
- assert news.respond_to?(:title), "title methods is missing for News instance"
44
- assert news.respond_to?(:content), "content methods is missing for News instance"
47
+ assert_equal "en", news.current_translation.locale
48
+
49
+ news.with_locale(:ru) do
50
+ test_runner.assert_equal "ru", news.current_translation.locale
51
+ end
52
+ assert_equal "en", news.current_translation.locale
53
+
54
+ news.with_locale(:ru) do |n|
55
+ test_runner.assert_equal "ru", n.current_translation.locale
56
+ end
57
+ assert_equal "en", news.current_translation.locale
45
58
  end
46
59
 
47
- should "Creates without translation" do
48
- news = News.create
60
+ test "should Shortcut translation" do
61
+ news = News.create :translations_attributes => [{:title => "Заголовок", :content => "Содержание", :locale => "ru"},
62
+ {:title => "Resent News", :content => "That is where the text goes", :locale => "en"}]
49
63
 
50
- assert news.persisted?
51
- assert_nil TranslatableNews.last
64
+ assert_equal TranslatedNews.last, news.t(:en)
65
+ assert_equal "en", news.t(:en).locale
66
+
67
+ assert_equal TranslatedNews.first, news.t(:ru)
68
+ assert_equal "ru", news.t(:ru).locale
52
69
  end
53
70
 
54
- should "Have no other translation" do
71
+ test "should Have no other translation" do
55
72
  news = News.create :translations_attributes => [{ :title => "Заголовок", :content => "Содержание", :locale => "ru"}]
56
73
 
57
74
  assert news.persisted?
58
75
 
59
- t_news = TranslatableNews.last
76
+ t_news = TranslatedNews.last
60
77
  assert_equal [t_news], news.other_translations
61
78
 
62
79
  news.set_current_translation :ru
63
80
 
64
- assert_equal [], news.other_translations
81
+ assert_equal [], news.other_translations(true)
82
+ end
83
+
84
+ test "should Have other translation" do
85
+ news = News.create :translations_attributes => [{:title => "Заголовок", :content => "Содержание", :locale => "ru"},
86
+ {:title => "Resent News", :content => "That is where the text goes", :locale => "en"}]
87
+
88
+ assert news.persisted?
89
+ assert_equal [TranslatedNews.first], news.other_translations
90
+
91
+ news.set_current_translation :ru
92
+ assert_equal [TranslatedNews.last], news.other_translations(true)
65
93
  end
66
94
 
67
- should "Provide errors on creation" do
95
+ test "should Provide errors on creation" do
68
96
  news = News.create :translations_attributes => [{:title => "Заголовок", :content => "Содержание", :locale => "ru"},
69
97
  {:title => "Resent News", :content => "That is where the text goes", :locale => ""}]
70
98
 
@@ -76,73 +104,91 @@ class TranslatableTest < Test::Unit::TestCase
76
104
  assert t.new_record?
77
105
  end
78
106
  end
107
+ #end
108
+ end
109
+
110
+ class TranslatableInstanceActiveRecordTest < Test::Unit::TestCase
111
+ teardown do
112
+ ::I18n.locale = ::I18n.default_locale
79
113
  end
80
114
 
81
- context "Translatable instance" do
82
- should "Respond to translatable methods" do
83
- news = TranslatableNews.new
115
+ #context "Translatable instance" do
116
+ test "should Respond to translatable methods" do
117
+ news = TranslatedNews.new
84
118
 
85
- assert news.respond_to?(:title), "Title method is missing for TranslatableNews instance"
86
- assert news.respond_to?(:content), "Content method is missing for TranslatableNews instance"
119
+ assert news.respond_to?(:title), "Title method is missing for TranslatedNews instance"
120
+ assert news.respond_to?(:content), "Content method is missing for TranslatedNews instance"
87
121
  end
88
122
 
89
- should "Respond to methods related to origin" do
90
- news = TranslatableNews.new
123
+ test "should Respond to methods related to origin" do
124
+ news = TranslatedNews.new
91
125
 
92
- assert news.respond_to?(:locale), "Locale method is missing for TranslatableNews instance"
93
- assert news.respond_to?(:origin_id), "Origin methods is missing for TranslatableNews instance"
94
- assert news.respond_to?(:origin), "Origin methods is missing for TranslatableNews instance"
126
+ assert news.respond_to?(:locale), "Locale method is missing for TranslatedNews instance"
127
+ assert news.respond_to?(:origin_id), "Origin methods is missing for TranslatedNews instance"
128
+ assert news.respond_to?(:origin), "Origin methods is missing for TranslatedNews instance"
95
129
  end
96
- end
130
+ #end
131
+ end
97
132
 
98
- context "Creation with translation" do
99
- should "Assign to origin" do
133
+ class CreationActiveRecordTest < Test::Unit::TestCase
134
+ teardown do
135
+ ::I18n.locale = ::I18n.default_locale
136
+ end
137
+
138
+ #context "Creation with translation" do
139
+ test "should Assign to origin" do
100
140
  news = News.create
101
- t_news = TranslatableNews.create :title => "Заголовок", :content => "Содержание", :locale => "ru", :origin_id => news.id
141
+ t_news = TranslatedNews.create :title => "Заголовок", :content => "Содержание", :locale => "ru", :origin_id => news.id
102
142
 
103
143
  assert t_news.persisted?
104
144
 
105
- t_news = TranslatableNews.last
145
+ t_news = TranslatedNews.last
106
146
  assert_equal news.id, t_news.origin_id
107
147
  assert_equal "Заголовок", t_news.title
108
148
  assert_equal "Содержание", t_news.content
109
149
  assert_equal "ru", t_news.locale
110
150
  end
111
151
 
112
- should "Create translation on origin creation" do
152
+ test "should Create translation on origin creation" do
113
153
  news = News.create :translations_attributes => [{ :title => "Заголовок", :content => "Содержание", :locale => "ru"}]
114
154
 
115
155
  assert news.persisted?
116
156
 
117
- t_news = TranslatableNews.last
157
+ t_news = TranslatedNews.last
118
158
  assert_equal news.id, t_news.origin_id.to_i
119
159
  assert_equal "Заголовок", t_news.title
120
160
  assert_equal "Содержание", t_news.content
121
161
  assert_equal "ru", t_news.locale
122
162
  end
123
163
 
124
- should "Create multiple translations" do
164
+ test "should Create multiple translations" do
125
165
  news = News.create :translations_attributes => [{ :title => "Заголовок", :content => "Содержание", :locale => "ru"},
126
166
  {:title => "Resent News", :content => "That is where the text goes", :locale => "en"}]
127
167
 
128
168
  assert news.persisted?
129
169
 
130
- t_news = TranslatableNews.first
170
+ t_news = TranslatedNews.first
131
171
  assert_equal news.id, t_news.origin_id.to_i
132
172
  assert_equal "Заголовок", t_news.title
133
173
  assert_equal "Содержание", t_news.content
134
174
  assert_equal "ru", t_news.locale
135
175
 
136
- t_news = TranslatableNews.last
176
+ t_news = TranslatedNews.last
137
177
  assert_equal news.id, t_news.origin_id.to_i
138
178
  assert_equal "Resent News", t_news.title
139
179
  assert_equal "That is where the text goes", t_news.content
140
180
  assert_equal "en", t_news.locale
141
181
  end
182
+ #end
183
+ end
184
+
185
+ class CurrentTranslationActiveRecordTest < Test::Unit::TestCase
186
+ teardown do
187
+ ::I18n.locale = ::I18n.default_locale
142
188
  end
143
189
 
144
- context "Current translation" do
145
- should "Set default translation" do
190
+ #context "Current translation" do
191
+ test "should Set default translation" do
146
192
  news = News.create :translations_attributes => [{:title => "Заголовок", :content => "Содержание", :locale => "ru"},
147
193
  {:title => "Resent News", :content => "That is where the text goes", :locale => "en"}]
148
194
 
@@ -152,19 +198,19 @@ class TranslatableTest < Test::Unit::TestCase
152
198
  assert_equal "That is where the text goes", news.content
153
199
  end
154
200
 
155
- should "Been set equal to current locale" do
201
+ test "should Been set equal to current locale" do
156
202
  news = News.create :translations_attributes => [{:title => "Заголовок", :content => "Содержание", :locale => "ru"},
157
203
  {:title => "Resent News", :content => "That is where the text goes", :locale => "en"}]
158
204
 
159
205
  assert news.persisted?
160
206
 
161
- ::I18n.locale = :ru
207
+ news.set_current_translation :ru
162
208
 
163
209
  assert_equal "Заголовок", news.title
164
210
  assert_equal "Содержание", news.content
165
211
  end
166
212
 
167
- should "Not been set if unavailable" do
213
+ test "should Not been set if unavailable" do
168
214
  news = News.create :translations_attributes => [{:title => "Заголовок", :content => "Содержание", :locale => "ru"},
169
215
  {:title => "Resent News", :content => "That is where the text goes", :locale => "en"}]
170
216
 
@@ -175,7 +221,7 @@ class TranslatableTest < Test::Unit::TestCase
175
221
  assert_nil news.content
176
222
  end
177
223
 
178
- should "Be switched on locale switching" do
224
+ test "should Be switched on locale switching" do
179
225
  news = News.create :translations_attributes => [{:title => "Resent News", :content => "That is where the text goes", :locale => "en"}]
180
226
 
181
227
  assert news.persisted?
@@ -193,9 +239,9 @@ class TranslatableTest < Test::Unit::TestCase
193
239
  assert_equal "Заголовок", news.title
194
240
  assert_equal "Содержание", news.content
195
241
  end
196
- end
242
+ #end
197
243
 
198
- should "Add translation to existing record" do
244
+ test "should Add translation to existing record" do
199
245
  news = News.create :translations_attributes => [{:title => "Resent News", :content => "That is where the text goes", :locale => "en"}]
200
246
 
201
247
  assert news.persisted?
@@ -206,41 +252,41 @@ class TranslatableTest < Test::Unit::TestCase
206
252
  assert t_news.persisted?
207
253
  end
208
254
 
209
- should "Define validations" do
210
- post = Post.create :translations_attributes => [{:title => "Заголовок",:content => "Содержание", :locale => "ru"},
211
- {:title => "Resent Post", :content => "That is where the text goes", :locale => "en"}]
255
+ test "should Define validations" do
256
+ post = Post.create :translations_attributes => [{:title => "Заголовок",:content => "Содержание", :language => "ru"},
257
+ {:title => "Resent Post", :content => "That is where the text goes", :language => "en"}]
212
258
  assert post.persisted?, "Message had errors: #{post.errors.inspect}"
213
259
 
214
- post = Post.create :translations_attributes => [{:content => "Содержание", :locale => "ru"},
215
- {:title => "Resent Post 2", :content => "That is where the text goes", :locale => "en"}]
260
+ post = Post.create :translations_attributes => [{:content => "Содержание", :language => "ru"},
261
+ {:title => "Resent Post 2", :content => "That is where the text goes", :language => "en"}]
216
262
 
217
263
  assert post.new_record?, "Message had errors: #{post.errors.full_messages.inspect}"
218
264
  assert_equal ["Translations title can't be blank"], post.errors.full_messages
219
265
 
220
- post = Post.create :translations_attributes => [{:title => "Заголовок 2", :locale => "ru"},
221
- {:title => "Resent Post 3", :content => "That is where the text goes", :locale => "en"}]
266
+ post = Post.create :translations_attributes => [{:title => "Заголовок 2", :language => "ru"},
267
+ {:title => "Resent Post 3", :content => "That is where the text goes", :language => "en"}]
222
268
 
223
269
  assert post.new_record?, "Message had errors: #{post.errors.full_messages.inspect}"
224
270
  assert_equal ["Translations content can't be blank"], post.errors.full_messages
225
271
 
226
- post = Post.create :translations_attributes => [{:title => "Заголовок", :content => "Содержание", :locale => "ru"},
227
- {:title => "Resent Post 3", :content => "That is where the text goes", :locale => "en"}]
272
+ post = Post.create :translations_attributes => [{:title => "Заголовок", :content => "Содержание", :language => "ru"},
273
+ {:title => "Resent Post 3", :content => "That is where the text goes", :language => "en"}]
228
274
 
229
275
  assert post.new_record?, "Message had errors: #{post.errors.full_messages.inspect}"
230
276
  assert_equal ["Translations title has already been taken"], post.errors.full_messages
231
277
  end
232
278
 
233
279
  def test_origin_is_owerwrittent
234
- post = Post.create :translations_attributes => [{:title => "Заголовок",:content => "Содержание", :locale => "ru"},
235
- {:title => "Resent Post", :content => "That is where the text goes", :locale => "en"}]
280
+ post = Post.create :translations_attributes => [{:title => "Заголовок",:content => "Содержание", :language => "ru"},
281
+ {:title => "Resent Post", :content => "That is where the text goes", :language => "en"}]
236
282
  assert post.persisted?, "Message had errors: #{post.errors.inspect}"
237
283
 
238
- assert_not_equal post.object_id, post.translations.first.post.object_id
284
+ assert_equal post.object_id, post.translations.first.post.object_id
239
285
  end
240
286
 
241
- should "Accept aliases for fileds" do
242
- post = Post.create :translations_attributes => [{:title => "Заголовок",:content => "Содержание", :locale => "ru"},
243
- {:title => "Resent Post", :content => "That is where the text goes", :locale => "en"}]
287
+ test "should Accept aliases for fileds" do
288
+ post = Post.create :translations_attributes => [{:title => "Заголовок",:content => "Содержание", :language => "ru"},
289
+ {:title => "Resent Post", :content => "That is where the text goes", :language => "en"}]
244
290
  assert post.persisted?, "Message had errors: #{post.errors.inspect}"
245
291
 
246
292
  assert_equal "Resent Post", post.translated_title
@@ -249,10 +295,16 @@ class TranslatableTest < Test::Unit::TestCase
249
295
 
250
296
  assert_equal "Заголовок", post.translated_title
251
297
  end
298
+ end
299
+
300
+ class MassAssigmentActiveRecordTest < Test::Unit::TestCase
301
+ teardown do
302
+ ::I18n.locale = ::I18n.default_locale
303
+ end
252
304
 
253
- context "Mass assigment" do
254
- should "Be available to mass assigment by default" do
255
- tp = TranslatableNews.new( :title => "Resent News", :content => "That is where the text goes", :locale => "en", :origin_id => 1)
305
+ #context "Mass assigment" do
306
+ test "should Be available to mass assigment by default" do
307
+ tp = TranslatedNews.new( :title => "Resent News", :content => "That is where the text goes", :locale => "en", :origin_id => 1)
256
308
 
257
309
  assert_equal "Resent News", tp.title
258
310
  assert_equal "That is where the text goes", tp.content
@@ -260,22 +312,22 @@ class TranslatableTest < Test::Unit::TestCase
260
312
  assert_equal 1, tp.origin_id
261
313
  end
262
314
 
263
- should "Protect internal fields on desire" do
264
- tm = TranslatedMessage.new( :title => "Resent Post", :content => "That is where the text goes", :locale => "en", :message_id => 1)
315
+ test "should Protect internal fields on desire" do
316
+ tm = MessageTranslation.new( :title => "Resent Message", :content => "That is where the text goes", :locale => "en", :message_id => 1)
265
317
 
266
- assert_equal "Resent Post", tm.title
318
+ assert_equal "Resent Message", tm.title
267
319
  assert_equal "That is where the text goes", tm.content
268
320
  assert_equal nil, tm.locale
269
- assert_equal nil, tm.message_id
321
+ assert_equal nil, tm.origin_id
270
322
  end
271
323
 
272
- should "Allow multiple assigment rules" do
273
- tm = TranslatedMessage.new( {:title => "Resent Post", :content => "That is where the text goes", :locale => "en", :message_id => 1}, :as => :editor)
324
+ test "should Allow multiple assigment rules" do
325
+ tm = MessageTranslation.new( {:title => "Resent Message", :content => "That is where the text goes", :locale => "en", :message_id => 1}, :as => :editor)
274
326
 
275
- assert_equal "Resent Post", tm.title
327
+ assert_equal "Resent Message", tm.title
276
328
  assert_equal "That is where the text goes", tm.content
277
329
  assert_equal "en", tm.locale
278
- assert_equal nil, tm.message_id
330
+ assert_equal nil, tm.origin_id
279
331
  end
280
- end
332
+ #end
281
333
  end